前回のArduino温度センサと、以前紹介したXBee無線ネットワーク(XBeeモジュールの選び方、XBeeモジュールの接続と設定)とXBeeモジュールでセンサを読み取る(ハードウェア作製編、センサノードの設定と測定)で学んだXBeeモジュールを組み合わせ、ArduinoとXBeeモジュールを使って、温度センサTMP36とArduinoをワイヤレスで接続して、温度を読み取ります。
XBeeセンサノード
XBeeモジュールでセンサを読み取る:ハードウェア作製編で製作したセンサノードを再利用し、図1のように温度センサTMP36を使ったセンサノードを製作します。
以前の記事通りにセンサノードを使用していない場合や、XBeeモジュールをリセットする必要がある場合には、ファームウェアが最新のものか確認し、X-CTUアプリケーションで表1のように設定をしてください。
設定値コード | 設定地の名前 | 説明 | 設定値 |
D3 | DIO3/AD3 | DIO3ピンの設定 | ADC [2] |
ID | PAN ID | ネットワークのID | 8088 |
IR | IO Sampling Rate | データ読み込みの時間間隔 (ミリ秒単位で指定) | 3A98 (=15,000) |
NI | ノード識別子 | ノードの名前 | TMP36 |
V+ | 電源電圧しきい値 | 電源電圧がこの電圧を下回ると、データと一緒に電源電圧を送信する。 | FFFF (=常時送信する) |
ZigBeeネットワークからデータを取得する方法としては、①ノードから直接データを要求する方法と、②ノードから送信されたデータをポーリングする方法の2種類があります。
今回は②の方法で行い、IOサンプリングレートの設定が必要です。これは、使用するArduinoのライブラリがZigBeeネットワークでリモートノードを検索する機能を持っていないためです。
コーディネーター(センサノード)のプログラミング
コーディネーター側のXBeeモジュールは、ファームウェアを最新のものにアップデートし、表2のように設定を行います。
設定値コード | 設定地の名前 | 説明 | 設定値 |
ID | PAN ID | ネットワークのID | 8088 |
NI | ノード識別子 | ノードの名前 | coordinator |
続いて、ArduinoとXBeeモジュールの設定を行います。
Arduino用のXBeeシールドを使う
この例では、センサノード上のXBeeモジュール(ルーター)が読み取った電圧(=センサが読み取った温度)を、別のXBeeモジュール(コーディネーター)に送信し、コーディネーターとの通信をArduinoで行います。この時のArduinoの役割を「データアグリゲータ」や「データコレクタ」と呼ぶこととします。
ここではArduinoがXBeeモジュールからのデータを受け取りますが、逆にXBeeモジュール経由でデータを送信することもできます。
ハードウェアの設定
Arduinoの基板上部に差し込んで簡単に電子部品を接続し、機能を追加できる「シールド」と呼ばれるモジュールがたくさん販売されています。
ここでは標準的な「シールド」をサポートする一般的なArduino(UNOやLeonardoなど)と、「XBeeシールド」を使ってセットアップを行います。
XBeeシールドは、電源電圧の違いやピン間隔の違いを吸収する「変換基板」としての役割も併せ持ち、ArduinoとXBeeモジュールを簡単に組み合わせて使用できるように設計されています。図2にSparkFunのXBeeシールドとArduino UNOを組み合わせた例を示します。
これ以降は、このSparkFun製のXBeeシールドを使用した、XBeeモジュールとの通信方法を紹介します。これ以外のシールドを使用する場合には、そのシールド基板のドキュメントやサンプルスケッチを確認し、この製作例のものとよく照らし合わせてください。必要に応じてうまく動作するようにハードウェア・スケッチの修正を行ってください。
このシールドは、D0ピン・D1ピンを使ってArduino内部のシリアル通信回路(UART)と通信を行いますが、この2つのピンはPC(Arduino IDE)がUSBを使ってArduinoと通信する際に使用するピンでもあります。ArduinoにPCとの通信回路とXBeeモジュールの両方ともがつながっていると正常に通信が行えなくなり、最悪の場合には部品が壊れてしまいます。
SparkFunのXBeeシールドには小さな切り替えスイッチがあり、切り替えるとXBeeモジュールの接続先をD2ピン・D3ピンに変更できます。これで、PC(Arduino IDE)との通信はこれまで通り問題なく行えます。
しかし、Arduino UNOは本来D0ピン・D1ピンの2本しかUART通信ピンとして使えません。
そこで、ソフトウェア・シリアル・ライブラリを使用します。このライブラリを使うことで、ソフトウェアでUART通信機能をシミュレートし、UART用ではないIOピンに割り当てて使用できるようになります。
ソフトウェア・シリアル・ライブラリはArduino IDEに標準で含まれています。
XBeeシールドを使用しない場合には、ブレッドボードやブレイクアウトボードを使ってこれまでの例と同様にXBeeモジュールとArduinoを直接接続します。
図3にSparkFunのXBee Explorer Regulatedブレイクアウトボードを使用する場合の配線例を示します。
このブレイクアウトボードは電圧変換回路が内蔵されているので、Arduinoから5Vを供給しています。使用するブレイクアウトボードによっては3.3Vを供給しなければならないものもあります。こちらもドキュメントをよく確認してください。
以上、いずれかの方法でArduinoとXBeeモジュールとを接続していきます。
接続できたら、コーディネーターとして設定したXBeeモジュールを差し込みます。
これでハードウェアの準備は完了です。次回は、XBeeセンサノードからデータを読み取るためのスケッチを作成していきましょう。
コメントを残す