人通りのあるところでやるので、全自動だといろいろ危険らしいのでラジコンにしました。
今回は通信方法をどうしよっか編です。
用意するもの
・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()内の
1 2 | if (SerialBT.available()) Serial.write(SerialBT.read()); |
変更後のスケッチ一部
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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 ; } |
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 件のコメント:
コメントを投稿