[第4 章]決められた入出力ポートだが逆に使いやすい

アナログ入出力もスケッチが用意されていて使い方は簡単
本章では，Arduino のアナログ入力として，センサからの出力の代わりにボリュームを用いて，0V から電源電圧まで変化する電圧を読み取り，この変化した電圧に対応した出力を LED に加えてアナログ入出力のテストを行います．
続いて，アナログ入力の具体例として温度の測定を行います．そのため，正確に電圧を測定するための基準電圧の設定方法について確認し，半導体温度センサを実際に接続して温度を測定します．その後，応用例として湿度を測定するための乾湿球温度計を作ります．

4-1
4-1-1

アナログ入力とアナログ出力

マイコン・ボードとブレッドボードでテスト

Arduino のアナログ入力ポートからは，0 〜数 V の連続的に変化するアナログ電圧を容易に読み取ることができます．読み取ったアナログ・データは，Arduino に用意されているスケッチにて，加減乗除はもとよりもっと高度な関数の計算処理も行うことができます．そのため，いろいろなセンサをボリュームからは，5V×R2
R 1＋R 2 の電圧が出力される

最大 6 ポートのアナログ信号を読み取ることができる

アナログ出力でLED に出力する
赤色 LED の場合 330Ω以上，白色 LED の場合 220Ω以上の抵抗を使用する

5V
摺動子で分割された抵抗値の比に，電圧も分割される

R1

LEDGND

R2GND

アナログ入力ポート（6 ポート）A0〜A5

アナログ出力は，D3，D5，D6，D9，D10，D11のポートを利用して，出力することができるボリュームをまわして，アナログ入力ポートに加える電圧を変える

図 4-1

アナログ入出力の確認

4-1 アナログ入力とアナログ出力37アナログ入力 analogRead() は入力するポートを指定すると，結果が関数の値として戻される

Setup() には，何も記述しない「アナログ・ポート 0 番」
から読み取った値を，「アナログ出力ポート 9 番」に書き出すという記述

アナログ出力 analogWrite() は出力ポートと出力する値を指定する

図 4-2

analogRead(0) はアナログ・ポート 0 番のデータを読み込む

アナログ入出力のスケッチ

LEDGND＋5Vボリューム（半固定抵抗）

図 4-3

38

アナログ入力，アナログ出力のテスト回路

第4章

アナログ入出力もスケッチが用意されていて使い方は簡単

こちらが型番の表示されている面

こちらが電源V +アナログ入力ポートから読み取られた値
電圧に変換した値
温度として表示した値

GND Vout V +電圧値は V 表示で小数 3 位を四捨五入し 0.31 となる．
温度の小数 2 位まで表示している

LM35

LM35

GND

電源
LM35 のVout
アナログ・ポート 1 番

図 5-11LM35 の測定結果を LCD に表示する配線の内部基準電圧に変更するために，setup 関数で analogReference(INTERNAL); の命令を記述してあります．
ここでは，基準電圧として Arduino の内部の基準電圧を使用するので，温度は次の式で求まります．

(1100.0/1024)*indata*0.1
後 は， 表 示 を ク リ ア し て， 次 に 書 き 込 む カ ー ソ ル の 位 置 を 上 段 の 左 端 に セ ッ ト す る lcd.

clear()， 変 数， 文 字 列 を 表 示 す る lcd.print()， 次 の 表 示 位 置 を 指 定 す る lcd.set
Cursor() の各関数を利用して目的を達成しています．このスケッチを利用して，LM35 の測定結果を LCD へ表示したようすを図 5-11 に示します．

5-4

LM35DZ を利用して湿度の測定結果を LCD 表示する

第 4 章で LM35DZ を二つ使用して湿度を測定した結果についても，結果を LCD に表示するように変更します．図 5-12 に変更したスケッチを示します．図 5-13 に測定結果を表示したようすを示します．また，図 5-14 にはセンサ部分のようすを示します．

62

第5章

測定結果を LCD に表示する

ヘッダ・ファイルを読み込む

wet 湿球dry 乾球

湿度の計算

