小ネタ 2011-013

Androidのアクセサリ開発キットADKを試してみる

 Androidのアクセサリ開発キットADKというのが公開されたそうだ。
  Link - GoogleがAndroid向け周辺機器を自由に開発できる「Android Open Accessory」を発表、開発キットを日本のロボット・メーカーが提供
 ADKのデモ基板はArduinoというマイコンキットと互換なので、公式のキット以外で自作することも可能だそうだ。
 早くも実際に例が出ている。
  Link - side2 Arduino + USBホストシールド で ADK を試す

 真似して、Arduino MEGAというマイコンキットを使って回路を組み立ててみた。(2011-05-15)
 
 既にArdunoで自作している例が出ているが、オリジナルのADKとできるだけ同じ回路にしたかったので、ArduinoMEGAを使った。
 回路を同じにすることで、ソフトについては変更なしで動かせるはずである。


1. 回路作成

 
 今回作成した回路基板は3枚の基板で組み立てられている。

 
 1枚目の基板 - Arduino MEGA 未改造

 
 2枚目の基板 - 自作の配線変換基板(Arduino MEGAで、Arduino用のシールドのI2CやSPIバスを使うための変換用)

 
 3枚目の基板 - Arduino用のUSBホストシールド基板 改造品

 USBホストシールドは、sparkfunというメーカー製を入手して使っているのだけど、これはオリジナルとDigital7番ピンと8番ピンが入れ替わっている。
 オリジナルのADKのソフトをそのままで使うために、USBホストシールド基板上で7番ピンと8番ピンの配線を入れ替え改造した。

 また、このUSBホストシールドはUSBホスト用の5V電源をArduinoの9Vから取るように設計されている。
 今回は電流を沢山消費するようなUSB機器を接続したりしないので、Arduinoの5V電源を直結する改造をした。

 材料
 ・Arduino MEGA
 ・sparkfun USBホストシールド
 ・変換基板作成用のユニバーサル基板とコネクタ
 ・ジョイスティック部品
 ・プッシュスイッチ 3個

 回路図
 



2. ソフトウェア

 NexusOne(Android 2.3.4)に接続してみた。
 
 Androidケータイに入れるソフトは、既にビルド済みのデモアプリのapkファイルをそのままインストールして使った。
 ADK互換回路をUSBケーブルで接続すると、対応するADKアプリを起動するかどうか問い合わせるダイアログがポップアップ表示される。
 ここでOKを選択すると、デモアプリが起動する。

 
 プッシュスイッチを押すと、AndroidのDemoアプリのB1というボタンのグラフィック表示が点灯する。

 ジョイスティックは、ADKオリジナル版ではI2Cジョイスティックという部品を使っているが、 このジョイスティック部品は入手できそうにない。
 今回はとりあえずアナログのジョイスティック部品を接続した。
 
 温度センサーと照度センサーがもともと接続されていたAD変換ピンにジョイスティックを接続したので、ジョイスティックを操作するとDemoアプリ上でこれらのセンサー数値表示が変化する。
 Arduino側のマイコンのソフトを書き換えると、Android側のジョイスティック表示を動かすこともできそうなので、あとでやってみる予定。
 (ちなみにI2Cのジョイスティックというと、Wiiリモコンのオプションのヌンチャクというコントローラーを使うことができそうだ。)


 (後日加筆 2011-05-19)
 実際にArduino側のソフトを書いてみた。位置から全部作ったのではなくて、元のソフトを少し変更して作った。
 [ demokit_kako.zip (download) ]

 実際に動かしてみたが、プッシュスイッチに反応してDemoアプリ側でB1〜B3のグラフィック表示が点灯するのを確認できた。
 しかし、プッシュスイッチのボタンを高速に連打するとOn/.Offのメッセージ送信が誤作動して、ボタンを押してないのに点灯したり、ボタンを押しているのに点灯しなかったりという状態が発生した。Arduino側のアプリの作りがあまりよくない気がする。

 ジョイスティック部分はうまく動かなかった。今回使ったDemoアプリ側で機能を殺してあるのかも? 原因を調べ中。



