2016年08月31日
ルンバをXBeeでコントロール (Part 1)
○はじめに
ルンバをXbeeでシリアル通信してコントロールすることは良く知られていて、まぁ今更な感じでもあるのだが・・・必要にかられて仕方なくやることにする。
私が所有しているルンバは700リシーズのミドルクラスの770という製品で赤外線リモコンもサポートしているのだがこれが曲者である。
それ以外にも色々あって、簡単に課題を書くとこんな感じ。
1) ルンバは床に置いているため、Xbeeシステムのリモコンもルンバ用に割り当てて下に向ける必要がある。
2) ルンバのリモコンコードを解析するとわかるのだが、フォーマットが特殊でヘッダーが存在しないためリモコンの効かないことが多い。(誤検出が多い。)
3) ルンバが動作していると、Xbeeシステムの人感センサーにひっかかるため、動作しているか、掃除が終わってホームに戻ったか確認したいのだがその手段がない。
(前までは、Xbeeシステムからルンバを起動して、1時間は人感センサーをOFFにするという制御を入れていた。)
それで、これをXbeeを使ってコントロールすると、以下のように3項目中2項目は解決できる。
1) は解決できず。Xbeeを使っても同じでルンバに1個Xbeeを割り当てる必要がある。
2) は解決。シリアル通信なので誤検出はほとんどない。
3) は解決。ルンバを起動後にある間隔で(例えば1分に1回など)ステータスをチェックしてホームに戻ったか確認できる。
○用意するもの
秋月電子で以下を購入。
1) Xbee USBインターフェースボードキット [AE-XBEE-USB] x1個 (通信が上手くいかない時に追加でもう1個持っていても良いと思う)
2) Xbee用 2.54mmピッチ変換基板 [AE-XBee-REG-DIP] x1個
3) XbeeZBモジュール [XB24-Z7PIT-004] x2個
4) ミニブレッドボード [BB-601]
5) 抵抗 15kOhm x 1, 10kOhm x 1
6) その他、ジャンパ線、USBケーブル、ハンダ
続いて千石電商で以下を購入。
7) MP-371/77P ミニDINプラグストレート
あとはルンバのHWドキュメント。
8) iRobot Create OPEN INTERFACE
○システム構成
ちなみに、今回の構成は以下のようにするつもり。
Host(MacBook)[USB]--Xbee(コーディネータ) <~~~~無線~~~~> Xbee(ルータ)--ルンバ
ちなみにXBeeの設定は以下の通り。
このあたりを読んで適当にDL、PANを設定する。
ちなみにOSX版のXCTUだとなぜかタイムアウトっぽい感じでXbeeが認識しないので、VMWareでWindows版で設定した。
参考までに私が使ったシリアルの設定は以下の通り。
コーディネータ側のボーレートは何でも良いが、FLOW制御だけEnableにしておく。
ルータ側はFLOW制御はどうせ効かないので、OFF、ただしルンバのシリアルスピードの規格のためにBD=7(115200bps)にしておく。
1) コーディネータ側
ZIGBEE COORDINATOR API
BD - 3: 9600bps
NB - 0: NO PARITY
SB - 0: ONE STOP BIT
D7 - 1: CTS FLOW CONTROL
AP - 1: API Enable
AO - 0: NATIVE
2) ルータ側
ZIGBEE ROUTER AT
BD - 7: 115200bps
NB - 0: NO PARITY
SB - 0: ONE STOP BIT
RO - 1: Packetization Timeout
D7 - 0: Disable
D6 - 0: Disable
JN - 1: Join Notification Enabled
なぜコーディネータ側のボーレートを9600bpsにしているかというと、今使っているXbeeシステムに合わせただけで特に理由はない。
参考までにルンバで使うデータの最大サイズは52byteでXbeeが元々持っているバッファは100byte(とここに書いていた)なので転送速度が異なっていてもオーバーフローは発生しない。
それでも心配ならPCにボーレートの違うXbeeを2個繋いで、スピードの早い方からデータを流して片側でデータ化けしてないか実験してみると良い。
○ハードウェアの準備
ルンバ側のXBEEハードウェアの作成
"iRobot Create OPEN INTERFACE"のPage 4を参考に以下のように接続。
ルンバ側はTTLの5Vなので、Xbee側は3.3VなのでXbeeに入力される信号に対しては念のためにDividerを入れておく。
こんな感じになるはず。
ルンバをXbeeでシリアル通信してコントロールすることは良く知られていて、まぁ今更な感じでもあるのだが・・・必要にかられて仕方なくやることにする。
私が所有しているルンバは700リシーズのミドルクラスの770という製品で赤外線リモコンもサポートしているのだがこれが曲者である。
それ以外にも色々あって、簡単に課題を書くとこんな感じ。
1) ルンバは床に置いているため、Xbeeシステムのリモコンもルンバ用に割り当てて下に向ける必要がある。
2) ルンバのリモコンコードを解析するとわかるのだが、フォーマットが特殊でヘッダーが存在しないためリモコンの効かないことが多い。(誤検出が多い。)
3) ルンバが動作していると、Xbeeシステムの人感センサーにひっかかるため、動作しているか、掃除が終わってホームに戻ったか確認したいのだがその手段がない。
(前までは、Xbeeシステムからルンバを起動して、1時間は人感センサーをOFFにするという制御を入れていた。)
それで、これをXbeeを使ってコントロールすると、以下のように3項目中2項目は解決できる。
1) は解決できず。Xbeeを使っても同じでルンバに1個Xbeeを割り当てる必要がある。
2) は解決。シリアル通信なので誤検出はほとんどない。
3) は解決。ルンバを起動後にある間隔で(例えば1分に1回など)ステータスをチェックしてホームに戻ったか確認できる。
○用意するもの
秋月電子で以下を購入。
1) Xbee USBインターフェースボードキット [AE-XBEE-USB] x1個 (通信が上手くいかない時に追加でもう1個持っていても良いと思う)
2) Xbee用 2.54mmピッチ変換基板 [AE-XBee-REG-DIP] x1個
3) XbeeZBモジュール [XB24-Z7PIT-004] x2個
4) ミニブレッドボード [BB-601]
5) 抵抗 15kOhm x 1, 10kOhm x 1
6) その他、ジャンパ線、USBケーブル、ハンダ
続いて千石電商で以下を購入。
7) MP-371/77P ミニDINプラグストレート
あとはルンバのHWドキュメント。
8) iRobot Create OPEN INTERFACE
○システム構成
ちなみに、今回の構成は以下のようにするつもり。
Host(MacBook)[USB]--Xbee(コーディネータ) <~~~~無線~~~~> Xbee(ルータ)--ルンバ
ちなみにXBeeの設定は以下の通り。
このあたりを読んで適当にDL、PANを設定する。
ちなみにOSX版のXCTUだとなぜかタイムアウトっぽい感じでXbeeが認識しないので、VMWareでWindows版で設定した。
参考までに私が使ったシリアルの設定は以下の通り。
コーディネータ側のボーレートは何でも良いが、FLOW制御だけEnableにしておく。
ルータ側はFLOW制御はどうせ効かないので、OFF、ただしルンバのシリアルスピードの規格のためにBD=7(115200bps)にしておく。
1) コーディネータ側
ZIGBEE COORDINATOR API
BD - 3: 9600bps
NB - 0: NO PARITY
SB - 0: ONE STOP BIT
D7 - 1: CTS FLOW CONTROL
AP - 1: API Enable
AO - 0: NATIVE
2) ルータ側
ZIGBEE ROUTER AT
BD - 7: 115200bps
NB - 0: NO PARITY
SB - 0: ONE STOP BIT
RO - 1: Packetization Timeout
D7 - 0: Disable
D6 - 0: Disable
JN - 1: Join Notification Enabled
なぜコーディネータ側のボーレートを9600bpsにしているかというと、今使っているXbeeシステムに合わせただけで特に理由はない。
参考までにルンバで使うデータの最大サイズは52byteでXbeeが元々持っているバッファは100byte(とここに書いていた)なので転送速度が異なっていてもオーバーフローは発生しない。
それでも心配ならPCにボーレートの違うXbeeを2個繋いで、スピードの早い方からデータを流して片側でデータ化けしてないか実験してみると良い。
○ハードウェアの準備
ルンバ側のXBEEハードウェアの作成
"iRobot Create OPEN INTERFACE"のPage 4を参考に以下のように接続。
ルンバ側はTTLの5Vなので、Xbee側は3.3VなのでXbeeに入力される信号に対しては念のためにDividerを入れておく。
こんな感じになるはず。
【XBeeの最新記事】
この記事へのコメント