第 4 章参照

相対湿度

LCD への表示

2 行目左端にカーソルをセット

データ確認のためのもので，なくてもよい

図 5-12

湿度を計算で求めるスケッチ

5-4 LM35DZ を利用して湿度の測定結果を LCD 表示する

63

図 6-7

PC で日付，時刻を得る方法② GPS 衛星から時刻を得る
GPS 受信モジュールを利用し正確な時刻を得る．位置の検出を行うのでなければ衛星の補足の数が少なくて済み，室内でも時刻データ得ることができる場合が多い
こ れ ら の 方 法 が 考 え ら れ ま す． こ こ で は， 次 に 示 す リ ア ル タ イ ム・ ク ロ ッ ク・ モ ジ ュ ー ル
RTC1307 を使用することにします．
このモジュールは Sparkfun 製のモジュールで，DS1307 という IC を搭載し I2C のインターフェースをもっています．バックアップ電源として CR1225 電池を搭載しているので，長期（9 年以上）にわたって，Arduino 側の電源と無関係に時刻を刻むことができます．この他にも I2C のインターフェースをもった Arduino 用のセンサも多くあるので，アナログ入力 A5，A4 の 2 本のピンで二つ以上のデバイスを接続できます．I/O ピンのあまり多くないマイコンでは助かります．

6-2-2

RTC モジュール（DS1307）

RTC モジュールは，図 6-8a に示すように 8 ピンの DS1307 と水晶振動子で構成されています．この IC は 5V の動作電圧で，主な仕様は表 6-1 に示すようになります．電源の 5V と GND の電源端子，SDA，SCL の I2C の端子と 1Hz 〜 32.768kHz のクロックを出力することもできる SQW 端子が用意されています．
この RTC モジュール基板の端子の穴は 2.54mm ピッチのピン・ヘッダが利用できるので，このモジュールにピン・ヘッダをはんだ付けし，ブレッドボードやユニバーサル基板で容易に利用できます．
動作電源が 5V なので 5V 電源の Arduino と直接接続することができます．このリアルタイム・ク
ロック・モジュールは共立エレショップまたはスイッチサイエンスなどから入手することができます．
76第6章

高機能シリアル通信 I2C

I2C インターフェースのバスに接続する



図 6-8

表面

裏面のバックアップ電池ホルダ

裏側にバックアップ用のバッテリ（CR1225）を装着している

DS1307 と水晶振動子が実装された RTC モジュール
表 6-1

RTC1307 の主な動作仕様

動作電源電圧（Vcc）
Logic 1（HIGH）
Logic 0（LOW）
バッテリ電圧SCL クロック

min
4.5V
2.2V
－0.5V
2.0V

max
～
5.5V
～ Vcc － 0.3V
～
＋0.8V
～
3.5V
100kHz

動作時待機時I2C クロック動作のための 5V 電源は Arduinoの 5V の電源端子より得る

X1X2VBat
GND
リチウム電池のバックアップがある

図 6-9

1238DS1307

スレーブ・アドレス（1101000）47653.3kVCC
SQW/out

3.3k

SCL
SDA

5V
A5Arduino

A4

このバックアップがあるので，Arduinoの電源を切断しても計時を続ける

Arduino に DS1307 を接続する

基板の背面には，図 6-8b に示すように CR1225 のリチウム電池によるバックアップ電源も用意されています．
◆ DS1307 の設置方法

DS1307 の動作電源電圧は 5V です．そのため標準の 5V 動作の Arduino と DS1307 との接続は図 6-9に示すようになります．Arduino のアナログ入力ポート 5 番（SCL），4 番（SDA）を DS1307 の SCL 端子，SDA 端子に接続します．アナログ入力ポートですが，Wire ライブラリを利用するときは，この二つのポートがディジタル信号でデータをやりとりする I2C のバスのポートとして割り当てられています．
モジュールにピン・ヘッダをはんだ付けして，ブレッドボードにセットしてテストすることもできるようにします．使用するときは，仮配置でなく Arduino 用のユニバーサル基板を使用し，DS1307のリアルタイム・クロック・モジュールを取り付けるための 5 ピンのピン・ソケット，I2C バスのプ
ルアップ抵抗 3.3kΩ 2 本を基板に取り付け，はんだ付けします．
6-2 I2C インターフェースでやりとりするリアルタイム・クロック77

