Android端末からロボットを操作しよう
Bluetooth Beeとは
Freaduino UNOをBluetooth通信でAndroid端末から操作するため、今回はBluetooth Beeを使用します。Bluetooth Beeは、XBee互換のSPP対応Bluetoothモジュールです。また、Bluetooth BeeをFreaduino UNOに接続するためのFreaduinoセンサーシールドV1.2 (XBeeインターフェース付)も併せて使用します。Android端末上で動作するコントローラーソフトとして無料のVS-C2 for Androidを使用します。VS-C2 for Androidをインストールしていない場合は、Google Playからダウンロードしてください。〇
FreaduinoセンサーシールドV1.2 (XBeeインターフェース付)
デモ映像
以下はBluetooth Bee、FreaduinoセンサーシールドV1.2 (XBeeインターフェース付)をロボットに搭載したデモ映像です(ビデオ前半が本ページの内容になります)。
Bluetooth Bee V2をロボットに搭載しよう
これ以降の組立、配線はFreaduino UNOに電源が入っていない状態で行ってください。
最初に、写真のようにBluetooth BeeをFreaduinoセンサーシールドに搭載します。
次に、ジャンパーでD2-Dout,D3-Dinを接続します。また、スライトスイッチがVbを選択していることを確認してください。
ジャンパーとスライドスイッチを確認した後、Bluetooth Beeを搭載したセンサーシールドをFreaduino UNOに搭載して、センサーシールドの上からサーボモータの線を挿します。
センサーシールドのピン配列は以下の通りです。
- 腰サーボモータ:4番ピン
- 右足サーボモータ:5番ピン
- 左足サーボモータ:6番ピン
- 首サーボモータ:7番ピン
Bluetooth Bee V2のデモプログラムをインストールしよう
配線が完了したら、デモプログラムをダウンロードしてDemoBlueRobotV2a.ino(746)、ロボットにインストールしてください。トリムは再度調整しておいてください。72行目のtmp_trim[SERV_NUM]={0,0,0,0}; を修正します。
このデモプログラムを書き込むときは、サーボモータのケーブルを外しておいてください。プログラムを書き込む際に電圧降下を起こさないようにするためです。
モーションを割り振っていないコマンドを受信した場合も、ロボットのサーボが小刻みに少し震えますが、これはSoftwareSerialとServoライブラリのタイマー処理が干渉しているためと考えられ、Arduinoの仕様に依存しているためです。ご了承下さい。
Bluetooth Bee V1をお使いの方はDemoBlueRobot.ino(1214)をご使用ください。
以下はデモプログラムの抜粋と大まかな処理の流れです。
- readCommand()関数でVS-C2 for Androidのコマンドを読み出して、VSC2配列に格納します。
- 次にVSC2配列を参照して、コマンドを実行します。
- コマンドを実行した後に、VSC2配列とシリアルのバッファを初期化します。
//==========================================================================================================
//Main
//==========================================================================================================
void setup()
{
initServo();
delay(1000);
Serial.begin(115200);
Serial.println("start!");
pinMode(RxD, INPUT); //UART pin for Bluetooth
pinMode(TxD, OUTPUT); //UART pin for Bluetooth
if(setupBlueToothConnection() != 0) while(1); //initialize Bluetooth
//Waiting for connection
while(1){
if(recvMsg(400) == 0){
Serial.print("recv: ");
Serial.print(recv_str);
Serial.println("");
break;
}
}
delay(200);
Serial.println();
Serial.println();
Serial.print("Connected!\r\n");
}
void loop()
{
//read command
if(flg == 0){
if(readCommand(500) != 0) {
//Serial.println("No Command");
}else{
flg = 1;
}
}else if(flg == 1){ //if get some command
fetchCommand();
switch(cmd1){
case 10: //triangle button is pushed
break;
case 20: //circle button is pushed
//Serial.println("look_around");
playMotion(look_around, 5);
break;
case 40: //cross button is pushed
//Serial.println("home_position");
playMotion(home_position, 1);
break;
case 80: //rect button is pushed
break;
}
switch(cmd2){
case 10: //Go
//Serial.println("move_forward");
playMotion(move_forward, 6);
break;
case 20: //Right
//Serial.println("turn_right");
playMotion(turn_right, 7);
break;
case 40: //Back
//Serial.println("move_back");
playMotion(move_back, 6);
break;
case 80: //Left
//Serial.println("turn_left");
playMotion(turn_left, 7);
break;
}
blueToothSerial.flush();
flg=0; //clear flag of receving command
}
}
Android端末とのペアリング方法
プログラムが正常にインストールされて、Freaduino UNOが再起動すると、Bluetooth Bee上で青色LEDが点滅します。この状態でAndroid端末からペアリングを行います。
Bluetooth Bee V1は赤と緑のLEDが交互に光ります。
ペアリングを行ったらVS-C2 for Androidを起動してください。
VS-C2 for Androidの画面が表示されたら、画面左下の赤枠の部分をタッチします。
写真のようなメニューが表示されるので、デバイスの接続をタッチします。
表示されたデバイス一覧からHMSoftを選択してください(写真はv1の際のものでDemo3と表示されていますが、v2を使えばHMSoftと表示されます)。ペアリングコードを要求する画面が出てくるので1111を入力してください。無事ペアリングされれば、画面上部に接続完了と表示され、Bluetooth Beeの青色LEDの点滅が終わり光ったままになります。これはペアリングされている状態を示します。この状態で、ロボットを操作できるようになります。電源投入からペアリングができるようになるまで数十秒かかります。
Bluetooth Bee V1の場合、表示されたデバイス一覧からDemo3を選択してください。ペアリングコードを要求する画面が出てくるので0000を入力してください。Bluetooth Beeの緑のLEDがゆっくり1回ずつ点滅します。これはペアリングされている状態を示します。この状態で、ロボットを操作できるようになります。
ペアリングを解除するには、再度、デバイスの接続で"HMSoft"を選択してください。
うまく動作しない場合の対処法
(1)いつまでもBluetooth Beeの緑のLEDが2回の点滅を繰り返している場合(Bluetooth Bee v1のみ)
何らかの理由でBluetooth Beeがペアリング要求を待つモードに移行できていません。Freaduino UNOのリセットボタンを押して再起動してください。再起動後、Bluetooth Beeの赤と緑のLEDが交互に点滅すれば、無事ペアリング要求を待つモードに移行できています。
(2)Bluetooth BeeがAndroid端末とペアリングされているのに、ロボットを操作できない(Bluetooth Bee v1のみ)
Bluetooth BeeとAndroid端末のペアリングはできているが、Freaduino UNOとBluetooth Bee間でうまく通信できていない状態です。以下の手順で解決可能です。
- 一旦ペアリングを解除してください。
- 次に、Freaduino UNOを再起動します。
- Bluetooth Beeが、赤と緑のLEDが交互に光り、ペアリング要求を待つモードに移行したことを確認します。
- 再度、Android端末からペアリングを行ってください。
(3)Android端末からBluetooth Beeが見えない
お使いのAndroid端末がBluetooth Beeに対応していない可能性があります。詳しくはBluetooth Bee V2の製品ページ、および、お使いのAndroid端末のメーカーページをご参照ください。
(4)その他(Bluetooth BeeのLEDが点灯しない、ペアリングが正常にできないなど)
手順は間違っていないのにBluetooth Beeが正常に動作しない場合、電圧降下が発生している場合があります。電池の容量が十分残っているか、また、サーボモータのトリムを調整しているかをご確認ください。サーボモータのトリムが調整されず、サーボモータに過分な負荷がかかっていると、電圧降下の原因になる可能性があります。
VS-C2 for Androidをさらに使いこなしたい方に
今回のデモプログラムでは、VS-C2 for Androidの入力の内、十字キーと○×ボタンのみを使用してあります。VS-C2 for Androidをより使いこなしたい、他のデバイスと連携してみたいという方のために、VS-C2 for Androidから送られてくるコマンドを表示するプログラムSeeedBluetoothV2Sample.ino(600)を用意しました。以下の手順で使用してください。
Bluetooth Bee v1用はこちらとなります。デバイス名(Demo3)、ペアリング(0000)DemoBlueShowCommand.ino(798)
- Freaduino UNOにセンサーシールドとBluetooth Beeを搭載します
- USBケーブルでPCに接続します
- Freaduino UNOを再起動して、シリアルモニタ(ボーレート115200)を立ち上げます
- シリアルモニタに"start"と表示され、Bluetooth Bee v2のLEDが点滅することを確認します
- Android端末側でデバイス名HMSoftにペアリング(1111)をして、VS-C2 for Androidで操作します
- VS-C2 for Androidでいずれかのボタンを押してください
- VS-C2 for Androidから送られてくるコマンドが直接シリアルモニタに表示されます(ボタンを同時押し等してどのように変化するか確認してください)
VS-C2 for Androidから送られてくるコマンドはVSC2配列に格納されています。プログラム内でVS-C2 for Androidのコマンドを参照したい場合は、VSC2配列を参照してください。