このページではI2C接続の小型LCDモジュールAQM0802A-RN-GBWとXBee ZBを直結し、乾電池などで動作できる低消費電力動作可能な超小型ワイヤレス表示端末を製作します。上図のような小さな秋月パーツケースの中にワイヤレス通信モジュールXBee ZigBeeやリチウムポリマー電池を内蔵することが出来ます。
液晶には秋月電子で売られているI2C接続の小型液晶モジュールを使用します。I2C接続なので信号線は2本だけです。Arduinoの+3.3V、GND、Analog 4、Analog 5の4本の配線で動作します。
なお、このページではI2C接続の液晶モジュールを使用しますが、他にもArduinoマイコンボードと液晶シールドを用いた高機能な表示端末の製作例を「家中どこでも情報表示(M2M子機の製作)」で紹介しています。興味がありましたら、そちらも参照ください。
前述のとおり秋月電子のI2C接続の小型LCDモジュールAQM0802A-RN-GBWとXBee ZBモジュールとの配線は少ないのですが、小型LCDモジュールのピンピッチが特殊な1.5mmピッチとなっており、通常の2.54mmピッチに変換するには同じ秋月電子で売られている専用のピッチ変換基板が必要です。液晶と変換基板のセットで600円で購入することが出来ます。I2C信号用のプルアップ抵抗なども実装されているので、今回はこの変換基板を使用します。
下図は、変換基板を使った場合のXBee ZBとの接続回路図です。電池と配線のみです。XBee ZBモジュールには「Series 2」または「ZB」や「S2」の表示があり、かつ「PRO」の表示の無いタイプのものを使用します。
本ページのトップの写真のように秋月でXBeeモジュールなどのパーツを購入した時に付属しているプラスチック製のケースに入れる場合、単3電池だと入りません。小型のコイン型リチウム電池や超小型のリチウムイオン電池、リチウムポリマー電池などを使用します。充電式の電池は電源電圧が3.5V以上となるので、必ず低ドロップ型の電源レギュレータ(LDO)3.3Vを使用し、XBeeモジュールとI2C液晶に3.3V以上の電圧がかからないように注意します。
これらを考慮した回路図は下図のようになります。
上記の表示デバイスはXBee ZBネットワーク上の子機として動作します。子機のファームウェアは「ZIGBEE END DEVICE AT」を使用します。これをコントロールするためには親機が必要です。ここでは簡単に製作するために、パソコンにXBee USBエクスプローラ経由で親機となるXBee PRO ZBモジュールを接続します。親機のファームウェアは「ZIG BEE COORDINATOR API」を使用します。
親子 | モジュール | ファームウェア | 接続
親機 | XBee PRO ZB | ZIGBEE COORDINATOR API | XBee USBエクスプローラ経由でパソコンへ
| 子機 | XBee ZB | ZIGBEE END DEVICE AT | I2Cインタフェース直結で小型液晶へ
| |
親機PCにはCygwinとXBee管理ライブラリ(Ver 1.83以上)をインストールし、サンプル14(sample14_i2c_tag.c)の「byte dev[]」の部分をお手持ちの子機XBee ZBモジュールのアドレスに変更後にコンパイルしてから実行します。インストール方法や実行方法について詳しい説明は「基本編 センサネットワークを構築しよう」を参照ください。
このデバイスの製作には、一定の電子工作の製作経験が必要です。半田付けの技能も必要ですが、小型のケースに収めるために部品の配置を立体構造で考えたり2mmピッチのXBee用ピンソケットを2.54mmピッチの基板に半田付けしたり、また絶縁などの安全性を考慮したりといったことが理解できる方が対象となります。なるべく詳しく説明したいと思いますが、初心者の方には難しい製作になると思います。なお、本製作に関していかなる損害を被った場合であっても、当方は責任を負いません。
メイン基板と呼ぶよりは接続基板の位置づけの基板を製作します。下図の左側がI2C液晶用のコネクタです。ボクは液晶側にソケットをメイン基板側にピンヘッダを半田付けしましたが逆でも良いです。ポイントは高さをうまく調節することです。普通のピンソケットやピンヘッダでは高さがありすぎるのでIC用の細ピンのものを連結して高さを調節して使用しました。上部の左側は充電池用です。やはり高さを抑えるためにIC用のピンソケットを使用します。上部右側がXBee用です。1、4、7、10番ピン以外のピンを抜き、そのピンを液晶コネクタの高さ調整用に流用しました。またバッテリを接続した様子も示します。
図中の左上の半導体は3.3Vの電源レギュレータ(LDO)です。その近くに電解コンデンサ(470uF)と積層セラミックコンデンサ(0.1uF)があります。基板表面の配線は左から順にGND、SCL、SDAです。
次に裏面です。表面で縦に配線したものを裏面で横に配線を行い、XBee ZBモジュールとI2C液晶モジュールとの配線を簡単にしています。また、XBeeの2mmピッチコネクタの1番ピンと10番ピンは、メイン基板側の穴と穴の間をドリルで開口して2つのランドにまたがって半田付けします。電源部の配線は回路図を参照したほうが製作しやすいと思います。
まずI2C液晶の変換基板上にメイン基板との接続用コネクタを半田付けします。また、変換基板の裏面にあるSLAとSCKのプルアップ抵抗用ジャンパー部(PUと表示してあるパッド2か所)に半田をもってショートしておきます。
以降は半田ごては不要の製作です。XBeeモジュールとI2C液晶を接着剤で合体します。もちろんコネクタの高さやコンデンサ、バッテリの配置を考えなければなりません。コネクタの高さが合わないと、XBeeと液晶との間にスペースが空きすぎたり確保できなかったりします。ボクはXBeeと液晶の間隔を、ちょうど1.0mmに調整し、液晶用の5ピンのコネクタの方でメイン基板と平行になるように合わせこみました。また左右方向の位置は液晶がアンテナに被らず、メイン基板のピッチに合う位置に調整しました。
ここまで来て、気づかれたと思いますが、最初に頭でもメモでもかまわないのですが完成をイメージした設計図が必要です。本ページの情報を元にすれば製作しやすいと思いますが、コンデンサや電池の大きさなどに合わせて多少の修正が必要と思います。
メイン基板とモジュールを接続した様子を下図に示します。XBeeモジュールの片側(11番ピンから20番ピン)にはソケットがありません。バッテリとXBeeモジュールには必ず絶縁が必要です。また、この図から左側のI2C液晶用のコネクタのピンヘッダ側が2つのコネクタを半田で中継していることが分かると思います。
製作過程の中で最もうれしい瞬間かもしれません。作成した回路を下図のようにケースへ収容します。このサイズにワイヤレス表示デバイスとして全機能がつまっていると考えると嬉しくなります。
ここではボクが製作したサンプルソフト「sample14_i2c_tag.c」について説明します。システムの構成例で記載したXBee管理ライブラリ(Ver 1.83以上)の「example」フォルダ内に収容されている「sample14_i2c_tag.c」をご準備ください。
I2Cインタフェースの部分はライブラリ側で実行します。ZigBee End Device の省電力動作をI2Cインタフェースの通信に合わせて実行するように以下の工夫を講じました。
I2Cインタフェースの通信中は、子機XBeeモジュールはフル動作を行います。そして、スリープ中にCyclyic Sleepモードによる20秒に0.5秒の間欠動作を行います。さらに60秒に1回、子機XBeeモジュールから親機へパケットを自動送信し、受け取った親機は子機が一瞬だけ起動したことを知ります。この時に子機への表示変更を行う場合は、速やかに子機XBeeをフル動作に変更してから、子機へI2Cで表示文字を送信します。
実は、この方法にたどり着くまでも多くの試行錯誤がありました。XBee ZBのスリープモードを変更するATSMで「No Sleep」と「Cyclyic Sleep」を切り換えようとしたのですが、ZigBee End DeviceファームウェアではNo Sleepモードでは動作しないことが判明して断念。その対策として(間欠動作中はパケットを子機に送信しないので)RouterファームウェアでCyclyic Sleepモードを使用することにしましたが、RouterのCyclyic Sleepモード中は間欠自動送信(Periodic IO Sampling)が動作しないことが分かり断念。最終的にはEnd DeviceファームウェアでTime before Sleepを最大の65秒に設定することでフル動作維持の長時間化して実用的に動くようになりました。
前述のとおりサンプル「sample14_i2c_tag」の「byte dev」をお手持ちの子機XBeeのIEEEアドレスに書き換え、コンパイルしてから親機のパソコンのCygwin上でサンプルプログラムを実行します。
このサンプルプログラムは、まず子機XBee ZBおよび液晶の初期設定を開始します。この時、子機XBeeがネットワークにジョインしていなかったりスリープ中であったりすると子機が起動するまで繰り返しパケットを送信して待ち続けます。子機が他のZigBeeネットワークへジョインしてしまっていた場合は、一度、コミッショニングボタンを4回連続で押してネットワーク設定を初期化する必要がありますが、この子機にはコミッショニングボタンが無いのでUSBエクスプローラなどに接続してネットワーク初期化するか、危険を承知でジャンパーワイヤーなどで20番ピンを4回連続でGNDにショートします。
子機が見つかったら液晶の初期化信号を約30秒かけて送信します。途中でエラーが出た場合、正しく動作していれば問題ありませんが、いつまで経っても文字が表示されない場合は[Ctrl]+[C]キーでプログラムの実行を中断し、再実行します。
液晶の初期化が完了すると「ボクニモワカルXBee ZB」という文字を送信します。文字の送信に約90秒(1行目45秒、2行目45秒)かかります。初期化と合わせて合計120秒もかけて、ようやく画面が完成します。Cygwin上のカタカナ表示が文字化けしますが、液晶側には正しく表示されるので問題ありません。
文字の送信が終わると「XBee Go Sleep」と「Setup Done」の表示があり、ここからキーボードからの文字入力を受け付けるようになります。例えば「Hello!」と入力し、「Enter(改行)」キーを押します。すぐに文字の送信は始まりません。子機XBeeからの約1分に1度の自動送信を受信してから文字の送信を行います。
また「Hello,」「Enter(改行)」の後に「XBee!」「Enter(改行)」とすると1行目に「Hello,」を2行目に「XBee!」を表示します。どの行に表示されるかは「Enter(改行)」後に「Display(1)」や「Display(2)」のように行番号を表示します。
本機の課題は転送時間と消費電流です。中でも転送時間は非常に大きな課題です。当方が開発したXBee用ライブラリのI2Cインタフェースを使う限り、表示完了まで2分、16文字の書き換えには1分30秒がかかります。子機側にI2Cへの変換処理を行うマイコンを搭載することで、一瞬で表示させることも可能です。今回は最も簡単なハード構成のために、著しく転送時間を犠牲ににしました。
1日の消費電流量の内訳 表示時 0.8mA×24時間 = 19.2 mAh (71%) ≒ 230[J] XBee通信時 40mA ×0.5秒/60秒×24時間 = 8.0 mAh (29%) ≒ 100[J] 表示時の消費電流量の合計 19.2mAh+3mAh = 27.2 mAh (100%) ≒ 330[J] 上記に加えて以下を消費します 初期化時 24mA ×120秒 = 0.8 mAh 書き換え時 24mA × 90秒 = 0.6 mAh |
2つ目の課題は消費電流です。とくに待機時消費電流(LCD待機+XBee待機)が常に0.8mAほどと大きい点でバッテリによる動作時間に課題があります。
計算上、待機時消費電流量が動作時との比較で71%を占めています。私は65mAhのバッテリを使用しておりますが、計算上は57時間ほどしか持たない計算になります。充電が出来なくても良いということであれば、リチウムコイン電池 CR2032(厚み2mm・220mAh)で計算上は8日間、他にも厚み14mmの秋月ケースへの入れ方に工夫が必要かもしれませんが、単5アルカリ乾電池×2本(直径12mm・500mAh)や円筒型リチウム電池CR2(直径15.6mm・850mAh)などが候補になるでしょう。
屋外であれば太陽電池と電気二重層コンデンサで充電しながら使う方法もあるでしょう。夜間は液晶の表示が見えないので、液晶の電源をXBeeのDIOポートに接続して夜間の液晶をOFFにし、通信間隔も10分に1度などに減らすなどの工夫で実現できそうです。PROではないXBee ZBだと2.1Vまで動作するのでLDOと合わせても終止電圧2.3くらいになり、5V充電だと電圧で2割の残量を残することになります。これを救うにはDCDCコンバータが必要ですが、LDOの動作電流(一例:秋月XBeeピッチ変換基板のLDOで10uA)に比べてDCDCの動作電流(一例:スイッチサイエンスのMB-Xで50uA)は大きいので、2割を捨てた方が賢明かもしれません。DCDCコンバータの消費電力量次第ですが、50uA×12時間(半日)とすると7Jくらいを使ってしまいます。ここで、充電電圧5Vの2割が7Jとなるコンデンサの容量は2.2Fですので、2.2F以下のコンデンサだと残量よりもDCDCの消費量の方が大きくなり無駄という結論になります。なお、夜間も液晶を表示したいとなると、数十Fの大容量のコンデンサが必要になり、DCDCの効果が出てきますが、ちょっと待って下さい。そんな大きなコンデンサを使うと、わざわざ小型液晶を使う意味が無くなります。こんな時は、通常のキャラクタ液晶をPICで表示させれば消費電力が減り、全体のコストとサイズを大幅に抑えることが出来ます。
製作はしてみたものの、これを一体、何に使うのかという応用例がありません。下記のような状況です。