を行います．Arduino で SPI 通信を行う場合は図 7-3 に示すように SPI インターフェースの各信号線にそれぞれディジタル・ポートの 13，12，11，10 が割り当てられています．SS の 10 番ピン以外はそれぞれ専用のピンが割り当てられ，SPI インターフェースを利用するときはほかには利用できません．
SPI シリアル・ペリフェラル・インターフェース（Serial Peripheral Interface）
SS 2

SS 1

MISO

MOSI

クロックの周波数

SCK
クロック
信号

複数の SPI スレーブがあるとき，通信相手を指定するデバイス選択信号．
通信相手のスレーブのみイネー
ブルにする

SCK
MOSI
MISO
SS
SCK
MOSI
MISO
SS

MISO
マスタ入力スレーブ出力の専用バス．ス
レーブからのデータをマスタが受信する
専用のバス

図 7-2

SPI（シリアル・ペリフェラル・インターフェース）の通信手順

AC-DC アダプタから入力された電源が使える．
ダイオードが入っているので，約 0.6V 低くなるリセット・ボタンを追加できる
3.3V の電源が得られる
5V の電源が得られる
グラウンドとなる
アナログ入力ポート．
0〜5 の合計 6ポート分あり，センサなどを接続できる

I 2 C はこの 2 本を利用．デバイスを増やしても，この2 本だけで済む

図 7-3

102

データ極性．
送受信の順番

MOSI
マスタ出力スレーブ入力の専用バス．
マスタから送信されスレーブが受信する専用のバス

は R3 ボード以後追加されたピン・ソケット

SPI 用のポート．
デバイスを追加すると，
SCL
SS を増やさなければな
SDA
らない
AREF
GND
1313…SCK
1212…MISO
11…MOSI
11 （PWM）
10…SS
10 （PWM）

リザーブ
IOREF
RESET
3V35V
GND
GND
Vin

98A0
A1
A2
A3A4
A5
ディジタル I/O．
0〜13 の 14 ポート．この中のポートのいくつかは PWM のアナ
ログ出力，シリアル入出力にも割り当てることができる

Arduino の SPI インターフェース

第 7 章 SPI インターフェース

イーサネット・シールドを使用すると，SPI インターフェースとして使用される

76
5
432
10（PWM）

（PWM）
（PWM）
（PWM）
TXRX

アナログ出力は，これらのディジタル・ポートのPWM制御でコントロールされて出力される

シリアル通信ポート

USB 経由で PC と接続する

イーサネット・シールドの SD カード・ドライブを使用すると，カード・ドライブ SPI インターフェースの SS に専有される

7-2

Arduino用の熱電対温度センサ（MAX6675 スイッチサイエンス）

150℃くらいまでは LM35DZ の半導体温度センサで測定できますが，オーブンの内部温度の測定や，てんぷらを揚げるときの油の温度，炎の温度の測定などを考えると 200 〜 800℃くらいの高温の温度測定が必要になります．このような高温の温度測定には熱電対がよく利用されます．
スイッチサイエンスのオリジナル商品として，この K 型熱電対センサ・モジュール・キットが発売されています．このセンサ・モジュール・キットを利用すれば，オーブンの内部やローストビーフの温度を測定できます．

7-2-1

K 型熱電対センサ・モジュール・キット

