Arduino純正の Wireless SD Shield に超小型液晶を搭載し、XBee ワイヤレスセンサー用 SD ロガーを製作します。収集した情報はmicro SDカードに保存します。
以下に必要なハードウェアのリストを示します。センサー子機は一例です。このページでは親機の製作方法を中心に説明します。
機
品名
| 参考価格
| 備考
| 親 | 機 Arduino Uno SMD R3
| 2,390円
| 安価な互換品や秋月キットも
| Arduino Wireless SD SHIELD
| 2,500円
| micro SD スロット搭載品が必要です。
| I2C接続小型LCDピッチ変換キット
| 600円
| 秋月で売られている小型液晶キットです。(要ハンダ付け)
| XBee-PRO ZB(S2) Module
| 2,900円
| Arduinoに搭載する親機用。RPSMAコネクタ型がお奨めです。
| XBee 専用アンテナ
| 550円
| 上記の親機XBeeのRPSMAコネクタに取り付けるアンテナです。
| micro SD(SDHC)カード
| 1,000円
| ログ保存用のmicro SDカード(FAT16/32,SD/SDHC対応)です。
| 子 | 機 XBee Wall Router
| 8,400円
| 実験用の照度センサと温度センサ、XBeeが内蔵されています。
| 「ブレッドボードで作るセンサー」を使用することも可能です。
| |
このリストは一例ですが、本ページではArduino純正のWireless SD SHIELDに秋月電子で売られているI2C接続小型LCDモジュールピッチ変換キットを接続して製作する「XBee ZB + SD + LCD」ハードウェア(シールド)と専用のソフトウェアについて説明しますので、少なくともシールドと液晶は記載のものを使用していただくのが良いでしょう。
Arduino Wireless SD SHIELD には、micro SDスロットがついています。似たような製品でArduino Wireless SHIELDがありますが、こちらはmicro SDスロットがついていません。
XBeeモジュールはZigBeeもしくはZB、Series 2、S2、S2Bといった表示のあるZigBee対応品を使用します。古い製品に Series 1と呼ばれるZigBee規格に準拠していない製品があるからご注意ください。(詳しくは「XBee ZigBee Wi-Fi モジュールの種類」にシリーズや、アンテナ、無線性能などの特長や違いについて記載しています。)
親機用のXBee-PROモジュールはPROではないXBeeでも実験はできます。しかし、XBee-PROの方が通信距離が長いので、なるべくならXBee-PROと専用アンテナの組み合わせをお奨めします。
秋月電子のI2C接続小型LCDモジュールピッチ変換キット(600円)はI2C接続の8文字×2行の小型キャラクタ液晶8文字×2行液晶(AQM0802A-RN-GBW 320円)と同社オリジナルのI2C接続小型LCDモジュール用ピッチ変換基板(AE-AQM0802 400円)とのセットです。ピンヘッダも付属しており別々に買うよりも16%以上も割安ですので「キット」と書かれた商品をお奨めします。
XBee Wall Routerはセンサー子機として使います。Strawberry Linuxで「ZigBee レンジエクステンダー」の名称で売られています。もしくは「ブレッドボードで作るセンサー」などを製作しても良いでしょう。
まずは秋月のI2C接続小型LCDモジュールの組み立てを行います。付属の基板には液晶を実装する表面とチップ部品6個が載っている裏面とがあります。2つ前の写真は基板の裏面です。液晶を基板の表面に実装してから裏面で半田付けし、余分なリード線を切り落とします。また、PUと書かれたジャンパーパターンのそれぞれ2か所に半田を盛ってショートにします。この時、2か所のジャンパーパターンが互いに接触しないように注意します。半田付けが終わったら基板背面の全体をポリイミドテープで絶縁保護します。
次に液晶モジュールをシールドに実装します。ピンヘッダとともに Arduino Wireless SD Shield の表面に液晶を半田付けし、裏面でピンヘッダの余分なリード線を切断し、信号線2本と電源、GNDをArduinoの各ポートへ配線します。下図のようにSCL(黄色)をAnalog 5にSDA(橙)はAnalog 4に、電源VDDは3.3Vに接続します。
表面の液晶用ピンヘッダについても半田付けと余分なリードの切断を行い、絶縁します。とくに XBee PRO ZB モジュールを使用する場合、秋月の変換基板とXBeeモジュールのシールドとの距離が0.5mmほどしかないので、半田やリードが飛び出ているとXBeeモジュールの取り付け/取り外し時に接触する可能性があります。ピンヘッダのリードの飛び出しを最小限に抑え、半田もあまり盛り上がらないように注意してください。
以上のように製作した小型液晶付きの Wireless SD Shield に XBeeモジュールを実装し、Arduino UNOに接続すればハードウェアの完成です。
Windows インストーラを使った場合のインストール方法「Arduino IDE インストール方法(PDF)」を参照し、Arduino IDEをインストールしてください。以下はArduino IDEのインストールとArduino UNO用のシリアルドライバのインストールが完了していることを前提に説明を続けます。
Digiのホームページから「Support」メニュー内の「Diagnostics, Utilities & MIBs」を選択すると、Digi社の製品リストが表示されます。この中から「X-CTU」を選択します(http://www.digi.com/support/productdetail?pid=3352)。
この中から「Legacy XCTU」の「XCTU ver. 5.2.8.6 installer」をダウンロードして、ダブルクリックするとインストーラーが起動してインストールできます。
ここでは親機用のXBee-PROモジュールを「ZIGBEE COORDINATOR API」に設定します。「Coordinator」とはZigBeeデバイスの種類の名称で、ZigBeeネットワークを管理する役割を担ったデバイスを示しています。一つのZigBeeネットワークに一つのCoordinatorが存在する必要があります。ここでは分かりやすくCoordinatorのことを親機と表現することにします。
設定には先ほどインストールした「X-CTU」を使用します。Arduino UNOにXBee PRO ZBモジュールとWireless SD Shieldを取り付け、Wireless SD Shield上のSERIAL SELECTスイッチを右側の「USB」に切り替えます。このArduino UNOをパソコンに接続した状態、X-CTUを起動し、シリアルポートの選択画面でArduino UNOが接続されているシリアルポート(COM番号)を選択します。
次に上方にあるタブの中から「Modem Configuration」を選択し、「Read」をクリックします。うまくシリアル通信が出来れば、XBeeモジュールの設定値が表示されます。通信に失敗する場合はブレッドボードジャンパー線などでArduinoのRESET端子とGND端子とをショートにした状態にします。書き込み後に戻します。
ファームウェアの種類「Function Set」をプルダウンして「ZIGBEE COORDINATOR API」を選択します。語尾に「API」のついたものと「AT」のついたものがありますが、ここでは必ず「API」を選択してください。
最後に「Write」で書き込みます。
Arduinoへ書き込むソフトウェアのインストールを行います。まず、当方サイトのダウンロードページからXBee用ライブラリ(xbee_arduino.zip)をダウンロードします。ダブルクリックするとZIP圧縮されたファイルが見えます(下図@)ので、「XBee_Coord」フォルダを、Arduino IDEの「libraries」フォルダにコピーします(下図A)。
アプリケーションを作成するためにArduinoを接続した状態でArduino IDEを起動します。起動すると下図のような画面が出てきます。
Arduino IDEの必須の設定は2つだけです。「ツール」メニューにある「マイコンボード」と「シリアルポート」です。「マイコンボード」は購入したArduinoの種類を選びます。Arduino Unoであれば「Arduino Uno」です。「シリアルポート」はArduinoと通信を行うためのCOM番号を選びます。分からない場合は、適当に選んでおいて、動かなければ変更します。
次にスケッチを読み込みます。スケッチ(Arduino用のプログラム)はXBee ZB ライブラリ Ver.193以降で配布します。該当のバージョンの場合「ファイル」メニューの「スケッチの例」「XBee_Coord」から開けます。もしくは「sample61_log.zip」からダウロードして適当なフォルダに展開し、Arduino IDEの「ファイル」メニューの「開く」からファイル「sample61_log.ino」を開きます。
アイコンメニューの矢印「→」をクリックするとこのスケッチをコンパイルし、Arduino UNOへ書き込みます。書き込みに失敗する場合はシールドを外して試します。
スケッチの書き込みが終わるとArduinoのアプリが自動で起動し「サンプル61」の表示が出ます。この時、Wireless SD Shieldの Selial Selectスイッチを「MICRO」側にします。また、micro SDカードも装着しておきます。もし、表示が出ない場合は、一度、シールドを抜いてから再接続します。
「サンプル61」の表示のまましばらく待つと1秒ごとに画面が変化するようになります。10秒以上待っても、タイトル画面「サンプル61」のまま進まない場合は、タイムアウトしてしまっていますので、Arduinoのリセットボタンで再起動します。それでも進まない場合はmicro SDカードを、一度、抜いて指し直します。
この状態で子機となる XBee Wall Router などの XBee ワイヤレスセンサーの電源を入れて当該子機のコミッションボタンを1回だけ押すとペアリングが実行されます。子機のボタンは一つしかないので迷うことはないと思います。
子機のLEDが点灯から点滅に変わったらペアリング完了です。もう一度、子機のコミッションボタンを押すと、Arduino親機にネットワークへの参加を通知します。次回からは、一度、押すだけでArduino親機が子機を発見できるようになります。
もし、ペアリングがうまくいかない場合は、子機のコミッションボタンを4回連続で押してネットワーク設定を初期化します。Arduino親機をリセットして、もう一度、試してみてください。子機のコンセントを、一度、抜くと正しく動作する場合もあります。
収集した情報は液晶に表示するとともにSDカードに保存します。ファイル名は子機XBee ZBモジュールのIEEEアドレスの下8桁に拡張子CSVを付与した名前です。
時刻はスケッチで設定します。時計の精度はArduino用のクロック次第です。また、ArduinoがOFFになるとリセットされます。より正確な時刻を刻み続けたい場合は、別途、RTC ICとRTCを動作させ続けるためのコイン電池といったハードウェアの追加が必要です。