XBeeの使い方(スリープモードで低消費電力のリモートセンシング)
XBeeのスリープモード
無線でリモートセンシングする状況では、電源が取れない場合が多くありますね。電池や太陽電池で駆動する場合には消費電力を下げることが重要です。ZigBeeの規格の特徴としても、伝送可能距離が短い代わりに消費電力が小さいことが挙げられます。今回は送信機(Transducer)をsleepモードとすることで、10秒に一回起動する動作を行い、これにより消費電力を低減させた運用を試みます。電池の自己放電と同レベルの非常に消費電力の小さいセンサーが可能となります。温度や湿度、日照などを定期的にセンシングして送信するシステムにご活用ください。10秒ごとのセンシングでは単三電池一本で2ヵ月くらいは動作すると思います。(まだ測定しておりません。)Last undatepd on Jan. 22, 2012.
手順2:2台のXBeeの設定
今回は子機にデジタル入力をさせて送信させる場合を想定し、親機(Coordinator)の方をAPI設定とします。スリープモードとする子機はEnd Device AT設定とすると良いようでした。
レシーバー(親機、受信機、Coordinator)の設定
- ZigBee Coordinator API (今回は子機で読み取らせたデジタル信号を受信させるので、(ATではなく)API設定とする。)
- PAN ID=1357 (16進数で最大0×FFFFFFFFFFFFFFFFまでの値。同じグループで共通の10進数数値をつければOK)
- ATDH(Destination High)=通信する相手の上位アドレス(今回は受信専用で送信する必要が無いため0とする)
- ATDL(Destination Low)=通信する相手の下位アドレス(今回は受信専用で送信する必要が無いため0とする)
- ATAP=1 (APIモードをenableでモード1とします。2とするとデータ形式が複雑となり読みにくくなります。)
- ATSP=3E8 (=3E8(16進)=1000 *10msec=10 sec, データ送信元のEnd Deviceの一回のスリープ時間と同じに設定)
最後の一行のスリープ期間についてはあまり理解できていませんが、送信元となるEnd Device子機のスリープ期間と同じ値に設定することで親機→子機のデータ送信を保持するためのようです。複数の子機があり、そのスリープ時間がばらばらの時には、子機の中の最大値に合わせると良いようです。
トランスミッター(子機、送信機、End Device)の設定
- ZigBee End Device AT (送信側はATモードです。)
- PAN ID=1357 (上記Cordinatorと同じ番号)
- ATDH(Destination High)=通信する相手の上位アドレス(今回は送信先がCordinatorであるため、0とする)
- ATDL(Destination Low)=通信する相手の下位アドレス(今回は送信先がCordinatorであるため、0とする)
- JVchannel=enableとして、通信チャネルの確立を確認するモードとします。
- ATD0=3 (D0端子をDigital Inとして使用)
- ATIR=2710 (データ取得間隔。2710=10,000 msec=10sec。10secごと。)
- ATSM=4 (スリープモードを「周期スリープ」とする。)
- ATSP=3E8 (スリープ時間。3E8=1000に対して10msecをかけるので、10 secとなる。)
- ATST=3E8 (スリープまでの時間=Time before sleep。3E8=1000で1 secの間だけ動作して、その後スリープとなる。)
ATIRについてはスリープからの立ち上がり直後に1度はデータの取得がありますので、ATST(スリープまでの時間)よりも長くしておけば1度だけ測定してデータを送信します。ATSTに関しては、データ取得に必要な時間より長くしておけば問題ないと思います。
設定書き込み時のエラーに対処する方法(再録)
設定書き込み時にエラーが出た時(X-CTUはエラーが頻発しますね)には、そのままの状態でXBeeをUSB書き込み機から一度引き抜いてから差し込みます。
これでresetされ、自動に書き込みが始まります。
データ書き込み時にエラーが出た場合には、XBeeをそのまま引っこ抜き、再度差し込みます。
受信データのArduinoでの読み取り
10秒スリープする子機からのデータを親機で受信し、Arduinoで読み取るスケッチを用いることでArduinoで読み取って、マイコン動作に移すことも可能です。今回の注意点は、10秒に一回しかデータが送信されて来ない点です。ですから、一度onを受け取ったら10秒間はon状態を維持するプログラムとしています。逆に、10秒以内の反応速度が必要な応用ではデータ送信間隔を短く設定する必要があります。
XBeeとArduinoとの接続
- XBee(DOUT=2番端子)=Arduino(D0=RX,ATmegaの2番端子)
- XBee(DIN=3番端子)=Arduino(D1=TX,ATmegaの3番端子)
受信機と送信機。
受信機部分。左下のブザーを鳴らす(CH13)と同時に、風呂タイマーへの信号(CH12)を出力します。
送信機部分。小さいブレッドボードはXBee使用では便利ですね。かなり小型化できます
送信機をお風呂タイマーの検知部として設置した例。
単三電池一本で動作します。
宣伝
XBeeよりはESP32の方が、コストも性能も良くなりましたね。
戸田システムウェア
ここで公開するアイデア/装置は安全性を保障しておりません。
用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。
本サイトの情報の営利目的での利用はご遠慮ください。
本サイトの内容の無断転載を禁じます。© 2012 TYK