人通りのあるところでやるので、全自動だといろいろ危険らしいのでラジコンにしました。
今回は通信方法をどうしよっか編です。
用意するもの
・Arduino UNO
・USBホストシールド
・iBUFFALO Bluetooth4.0+EDR/LE対応 USBアダプター(BSBT4D09BK)
方法としてはBluetoothでAndroid端末とシリアル通信してArduinoを制御する感じです。
恥ずかしながら、自分はBluetoothとか初めて使うのでバージョンとかよくわかりません。
なので調べました。→Bluetoothのバージョンによる違いについて
見てみるとバージョン同士の互換性とかいろいろめんどそうですが、自分が使ってるAndroidのバージョンは4.0で、モデル番号でも調べてみたところちゃんとBluetooth4.0に対応してました。まあ同じ4.0同士なら問題ないでしょうということで。
Arduino側
初めはここの方のように、Bluetoothモジュールを買おうとも思ったのですが、なんか高かったので断念しました。結局、ArduinoのUSBホストシールドにBluetoothドングルつけてやることに。
シールドとかドングルとかなら別のことに使えるしいいなあと。
まず、これ→USB_Host_Shield_2.0-master.zipをダウンロードさせてもらい、arduino/libraries以下に展開します。(USBホストシールドを使うためのライブラリのようです。)「USB_Host_Shield_20」という名前で保存しました。
そしてArduino IDEのメニューから
「ファイル」 → 「スケッチの例」 → 「USB_Host_Shield_20」 → 「Bluetooth」 → 「SPP」
とSPP.inoファイルを開きます。
そしてloop()内の
if (SerialBT.available())
Serial.write(SerialBT.read());ここのif内をいろいろ変更していい感じにします。setup()内でpinModeで初期化するのも忘れずに。(これを忘れてめっちゃ悩んだ)変更後のスケッチ一部
void loop() {
Usb.Task(); // The SPP data is actually not send until this is called, one could call SerialBT.send() directly as well
if (SerialBT.connected) {
if (firstMessage) {
firstMessage = false;
SerialBT.println(F("Hello from Arduino")); // Send welcome message
}
if (Serial.available())
SerialBT.write(Serial.read());
//以下追加部分
if (SerialBT.available()){
char c = SerialBT.read();
if(c != -1){
switch (c){
case '1':
digitalWrite(7, HIGH);
break;
case '0':
digitalWrite(7, LOW);
break;
}
}
}
}
else
firstMessage = true;
}1を送信するとLEDが光り、0で消灯。8~13はUSBホストシールド側で使っているようですが、8と9はちゃんとLチカできました。
でも怖いので使いません。10~13は常にLEDが光ってしまうから使ってるんだなあと。
Android側
S2 Terminal for Bluetooth Free
というアプリをインストールします。
(Android端末とBluetoothデバイス間でSPPを利用してシリアル通信をすることができる。)
あとはペアリングして、アプリを開いて今回使うBTアダプタを選びます。
そしたら1やら0やらを送ってLチカ!楽しい!
ArduinoUNO+USBHostShield+Bluetoothドングルで、iPadにつながるインプットデバイスを作る
↑今回はAndroidでやりましたが、使うものが似ているのでいつかこれもやってみたいです。
0 件のコメント:
コメントを投稿