Android携帯でロボットを動かします。(microBridge編)


1.概要
Android携帯にArduinoをUSB接続し、赤外線LEDによりiSobotを制御する。
無改造のAndroid携帯にArduinoをUSB接続するため、microBridgeを利用する。
また赤外線LEDからの信号送信を汎用的にし、他の用途への応用を容易にしておく。


2.構成
装置構成は以下とする。
[Android携帯]-USB-[USBホストシールド]-[Arduino]-[赤外線LED]- - 赤外線 - -[iSobot]


3.インタフェース
3.1.Arduino-Android間インタフェース
3.1.1.microBridgeソケット
microBridgeはTCPソケット通信を実現する。
ここではとりあえず以下のポート番号を利用する。
ポート番号:4567

3.1.2.シーケンス
以下のシーケンスでAndroid→Arduinoへ赤外線送信情報を送信する。
コマンド送信:Arduino←Android携帯
(エラー発生時)レスポンス送信:Arduino→Androdi携帯

3.1.3.メッセージフォーマット
送受信するメッセージは以下のフォーマットで作成する。
赤外線送信情報コマンド
0:STX(0x02)
1:コマンド種別(赤外線送信'S')
2:信号状態(ハイ'H'/ロー'L')
3〜6:信号維持時間マイクロ秒4桁('0'〜'9'、上位から下位に向かって格納、0埋め)
送信する信号状態の数だけ2〜6を繰り返す。
7:STX(0x03)

赤外線送信情報レスポンス(エラー発生時)
0:STX(0x02)
1:コマンド種別(エラー'E')
2:エラー情報(受信データエラー'0'/Arduino側バッファあふれ'1')
3:エラー情報
4:STX(0x03)

3.2.Arduino-iSobot間インタフェース
Arduino-iSobot間は一般的な赤外線通信38KHzを使用してメッセージを送信する。
ビットフォーマット、各動作コマンドはAndroid側ソース(ISobotCtrl_CommandList.java)を参照。


4.ハードウェア
4.1.ArduinoにUSBホストシールドを接続する。
USBホストシールドの種類によっては一部のピン割り当てが異なるので、ライブラリ側を修正する必要がある。

4.2.Arduinoに赤外線LEDを接続する。
赤外線LEDはデジタル2番ピンに接続する。


5.ソフトウェア
5.1.Android側
サンプルプロジェクトではiSobot制御コマンドから赤外線送信情報を生成しているが、実際には各コマンドに対応した送信メッセージが固定的に生成されるので、あらかじめ作成しておいたメッセージをArduinoに送信するだけでよい。
Luaridaでの制御サンプルではAndroid携帯の加速度センサ値にあわせて固定的なメッセージを選択し送信しているだけである。

5.2.Arduino側
microBridgeからの信号受信時にadbEventHandlerが起動されるので、そこで受信データを1バイトずつ処理を行う。
STX受信によりメッセージの先頭を検出し、以降メッセージフォーマットに従い赤外線送信情報をバッファに蓄積し、ETX受信によりメッセージの終端を検出した際に実際の赤外線信号送信を開始する。


6.動作例
Android microBridge And iSobot control demonstration.


Android microBridge+luarida And iSobot control demonstration.



7.ソース/パッケージ
Arduino側プロジェクト
Android側プロジェクト

Android側をLuaridaで実験したスクリプト