フォト
無料ブログはココログ

Arduino

2012年9月23日 (日)

Android+microbridgeでネギ振り

Android + microbidge + arduino + hostShield でサーボが動いたのでネギを振ってみた
Negifuri

アプリはこんな感じz
Negi_app
gifを表示してBGMを流して、加速度センサーの出力を読んで45°~135°になるように変換してarduinoに送るだけ。
arduino側のF/Wはmicrobridgeに含まれるDemoが使える。

アプリを実行した LifeTouchNoteを振るとミクがネギを振る
Nefifuri_movie ←リンク先にAVI

昨日参加した勉強会でやったらウケた。v(^^

2012年9月18日 (火)

Android+microbridgeでI/O制御

HostShieldそっくりさんができたのでAndroidと繋いでみた。
スマホは使っていないので(裸眼で使えそうなスマホはラクラクホンしかない)LifeTouchNoteを使った。LTNはAndroid2.2でAOA( Android Open Accessory Protocol )をサポートしていないのでmicrobridgeでLTNと繋いだ。

 microbridgeは、ADBを利用して制御するハードに接続するのでUSBデバッグを許可するとどのバージョンのAndroidでも使える。USB-Host機能を持ったハードからADB経由で tcp:xxxxを実行し、Android上のアプリはlocalhost:xxxx経由でハードと通信を行う仕掛けだ。

 microbridgeのサイトからHostShieldのF/W(MicroBridge-Arduino.zip)とAndrodのアプリ(ServoControl.zip)をDLしてサーボを制御するデモを実行してみるとうまく動かないので、パッチを当てた。

  • HostShieldのRESET,GPXの配線が逆
    原因:
    DEV-09628
    の回路図を参考にしたのでRESETとGPXの配線が逆になっていた。DEV-09628のページにも説明がある。(DEV-09947はサンプルソースのとおりになっているようだ)
    対策:
    max3421e.hの#define PIN_MAX_GPX 8 #define PIN_MAX_RESET 7 を書き換えて逆にした。
  • HostShield初期化時に"Error: OSCOKIRQ failed to assert"が出力される
    原因:
    MAX3412Eは電源ONの際に、内部の48MHzPLL発振器が外部の12MHzX'tal発振器にロックすると割り込みを発生する。
    max3421e.cppの max3421e_reset()関数で、この割り込みを待っているのだが、タイムアウト用の変数を8bit(unit8_t tmp)で宣言しているため、PLLがロックする前にタイムアウトが発生している
    対策:
    uint16_t tmp にした。
  • LTNが認識されない(10回に9回は認識に失敗する)
    原因:
    Adb.cppのADB::isAdbDevice()関数でコンフィグデスクリプタの取得に失敗している(getConfigurationDescriptor()の戻り値が負)
    対策:
    getConfigurationDescriptor()の戻り値が負ならばもう一度実行するようにした。

 HostShieldのF/Wでadb logcatしておくとAndroidのログがHostShield経由でシリアルで送られてくる。
Logcat
AndroidはUSBでHostShieldと繋がるのでEclipseでデバッグできなくなるが、logcatしておくとログを確認することができるようになる。

 Android側のアプリ(ServoControl.apk)はこんな感じ
Servocontrol1
画面上の赤い四角をドラッグするとサーボが動く。(このデモはX,Y 2ch分の制御が可能なのだがサーボが1個しかなかった。)
画面左上の赤いバーはArduinoのアナログ入力値を表示している。(アナログ入力ピンには何も繋いでない。)

 microbridgeを使用するアプリはsocketを使用するのでManifestでINTERNETアクセスを許可しておかなければならない。
簡単に動くと思っていたらまったくアプリが起動せず、INTERNETアクセスの許可していないことに気付くまでちょっとハマってしまった。(ログを見て気がついた。)


sparkfunのDEV-9947のリンクが間違っていたので、そ~っと直した。(2012/9/18)

2012年9月14日 (金)

USB Host Shield

Arduino用ユニバーサル基板 UB-ARD03でUSB Host Shieldを作った
Hostshield2
MAX3412Eを使ったSparkfunのUSB Host Shield(DEV-09947 DEV-0926) そっくりさんである。
(2012/9/18:そっくりさんを作るなら、サンプルソースを変更しなくて良いので DEV-09947を参考にしたほうが良い。)
MAX3412EはDigikeyから\1,161で買った。DEV-09947はスイッチサイエンスで\2,495だから、そっくりさんを作ってもそんなにお得ではなかった。
MAX3412E
は32pin-TQFPなので素直にピッチ変換基板を使ったらユニバーサル部分がなくなってしまったので、ソケットを使って浮かしてピッチ変換基板の下に3端子レギュレータを実装している。

Hostshield

なんだか空母状態になっている。
一番下が秋月のATMega168/328基板を使ったArduinoそっくりさん、手前が秋月のAE-UM232Rそっくりさん、奥側がSparkfunのUSB HostShieldそっくりさん。
 オープンソースばんざい。

2012年9月 8日 (土)

Arduino用ユニバーサル基板

Arduino用ユニバーサル基板 UB-ARD03

 サンハヤトのArduino用ユニバーサル基板 UB-ARD01↓は
Ubard01

秋月のUSBシリアル変換モジュールATMEGA168/328用マイコンボードにソケットで実装した場合、USBシリアル変換モジュールに干渉すると書いた。

 最近サンハヤトから寸法の短いUB-ARD03が販売されてたようなので、さっそく買ってきた。(基板の色は緑だけのようだ)
Ubard031

Ubard03

干渉しない。これならOK

2012年8月 6日 (月)

Arduinoそっくりさん

作りかけて放ってあった、秋月の「FT232RL USBシリアル変換モジュール(AE-UM232R)」そっくりさんを作った。
Aeft232_clone Aeft232_clone1_2
FT232RLを使った、ただのUSB-Serial変換アダプタだ。

 FT232RLをSOPのピッチ変換基板に載せて、コネクタ、コンデンサ類は千石で売ってるフレキシブル基板(曲がる万能両面基板両面スルーホール)をはさみで切って使った。

 なぜ、わざわざAE-UM232そっくりさんにしたかというと、秋月のArduino互換基板を持っているからである。
Img_5860

AE-UM232にソケットを使うと、シールド基板と干渉することは知っていたのだけれど、本当に干渉する。
Universalsheeld

秋月C基板で作るか
Akizukic

ホストシールドを作るためにMAX3421EはDigikeyで買ってある。

 ここを参考すzのAVR研究所 にあるFT232RのBitBangが使えるavrdudeを使ってBootloaderを書いて、サンプルスケッチをロードするとちゃんと動いた。
Arduinoide

 AVRの書き込みは、arduinoISP+avrdude+avrdude-GUIを使っている。
学研のjapaninoも買ったのだがarduinoISP専用になっている。)
本家のavrdude-GUI 1.0.5はFlashメモリに書くデータファイルをうまく指定できなかった。

ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

と叱られる。
ソースも公開されているので読んでみようかと思っていたら、既にパッチを当てている人がいて修正版が公開されていた。
(横着しないでコマンドラインで使えば良いんだけど...)