3. アールティーのADK

 アールティーのADKを試してみた。(2011-05-24)
 
 アールティーのキット
 箱の中身は、完成品の基板とUSBケーブル2本のみで、説明書とかは付属していない。

 
 写真右側がArduinoMEGA互換+USBホストの基板で、写真左側がマイコンに接続される各種周辺回路の基板
 基板は、上下2枚の基板を積み重ねてスタックして接続している。

 
 ジョイスティック部分
 I2Cで接続している。

 
 動かしてみたところ
 3つのLEDは、3原色発光タイプで、それぞれ好きな色に発光させることができる。



4. アールティーのADKのシールド(サブ基板)をArduino MEGAで動かす

 最初は、ArduinoMEGAに中間の変換基板を取り付けていたのを、さらに改造して、中間基板でAndroid ADKと同じ回路にして、Andrdoid ADKのシールド(サブ基板)を動かしてみることにした。(2011-05-30)
 
 
 ArduinoMEGA+変換基板でAndroid ADKと同じ回路にして、Andrdoid ADKのシールド(サブ基板)を動かしてみることにした。
 ところが、回路図を調べたらUSBホスト用ICの配線にATMELのATMEGAマイコンのピンのうち、Arduinoで未接続になっているピンを使っていることがわかった。

 まずはUSBホストシールドを動かしたのと同じ配線にして動かしてみたのだが、USBホストシールドで使っているピン7〜ピン10がLED1とLED2の配線と重複しており、LEDが勝手に光ってしまうのと、LEDの発光の設定をしてピンの信号を乱すとUSBの接続が切れてしまう。

 ピン7〜ピン10の配線を変更して、ピン47,48,49とピン53にハンダ付けし直してみた。
 Arduinoのスケッチ(ソフト)も、ライブラリのファイルのヘッダ部分のピン定義を書き換えてビルドし直してみた。

 Arduino用のソフトウェアは元のオリジナル版のdemokit.pdeをそのまま使った。
 ビルドするには、Arduino開発環境のライブラリフォルダに必要なライブラリをインストールする必要がある。
 AndroidAccessoryといライブラリと、CapSenseというライブラリと、USB_Host_Shieldというライブラリをインストールする。
 CapSenseライブラリは、http://www.arduino.cc/playground/Main/CapSense で入手する。
 USB_Host_Shieldライブラリは、https://github.com/felis/USB_Host_Shield/tree/dev で入手し、回路でピン割り当てを変更したのに対応して書き換える。

 自分が作った回路の場合、
 Max3421e_constants.h を、次のように書き換えた。

#define MAX_SS 53
#define MAX_INT 49
#define MAX_GPX 48
#define MAX_RESET 47

 これは、ピン7〜ピン10に割り当てられていたUSBホストICの制御の部分を、ピン47,48,49,53に変更するためである。

 これらの変更で、アールティーのADKと同様に自作の回路でADK用のシールドを動かすことができた。



参考
Link

GoogleがAndroid向け周辺機器を自由に開発できる「Android Open Accessory」を発表、開発キットを日本のロボット・メーカーが提供
Arduino + USBホストシールド で ADK を試す
Open Accessory Development Kit (ADK) を使ってみた
Y.A.Mの雑記帳 Android Open Accessory Development Kit
DemoKitを使い回しやすくしたSimpleDemoKitのソース公開したよ
PandaBoard で ADK を使ってみた , PandaBoard で ADK を使うために変更した内容
Make: Adventures in Android ADK Development
Seeeduino ADK Main Board
Arduino pro miniでADK互換ボードを構成する
RT社さんが作っておられる次のバージョンがこちら。ロボットを作られる方に優しい小さなサイズになっており、お値段も4千円に。