2012年4月1日日曜日

Android携帯でArduino(アルデュイーノ)を動かす

前回は「Android携帯でIOIOを動かす」でしたが、今回はIOIOボードの代わりに「Arduino」を制御することにします。

1) ハードウエア

まづ、Arduinoをワイヤレスで制御できるようにする必要があり、今回もBluetooth通信が出来るよう工作します。

ArduinoにBluetoothといえば、Bluetooth Modemを使うことが考えられますが、$40 ~ $65 と少々高価であり、二の足を踏んでしまいます。ところが、安い物がありました。DealExtreme.comで売っている
① Wireless Bluetooth RS232 TTL Transceiver Module      USD$ 6.60
② JY-MCU Arduino Bluetooth Wireless Serial Port Module   USD$ 8.20
です。しかも送料無料ということで、試しに購入してみました。
注文から到着まで2~4週間かかりましたが、機能は「まとも!」なものでした。

左側が①の製品
ピンを自分でハンダ付けしなければならない。写真はRX,TX,VCC,GNDの4本のピンをハンダ付けしたもの。また、このモジュールを使うには3.3Vで動作することを前提にしなければならず、工夫が必要(多分?)。


右側は②の製品
2ドル高いだけあって(笑)予め4本のピンが付いている。また、5Vで動作するようなので配線が楽。

(注)このいづれのモジュールもデフォルトでは、ボーレイト9600、認識ピン番号「1234」です。FT232RL USBシリアル変換モジュール(秋月電子通商で¥950)などで PC と接続すればATコマンドを受け付けますので、後々のため、ボーレイトを「57600」に変更しておいた方が良いでしょう。


2) Android携帯とArduino上のプログラム

2ー1) amarino プロジェクト
  Android携帯に「Amarino_2_v0_55.apk 」「AmarinoPluginBundle.apk 」をインストールします。
  一方、Arduino のために「MeetAndroid_3.zip」をダウンロードし、Arduino IDE のライブラリ環境を整えます。
  次に、ここから「amarino-examples.zip」をダウンロードします。zipファイルを解凍すると、「Amarino_Servo」および「Compass_Led」というArduinoのスケッチが入っていますので、取りあえずこれで動作を確認することができます。

(デモビデオ)
以下のデモビデオは、Android携帯上のAmarinoアプリにコンパスセンサーのプラグインを加えた状態で起動しています。また、Arduinoには上述のCompass_Led(を少し改変したもの)をアップロードしています。

(独断による評価)
amarino プロジェクトは、Android携帯電話に備わっている各種センサーを利用してArduinoにつながる各種デバイスをコントロールしようとするものであり、その利用は無料で、進化の途中にあるのでまだまだ使い易くなることでしょう。しかし、Arduinoにつながるデバイスによってそのスケッチを都度変更しなければならないという煩わしさがあります。
これを、解決してくれるのが次に紹介する「ArduinoCommander」です。

2ー2) ArduinoCommander と Firmata

Arduino には「StandardFirmata.ino」をアップロードしておきます。このスケッチは、Arduino IDE をインストールすると標準で入っています。ボーレートが 57600 に設定されているので、Bluetoothモジュールと合わせる必要があります。
以後、スケッチの変更は必要ありません。(これが Good !)

ArduinoCommander は無料のAndroidアプリです。しかし、便利に使うためには若干の費用が発生します。その内訳は
① Android携帯電話搭載のセンサーを無制限にコントロールに使う(10秒間は無料で使えるが)費用・・・・$4.99
② ①の設定をファイルに保存し、次の立ち上げ時にロードできる費用・・・$0.99



Android携帯上でArduinoCommanderを立ち上げ、Bluetoothでの接続が成功すると【上写真】のように青カラーのArduinoボードが表示されます。

Arduinoのどれかのピンをタッチすると、【下写真】のようにピンの設定画面となります。
「Digital Input」「Digital output」「Analog input」「Analog output(PWM)」
のいづれかを選び、必要な設定をし「ok」を押すと、その設定がArduinoの動作に反映されます。(この「ok」を押す行為が何とも煩わしい。ok なしでも反映されると有難いのだが・・・)

ここまでの操作は
① 携帯電話のような小さい画面で太い指で所望のピンを選ぶのはかなり難しい。(iPad のような画面ならば問題ならないかも)
② ピンの設定変更がワンタッチとはいかず、動く物をコントロールするには不向きである。
という欠点があります。

これを解消するのが、「Advanced」という機能であり、このキーを押すと、Android携帯電話が持つセンサー(Accelerometer,Magnetic field sensor,Orientation sensor,Proximity sensor,Light sensor ・・・等々)を利用してArduinoのデバイスをコントロールする設定ができます。

(デモビデオ)
下のビデオは、Accelerometer(加速度計)のZ軸方向の動きで、10番ピンに接続されたLEDの明るさを変化させるものです。



さて、私の最終目標は何か動く物(車、ロボット?)をAndroid携帯(または iPhone)からワイヤレスでコントロールすることなのですが、他に何か手段がないかを探してみたいと思います。

--- 以上 ---