人通りのあるところでやるので、全自動だといろいろ危険らしいのでラジコンにしました。
今回は通信方法をどうしよっか編です。
用意するもの
・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 件のコメント:
コメントを投稿