スイッチサイエンスの K 型熱電対センサ・モジュール・キットには，MAXIM 社の MAX6675 と基板，電源バイパス・コンデンサ，K 型熱電対用コネクタ，熱電対センサがセットになっています．図 7-4 は，このキットを組み立てて Arduino のディジタル・ポートに差し込んだものです．
MAX6675 は冷接点補償熱電対/ディジタル・コンバータ IC で，熱電対からの信号電圧をディジタル変換して SPI のシリアル信号で送出します．Arduino のディジタル・ポート 13，12，11，10 で SPIの制御信号に接続します．この接続では電源の供給はディジタル・ポート 9 番から－電源，ディジタル・ポート 8 番から＋電源を供給しています．これはテスト時の接続が簡単になり便利ですが，電源は電源回路から供給し，あまり余裕のないディジタル・ポートは，ほかの入出力に使うほうがベターです．
K 型熱電対コネクタ
熱電対センサMAX6675

図 7-4

K 型熱電対センサ・モジュールを接続

7-2 Arduino 用の熱電対温度センサ（MAX6675 スイッチサイエンス）

103クライアントからの要求があると決められたデータを書き出す．
書き出されたデータは，クライアントのWebブラウザに表示される各種のセンサを搭載したシールドを積み重ね，多数のセンサを利用して計測ができる

スイッチのON/OFF

サーバ

クラウド

センサ類
サーバ

ハブ
クライアントクライアントクライアントのPC から，サーバにメッセージの送信を要求する

プライベート・ネットワーク
198.162.1.xx

図 9-2

イーサネット・シールドで Arduino がネットワークに参加できる

9-1

イーサネット・シールド

イーサネット・シールドはイーサネット制御チップとして W5100 を使用しています．この W5100
は TCP/IP のプロトコル・スタックをハードウェア上に実装しています．そのため，OS 側にプロトコル・スタックをもたなくてすみ，Arduino のようなマイコンでも容易にイーサネットのネットワークに接続できるアプリケーションが実現できます．
◆ バージョンによって仕様が異なる

このイーサネット・シールドのボードは今まで何回か改訂がありました．初期のボードは SD カード・ドライブが搭載されていましたがサポート外で，そのうち SD カード・ドライブが外されて販売されていました．V5（図 9-3）からはマイクロ SD カード・ドライブが搭載され，SD ライブラリも用意されデータの保存が容易になりました．
2011 年 8 月現在，V6（図 9-4）になり，SD カード・ドライブのインターフェースの電圧レベル変換が V5 の抵抗による分圧から 74LVC1G125 のスリー・ステートのバッファになっています．また，V5のイーサネット・シールドでは，アナログ・ポートの 0 と 1 が 10kΩ で＋5V 電源にプルアップされています．V5 のイーサネット・シールドを使用して 0，1 のアナログ入力ポートにセンサなどを接続するときは，この 10kΩ の影響を与えないセンサの出力であることを確認する必要があります．V6 のイーサネット・シールドのボードでは，アナログ・ポートのプルアップはなくなりました．
134

第9章

イーサネットのネットワーク経由で測定データを発信する

[第10 章]

無線対応で応用が広がる

XBee でデータ収集
Arduino にセンサを接続して図 10-1 に示すように，様々な場所の湿度や気温などをモニタできるセンサ・ネットワークを構築し，PC で離れた場所の情報をいつでも確認できるしくみを作ってみます．図 10-2 に示す XBee を利用することで，Arduino のセンサ・ステーションの無線化を図ります．
これにより，有線ではつなぎにくい場所，例えば庭の気温，土中温度，湿度などの気象情報を無線でPC に送信できるようになり，利用範囲が広がります．

10-1

本章で使用する XBee

XBee の無線モジュールは，ZigBee のメッシュ・ネットには対応していないものです．1 対 1 または 1 対 N で使用する場合は，この安価な XBee で十分対応できます．

XBee シールド

温度センサ
XBee

気圧センサ
XBee

XBee エクスプローラ
USB ケーブル

30m くらいまでのセンサ・ネットワーク

図 10-1164

ワイヤレス Private Area Network を XBee で作る

第 10 章XBee でデータ収集

このＰＤＦは，ＣＱ出版社発売の「Arduinoで計る,測る,量る 」の一部見本です．
内容・購入方法などにつきましては以下のホームページをご覧下さい．
内容
http://shop.cqpub.co.jp/hanbai//books/42/42191.htm
購入方法
http://www.cqpub.co.jp/hanbai/order/order.htm