2012年1月28日土曜日

MIDI Library for Arduino 1.0


Arduino でMIDI を扱うネタはこれまで何度か紹介しています。
今回は Arduino IDE 1.0 でMIDI ライブラリを使う方法を紹介します。
回路はこちらのシールドを使用します。

MIDI 送信は標準のサンプルがあります。
File > Examples > 4.Communication > MIDI

以前のサンプルと異なり、
Serial.print(val,BYTE);
ではなく、
Serial.write(val);
を使っています。
BYTE を指定する書き方は、Arduino 1.0 IDE ではエラーになるので、以前の書き方で作ったスケッチは修正する必要があります。


受信には、MIDI メッセージのパースが必要なので、ライブラリを使います。
MIDI のライブラリは Arduino Playground で紹介されている Arduino MIDI Library と、以前紹介した Tymm's MIDI Library などがあります。
Playground の MIDI Library v3.1 はまだ1.0 対応していないようです(簡単な修正で使えます)。

Tymm's MIDILibrary は1.0 テスト版があるので、こちら紹介します。

サンプルコードは MidiSendExample、MidiReceiveExample、MidiPneumaticsExample があります。
(Pneumatics は内容が良くわかりません。)

MidiReceiveExample を使ってみましょう。
MIDI の送信は iOS アプリとMIDI アダプタを使って、iPod Touch から行ないます。

このサンプルは Note On メッセージで LED On、Note Off でLED Off という簡単なものです。
これは、MIDI 対応 鍵盤アプリを使って簡単に試す事が出来ます。(例えば bs-16i など)。



次に、MIDI スライダーを使って、LED の明るさをコントロールしてみましょう。
スライダーが使える iOS アプリの Touch OSC または、MIDI Monitor などを使います。


MIDI Monitor の Mixed Control では CC #11 からCC #16 がスライダーに割り当てられています。


Touch OSC の Simple Layout はCC #0からCC #3 が スライダー(縦)に割り当てられています。


CC (ControlChange) メッセージ を受け取るには、handleNoteOn, handleNoteOff などにつづいて、handleControlChange を実装します。
(コメントアウトされた状態で用意されています。)


例えば
void handleControlChange(unsigned int channel, unsigned int controller, unsigned int value){
if (controller==0 || controller==11){
analogWrite(3, map(value,0,127,0,255));
}
if (controller==1 || controller==12){
analogWrite(5, map(value,0,127,0,255));
}
if (controller==2 || controller==13){
analogWrite(6, map(value,0,127,0,255));
}

}

この例では、CC #0 またはCC #11 で 3番ピンを、CC #1 または CC#12 で 5番ピンを、 CC #2 または CC #13 で6番ピンを、それぞれ PWM 制御しています。
PWM の使えるピンは 3,5,6,9,10,11 の6本なので、これらのピンを使ってRGB 制御をすることができます。(→こちらの記事参照)
MIDI で送るデータは、0から127 の128 段階なので、map 関数で0から255 に範囲を変えています。(128段階なのは変わりません)

Note On/Off や ControlChange 以外のMIDI メッセージもこのライブラリで扱う事が出来ます。
何を何に割り当てるかは自分で自由に決められるので 本来のMIDI の枠に捕われずに使って良いと思います。



2012年1月27日金曜日

USBasp のファームウェアアップデート


以前に紹介した aitendo AVR-USBasp-B はファームウェアが古いようです。
Arduino IDE 1.0 と組み合わせて使用すると、次のようなメッセージが出ます。


avrdude: Warning: Found USB device "USBasp" with old VID/PID! Please update firmware of USBasp!
avrdude: warning: cannot set sck period. please check for usbasp firmware update.


エラーではないのですが、できればなんとかしたいです。


ショップのページをみると、「JP3 とJP4 を同時にON にしてファームウェア書き換えモード」とありますが、より正確には「外部のISP プログラマーを使ってファームウェアを書き換えるモード」です。これ単体でアップデートはできません。

仕方ないので、このArduino as ISP を使ってみます。
どうも私の環境では安定しないので、(そもそも、安定していれば USBasp 不要ですし、、、)ちょっと不安です。

よくわからないエラーと格闘しつつ、なんとか書き込むことができました。
(イレースだけされて書き込めない時もあり、焦りました。リセットを手動で押したり、何回も試しました。)

書き込みに使ったツールは avrdude です。
Mac への導入方法は今回、割愛します。Arduino IDE の中にも含まれています。

書き込むファームウェアはこちらの 2011-05-28版をダウンロード。
aitendo-AVR-USBasp-B はAtmega8 なので、
bin > firmware の中の
usbasp.atmega8.2011-05-28.hex を書き込みます。
Makefile も用意されていますが、もう一つUSBasp がないと使えません。

いろいろ試して、書き込めたコマンドはこのような感じでした。
$ avrdude -P/dev/tty.usbserial-A700eY3o -b19200 -c arduino -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex:i

-P /dev/tty.usbserial-A700eY3o
 シリアルポート指定 これは各自の環境でことなります。
 指定するシリアルポートの名前を調べるコマンドは  $ ls /dev/tty.*usb*

-b 19200
 ボーレート指定 Arduino ISP の場合19200です。
-c arduino
 プログラマタイプの指定、Arduino as ISP はおそらくこれです。(avrisp でも良い?)
-p m8
 書き込む対象のマイコン atmega8を指定(実物を確認して下さい)
-U flash:w:usbasp.atmega8.2011-05-28.hex:i
 カレントディレクトリにある usbasp.atmega8.2011-05-28.hex というファイルを書き込み

もうひとつ、hfuse ビットが変わっていたので、こちらも書き換え

$ avrdude -P/dev/tty.usbserial-A700eY3o -b19200 -c arduino -p m8 -U hfuse:w:0xC9:m



これで Arduino IDE から使っても Warning がでなくなりました。

作るより買った方が簡単だと思ったのですが、結局手間がかかってしまいました。


2012年1月25日水曜日

Proっぽいduino


Proっぽいduino は Arduino Pro に近い構成をしたArduino 互換機です。
秋月のAE-ATMEGA 基板を使って組みました。

AE-ATMEGA のシリアル変換部、電源部を使わず、FTDI アダプタを使うための6pin を出しています。
(電源、GND、リセット、TX、RX をそれぞれ接続。CTS はオープン)



Arduino Pro は5V 版と3.3V版が存在し、それぞれクロックが16MHz、8MHz となっています。
Arduino で使用している ATmega328p は16MHz で動作させるために、4.5V 以上の電圧が必要です。(3.3V で16MHz にしても動作はすると思いますが、定格の範囲外なので、安定動作しない可能性があります。)

Proっぽいduino は5V/3.3V 両対応にするべく、クリスタルを取り外せるようにしてみました。クリスタル交換ってラジコンみたいですね!



この基板で試したかったのは、3.3V 仕様のArduino でSparkfun のUSB Host Shield が使えるかどうかです。シールド上にあるレギュレータ(5V/3.3V両方) を使わず、3.3Vレギュレータの出力のところに、直接 3.3V 電源を配線して、テストしました。

とりあえず、ADK でLED コントロールできることを確認しました。

Circuits@Home 版が 入手できれば(とくに for Pro Mini)、その方が簡単ですが、入手の容易なSparkfun 版でも、Arduino Fio などの3.3V Arduino と組み合せて使う事ができそうです。

2012年1月22日日曜日

Interface 増刊 Smartphone World (ADK 特集号)


日本Android の会1月定例会からの情報ですが、1月25日発売の「Smartphone World (スマートフォンワールド)」という雑誌でADK の特集をやるそうです。

未だ情報が少ないADK の貴重な書籍になりそうです。
ADK のみならず、WiFi やBT, Microbridge など、さまざまな方法で接続するとか。

Amazonで予約受付中。


RT 社のプレゼン、私のみどころはこの辺でした。


16:44 ごろ RT 社が考える ADK の活用方法


23:43 ごろ RT-ADK mini のテキストおよびキットについて(5-6月頃発売)
(それにともなう試行会をおこなうとのこと 3月頃)

試行会(ADK ハッカソン?) 、ぜひ参加したいです。

RT-ADK mini 初期ファーム


昨日購入したRT-ADK miniこの手のものは自分でファームを書かないと使えないと思っていたのですが、例のRT 社プレゼンにて、「Microchip のデモプログラムで動かせるファームウェアを書き込み済み」と言っていたので、結構期待をしていました。

Microchip のAndroid 用のプログラムはこちらからソースをダウンロードして作成するか、Android マーケットから「基本的なアクセサリのデモ」という名前のアプリをダウンロードします。
(名前変わるかも知れないので、[microchip] で検索して下さい。)


出来る事は 8ch のアウトプット(LED制御)、4ch のインプット(プッシュボタン状態)、そして1ch アナログインプット(ポテンショメーター)。

ところが、、、、

RT-ADK mini のピンと、このソフトの割当の資料がない。仕方ないので適当に部品を差したりしながらあたってみると


LED1 ... AIN3
LED2 ... AOUT2
LED3 ... 不明
LED4 ... 不明
LED5 ... AIN2
LED6 ... AOUT1
LED7 ... AOUT0
LED8 ... DIN3

Button1 ... DOUT3
Button2 ... DOUT2
Button3 ... DOUT1
Button4 ... DOUT0

POT ... AIN0

割当不明
AIN1
DIN0
DIN1
DIN2

PICkit用端子(※回路図から まだ試していません)
MCLR
+3.3V
GND
AOUT0 ... PGEC1
AOUT1 ... PGED1

基板上のボタン(SW1) ... DIN0
基板上のLED(LED1) ... DOUT0

という結果に。なんだこれは。
前記事で書いた、「初期ファームのままでも十分使える」は訂正します。
使えない事は無いのですが、ラベルと内容が合っていないので、、、結局このボードは自分でファームウェア書かないとだめですね。

初期ロットだけの問題かもしれませんが、購入時にファームのバージョンはわからないので、PICkit なしでも使えるという認識は危険ですね。

いずれにしても、micro USB はPower のみで信号線の結線はないこと、CN1 コネクタは電源っぽいけど、実はRS485 用(MAX485 に接続)、リセットスイッチっぽい SW1 とPower インジゲータっぽいLED1 はそれぞれ汎用ピンに接続されている点は要注意です。(電源を接続しても、LED1 が点灯しないのは正常です。)

2012年1月21日土曜日

RT-ADK mini



PIC 版のADK ボード、RT-ADK mini を購入しました。千石で3980円
気になりつつも、買わない予定だったのですが、先日行なわれた日本アンドロイドの会定例会でRT 社のプレゼンを見ていたら欲しくなってしまいました。
(→ビデオが公開されています。)

買わないでいようと思った理由は、現在 Arduino 版ADK にハマっていること、そして、上位互換のPIC24FJ256GB106 が載ったボードを既に持っている事。
欲しくなった理由は、なぜか MAX485 のチップが載っていた事、、、

プログラムを作成するにはPIC の開発環境が必要です。
MPLAB IDE v8か、OSX にも対応している MPLAB Xでもできるはず。
書き込みにはPICkit3 を使います。

ADK に興味がある人は大きく分けて
a) Android のプログラムを作っている → Android と連携するガジェットをつくりたい
b) マイコンを使って遊んでいる → スマホにつなげたい
の2通りに分けられますが、前者は「マイコンの開発がやりたい」わけでは無いでしょう。

このRT-ADK mini は、ボタン入力や ON/OFF コントロールをするだけなら、最初のデモ用ファームでも十分使えます。
PIC のマイコンだと意識せずに、Android 専用のI/Oボードだと思って使っても良いと思います。→訂正します。初期ファームはかなり微妙です。



連結ソケットがハンダ付け済みで販売されていますが、ピンが逆(太い方が基板側)では、、、?

端子は幅広タイプ(600mil) の28pin IC ソケットと同じ。電源はmicro USB(メス) 端子から5V-500mA を供給します。

私がArduino が好きな理由は、大勢の人が「同じボードを使っている」こと。
他の人が作ったサンプルをそのまま使える。これは本当に大きなメリットです。
PIC 版ADK も、既にいろんな方が作られていますが、使っているチップもまちまちです。

Arduino のシールドのように、このボードにつなげて使う機器が販売されるようになると面白いですね。

2012年1月19日木曜日

USBasp


USBasp はAVR マイコンのプログラマー(書き込み機)です。
以前に紹介した、「Arduino as ISP」のようなものです。
新品の(何もプログラムされていない)Atmega328p にArduino ブートローダを書き込んだり、ブートローダーを使わず(シリアル経由のプログラム転送をせず)にプログラムを書き込む事が出来ます。

Arduino IDE でISP プログラマーを使ってプログラムを転送する場合、以前は設定を自分で書く必要があったのですが、Arduino IDE 1.0 からは設定が不要になりました。

USBasp は設計仕様がオープンになっており、こちらのサイトで回路図やプログラムが公開されています。
今回は手軽に使える市販品を紹介します。(aitendo AVR-USBasp-B 900円)


メーカー(ATMEL)純正のISP プログラマーは AVRISPmkII があります。(秋月で3000円
純正開発環境 AVRStudio (Windows版のみ)などで使う場合はこちらがお勧めです。


購入した aitendo のモノは基板に2011.07 と書かれたものでした。中身のバージョンは分かりません。
以前のバージョンは不評の様で心配でしたが、今回購入したものは Arduino 用として特に問題なく使えました。


Arduino IDE 1.0 でのISP プログラマーの使い方


[1] Arduino ブートローダーの書き込む場合

1) USBasp をUSB ポートに接続する(Mac はドライバ不要。Windows はドライバーのインストールが必要。)
2) Arduino のICSP 端子に接続する(接続ケーブルなどの作成が必要)
3) Tools > Programmer > USBasp を選択
4) ボードの選択
 ・Atmega328p チップにOptiboot (Arduino Uno用)のブートローダを書く場合
  Tools > Board > Arduino Uno
 ・ Atmega328p チップにNon-Optiboot (Arduino Uno以前) のブートローダを書く場合
  Tools > Board > Duemilanove w/ ATmega328
を選択

5) Tools > Burn Bootloader
ちょっと時間がかかります。


firmware のアップデートをしなさい、とメッセージが出ていますが、とりあえず書き込めたようです。
アップデート方法は後日調べてみます。

[2] ISP 経由でプログラムを書き込む場合
1) USBasp をUSB ポートに接続する
2) Arduino のICSP 端子に接続する
2) Tools > Programmer > USBasp を選択
3) Tools > Board を選択
4) File > Upload Using Programmer (または、Shift キーを押しながら転送ボタンを押す)で書き込みを実行

ISP でプログラムを書き込むとブートローダーは上書きされてしまいます。
シリアルポート経由のプログラム転送に戻す場合は、再度ブートローダーを書き込みます。

2012年1月16日月曜日

ADK の電源考 その3



無駄に複雑な配線になっています。
実はこの接続を試したいがために、USB Hub を購入しました。

USB Host Shield (ホスト) > USB Hub
USB Hub >(デバイス) Arduino Uno
USB Hub >(デバイス) Xperia Arc

という接続になっています。

このハブはセルフパワー(AC アダプタから給電)方式なので、スマートフォンへの給電はハブが行なっています。
USB Host Shield は純粋に通信のみを行なっています。
ハブからArduino の接続は給電目的です。(プログラムすれば通信も可能です。)

つまり、これまで検討していた電源まわりの配線を一切いじる事無く、USB Host Shield とスマートフォンの組み合わせで ADK を構成できます。(ただし、Library 2.0 を使うため、リセットまわりの改造が必要です。)

この接続は、USB Host Shield Library 2.0 でUSB Hub に対応したことにより、可能になりました。
旧バージョンの USB Host Shield Library を使っている場合は、この接続をしても通信ができないため、ADK ボードを認識しません。

Library 2.0 に含まれるサンプルコードのADK demokit は、Hub に対応するように書かれているため、そのままで上記接続を試す事が出来ました。


Examples > USB_Host_Shield > adk > demoki_20


新ライブラリで USB Hub を使うには、

1) usbhub.h をinclude する。
2) USBHub クラスのインスタンスを作る。
 (USBHub hub0(&Usb); の行が相当。hub1, hub2 ... と使用するハブの個数分書く。メモリの許す限り最大7個まで使用できる。)

以上です。作成したインスタンスに対して、何か行なう必要はありません。


ADK の電源考 その2


Android タブレットデバイス (acer ICONIA TAB A500 Android3.2.1) でのADK の様子です。

このタブレットは秋葉原のレンタル工作スペース「ナノラボ」さんにて、お借りしました。

スマートフォンとは異なり、通信用のUSB 端子とは別に、充電用の電源端子があります。
また、USB ホスト機能をもつ端子も別に持っています。



以前から気になっていたのは、USB ホストの端子から電源をとれるか?
ということです。

USB ホスト端子とUSB デバイス端子両方同時につかえるのか、電源だけをとることができるか、といった疑問がありましたが、動作しました!

変則的ですが、このような接続もありということで、、、


このタブレットでその1 と同様のVBas 電圧のテストをしたところ、2.8V くらいからADK ボードを認識しました(5V まで上げても充電はしない)。USB Host Shield の5V バイパス改造をしなくても認識できます。

ADK の電源考 その1


ADK のボードはUSB ホストとして動作するため、USB デバイスであるAndroid 機器に対して電源を供給する必要があります。
スマートフォンはUSB 経由で充電を行なうため、充電モードに入ります。
携帯を充電するとなると、数百mA の電流が流れるので、電池で動かすのは結構大変です。

USB の仕様では、電源ライン(VBas ) に5V をかけることになっています。
Sparkfun USB Host Shield は、Arduino を外部電源で使用した場合、VBas に5V が出るようになっています。
Arduinoを Mac のUSB ポートからとった電源で使用した場合、VBas は3.2V 程度に落ちていました。

このVBas 電圧では、Xperia Arc はADK ボードを認識しなかったため、5V の出力をVBas にバイパスするよう、ハードウェアを修正しました。

このような経緯で、「VBas = 5V付近 が必要」と思い込んでいたのですが、写真のように「ボードを認識するが、充電しない」モードがあるようです。
(端末による仕様や、個体差もあることだと思います。)

VBas へのパターンをカットし、外から電圧を加えて変化させてみました。
あくまで私の端末での実験によると、3.3V〜4.0V あたりが充電マークがつかない状態で、ボードを認識しました。


検討の結果、USB Host Shield 上にある、3.3V のレギュレータの出力をVBas に接続したところ、この「認識するが充電しないモード」で動作することができました。

参考までに、USB Host Shield とArduino Uno の組み合わせで、
・無改造(5V レギュレータの出力をVBas に接続した状態)VBas = 4.95V, (電源 5.15V - 約214mA)
・3.3V レギュレータの出力をVBas に接続した状態 VBas = 3.4V, (電源 5.15V - 約69 mA)

となりました。(電流は、Arduino に入力する箇所で、テスターにて測定。)
電流値から、実際に充電されていないことがわかります。


電池2本を昇圧して 5V を出力する電池BOX が100〜200円くらいで売られていますが、この手の安物は 200mA の電流を取り出すのは難しいです。

今回の充電しないモードを活用すれば、簡易な電源で、ポータブルなADK 環境を構成できそうです。単純計算で、同じバッテリーを使用して3倍長持ちする、ということです。(その分、スマホ側が消費します。)


もうちょっといいDCDC コンバータをつかえば、電池1本でも良さそうですね。


※メーカーの想定外の動作だと思うので、機器を壊す可能性があります。
※USB 経由の充電をしないタブレットの場合、この記事の内容は関係ありません。

2012年1月13日金曜日

USB Host Shielduino


Sparkfun のUSB Host Shield を持っている人は、誰しも一度はやろうと思った事があるのではないでしょうか?
基板上のフリースペース(16列×7行) を使って Arduino を実装した「USB Host Shielduino」です。

1ボードで Arudino + USB Host Shield を構成。


プログラムの書き込みはArduino Pro 互換のピンを出しているため、FTDI アダプタを使って書き込みます。FTDI アダプタを接続した状態で、Arduino Duemilanove (2009) とほぼ同等のものになります。


パーツリスト
ATmega328p x1 (ブートローダ書き込み済みも売ってます)
104 セラミックコンデンサ x3
22p セラミックコンデンサ x2
水晶発振子 16MHz x1
10kΩ抵抗 x1
ピンソケット 6p x2
ピンソケット 8p x2
ピンフレーム 6p x1
IC ソケット 28p x1
2.1mm DCコネクタ x1
DC5V出力 AC アダプタ x1


Sparkfun USB Host Shield   2495円(千石
Sparkfun FTDI アダプタ(5V) 1495円(千石
と合わせて5000円くらいでADK ボードを構成できます。


回路図は特に書かずに、Arduino Pro eJakinoを参考にしながらつくりました。(電源部、リセット部、クロック、各ポートを配線するだけですし、、、)

製作は決して難しくないのですが、ひたすら根気が必要です、、、



もちろん、ADK ボードとして使用可能です。
電源部がかなりいい加減なので、今後検討の余地ありです。

USB Hub 2.0


USB Host Shield 2.0 やUSB Host Shield Library 2.0 の話しが続いていたので、、、
USB Hub 2.0 です。正確には、USB 2.0 Hub でしょうか。

USB ハブはAC 電源のたこ足タップのように、「分岐」をするだけでなく、それ自体が1つのUSB デバイスとして機能します。
PC の場合はほとんど意識せずに使っていますが、ホスト機には「USB ハブのドライバ」が必要です。
Arduino のUSB Host Shield はLibrary 2.0 でUSB Hub に対応しました。
今回はその実験も兼ねて、ハブを購入しました。

3.0 対応のHub も普通に売られていますが、USB 3.0 対応製品を全く持っていないので、2.0 のハブを購入。セルフパワー(AC アダプタ付属)のハブなら、なんでもいいやと思ったのですが、結構悩みました。

買ったのは写真の BSH4A01
同じ見た目で別の製品もあるので紛らわしい。(BSH4AUM01BSH4AE06

USB ハブ市場は見た目勝負なところがあり、コンパクトで意匠をこらしたものが多いのですが、反面、使い勝手が悪そうな端子配置のものもあります。

今回選んだのは、電源、アップリンク(ホストPC への接続)、ダウンリンク(USB デバイスを接続)のすべてが直線上にならぶタイプです。

線があっちこっちから出るタイプは使う際の見た目が良くないと思います。
特にセルフパワーハブを選ぶときは、電源端子の位置に注目しましょう。横から飛び出すタイプが多いです。また、AC アダプタが大きかったり、変な形をしているものもあります。


実際に店頭で見比べたのですが、最近のトレンドは「節電」です。
ポート毎にスイッチのついた製品もあります。
さらに、PC 連動タップのように、アップリンクが生きているときのみ、電源が入る「待機電力99.9% カット!」製品。(このタイプはUSB ポートで充電する目的には使えないので要注意です。)

個人的にこういう機能は余計なものに感じるので、一番シンプルなハブを選びました。


紹介記事を書こうとしたら、、、iBuffalo (バッファローコクヨサプライ)、Buffalo に吸収されてしまうんですね。この会社、元アーベルだったんですか。そういえば、そんな会社ありましたね。

せっかくなので、Amazon リンク。見た目が全部同じで、悩みました、、、

2012年1月11日水曜日

Arduino MEGA と Sparkfun USB Host Shield


Arduino Uno で USB Host Shield を使うと、残りのI/Oピンがぐっと少なくなります。
ピンが足りなければ MEGA があるじゃない、、、ところが、Sparkfun の USB Host Shield は Arduino MEGA に対応していないのです。

この問題は、旧 Ethernet Shield の問題と同様、SPI の接続ピンが、Uno とMEGA で異なるためです。

Circuts@Home の USB Host Shield 2.0では、新Ethernet Shield 同様、ICSP の端子を使って接続しているため、MEGA でも使えるようです。
そこで、Ethernet Shield 同様、ICSP 端子からの配線を追加すれば、2.0 相当にすることができます。

Ethernet シールドのときにやったように、ジャンプワイヤを使っても良いのですが、今回は以前紹介した「たこ足シールド」を拡張して使ってみます。
このシールドの基板に使用しているボードはArduino 互換ボードで、ICSP の端子の位置も Arduino と同じです。
配線もされているため、ここに2x3 のソケットを逆さにつければ完了です。


USB Host Shield (リセット、電源 改造ずみ)<> たこ足シールド <> Arduino MEGA を重ねて、

USB Host Shield Library 2.0 付属のサンプルをいくつか動かしてみました。
とくに問題はないようです。ADK として動作させることもできました。


この組み合わせで常用する予定はないので、これ以上の検証は行ないませんが、Arduino MEGA 系で Sparkfun の USB Host Shield を使う方は参考にしてください。(Arduino Uno 系ではこの記事の内容は関係有りません)


また、USB Host Shield とMEGA が統合されたボード(Google ADK Board、RT-ADK ボード、Arduino MEGA ADK ボードなど)は、ピンの割当が異なるそうなので、これらのボード用に書かれたサンプルがそのまま動作するわけでは有りません。

(参考)
・Arduino MEGA をRT-ADK 化する試みを Kako.com さんが行なっています。

・Arduino USBシールドとADKボードの違いについて、BRILLIANT SERVICE さんが書かれています。

USB Host Shield と LCD (GPIO 接続)


先日紹介した USB Host Shield Library 2.0 ですが、最新アップデートで Arduino 1.0 IDE に対応しました! 今後はArduino 1.0 IDE でADK 開発を行なう事が出来ます。

今回は以前のバージョンのライブラリを使った記事です。
Arduino IDE は0023 です。

Sparkfun の USB Host Shield は、Arduino のI/O ピン D13,D12,D11,D10, D9, D8, D7 を使っています。
このうち、D8, D7 はハードウェアを修正することで開放できます。(こちらの記事を参照してください。)

キャラクタ LCDモジュールを使用するには、通信モードによりますが、最低でも6pin 必要です。


USB Host Shield と標準 LCD ライブラリを組み合せて使う事に、大きな問題は無いのですが、
Arduino Uno を使った場合、この 2つだけで半分以上のI/Oピンを使用してしまいます。


使用可能なピンを増やすには、Arduino MEGA を使うのが手っ取り早いのですが、Sparkfun のUSB Host Shield は Arduino MEGA に対応していません。この問題の対処方法は次回紹介します。

今回は、USB Host Shield 上にある、GPIO を使って液晶モジュールを動作させる方法を紹介します。
USB Host Shield の開発元サイトである、Circuits@Home の記事を参考にしました。

実は、USB Host Shield のライブラリに、Max_LCD.h というファイルがありますが、これが、Max3421e のGPIO を使ったLCD のライブラリ(のヘッダ)になります。

使い方はほぼ、標準ライブラリの LiquidCrystal.h と同じです。
LiquidCrystal では、初期化時に使用するピン番号を指定しますが、

Max_LCD ではピンが固定なので、
GPOUT 2 > RS
GPOUT 3 > Enable
GPOUT 4 > D4
GPOUT 5 > D5
GPOUT 6 > D6
GPOUT 7 > D7
となっています。

後は LCD モジュールの +5V, GND, コントラスト, R/W(GND 固定) を接続すればOK です。
LCD モジュールについて詳しくは、この記事を参照して下さい。

この記事で紹介した3つのモジュールはこの方法で制御できました。
Max3421e は3.3V で動作しているため、本来は3.3V 用の LCDモジュールが必要です。
今回は信号線がすべて3.3V出し → 5V 受け のため、問題はありません。5V の信号をMax3421e に入力しないよう、注意してください。

USB Host Shield Library 2.0 にも、同様のファイルがあるのですが、まだ上手く動作させる事ができていません。
現時点でこの機能を使う場合は、旧バージョンを使う方が良いでしょう。



2012年1月9日月曜日

ADK Term




前回、USB Host Shield Library 2.0 を導入しましたが、このライブラリを使ってやってみたかったのが、こちらの Android ADK terminal emulator for Arduino です。
ターミナルとシリアルポートのないコンピュータはどこか窮屈に感じる、、、
そんな人に、一筋の光を与えるADK の活用方法です。

まだ完全なものではないようですが、とりあえず、ライブラリに付属のサンプルに
adk > term_test
adk > term_time
があります。

Android 側のソフトは上記ページからリンクされています。
term_test は Android のターミナルから文字列を送信します。



シリアルポートに受信した文字列を出力しています。


term_time はArduino が計測した時間(起動時点からの経過秒)をターミナルに表示します。



どちらも、このまま使えるものではありませんが、これをベースにシリアル入出力をつくることも難しくないと思います。

USB Host Shield Library 2.0


※USB Host Shield Library は現在、新旧ともに、Arduino 1.0 IDE に対応していないため、旧バージョン (Arduino 0023) で行なっています。(※1/11 追記) Library 2.0 が Arduino 1.0 IDE に対応しました。

当サイトでは Sparkfun の USB Host Shield とArduino Uno (R2) を使って、ADK (Android Open Accessory) を構成しています。
手順はこちらで書いた通り、side2.jp さんのサイトに準じています。


今回は、USB Host Shield Library を 2.0 に変更してみました。

USB Host Shield はCircuits@Home のOleg 氏によるプロダクト。
日本で購入が容易な Sparkfun のものは、その互換製品です。
(おそらく、旧バージョンのUSB Host Shield と互換)

Circuits@Home の USB Host Shield は2.0 と言うバージョンになっており、Library も2.0 が最新バージョンです。
このバージョンは ADK のLibrary も統合されています。
しかし、Sparkfun のシールドでは、このバージョンのライブラリでは動作しません。

回路図を追ってみると、、、

どうやら、リセットが変更になっているのが問題らしい。
・旧USB Host Shield と、Sparkfun のシールドでは、D7 pin (Sparkfun の旧バージョンはD8)を使って、Max3421e チップをリセットしている。
・USB Host Shield 2.0では、Arduino 本体のリセット信号を使って、Max3421e チップをリセットしている。

これをハード的に修正(D7 から74HC4050 に伸びるパターンをカットして、RST に接続)。
この修正Sparkfun シールドで、新旧USB Host Shield ライブラリが動作することを確認しました。(写真はSparkfun の旧バージョンなので、以前にD8 <> D7 の入れ替えをやっていました。修正はD7 の方だけでOK です。)

新ライブラリ旧ライブラリは名称が被っているため、共存する事はできない。(旧バージョンはlibraries フォルダから出して、保管しておくことを推奨)
・新ライブラリはADK のライブラリを統合しており、ADK を使うための表記方法が異なる。
(旧ライブラリ用に書かれたADK 対応プログラムのソースは新ライブラリでは動作しない。)

と、新たなトラブルの種を増やしてしまった感がありますが、最新版のライブラリはUSB ハブに対応したり、様々な改良点があります。
私は Oleg 氏のサイトで公開されているサンプルコードを試したいがために、このライブラリを導入しました。
それらも今後、紹介して行きたいと思います。

2012年1月3日火曜日

iPad 2 プロテクター

年末年始、実家で姪っ子(1才)と遊んで来ました。
あの手この手で興味を惹かせようと、兄が年末に購入したばかりの iPad2 もおもちゃに。

iPad より薄く、強度が下がったとも言われるiPad2。子供に渡すには不安が、、、

ピンと来る市販のケースがみつからず、ダイソーのスチレンボード (貼れるボード 5mm) でプロテクターを作ってみました。
450mm x 300mm サイズで105円。半分にして、4枚重ねで使用します。ねじはM5/15mm のプラスチックねじ8本使用。



とりあずこんな感じ。



でもあっという間に壊されちゃいました…


めげずに Ver.2。
ボタン用の穴が強度を下げるので、側面の音量ボタン/ミュートボタンは省略。(ソフトで調整できるので)
材料費が安いので躊躇無く作れます。
(加工もカッターとドライバだけ。ねじ穴もドライバーであけました。)


カメラと電源ボタン、Dock コネクタ用の穴は重要。
厚みがあるため、カメラ穴をそれなりに大きくとらないと、写真に映り込みます。
電源ボタンはVer 1では側面に穴をあけましたが、非常に押しにくいので、裏面から押すように変更。カメラ穴と共通化。





iPad のプラスチック部とケースの素材(スチロール)が融着したりしないか、そもそも強度は足りてるのか、いろいろ不安ですが、しばらく様子見です。



ダイソーにA4 サイズのフリーカット液晶保護シートがあるので、これも使いました。


材料費だけなら 約600円くらいです。寸法を測ったり、検討しながらつくるので、製作は半日がかり。


市販品で、個人的に良さそうだとおもったのはコレでしたが、
iPad 2 iGuy
紹介記事→ AppBank

「こんなの手つかんで投げるよ」と。

iPhone 4 だとコレが良さげです。
ARK Hippo for iPhone 4
紹介記事→AppBank


この手のケースが市販されないのは『大丈夫です』と責任をとれないからでしょうね。

このケースも気休めです。

だって直接上に載っちゃうんですよ? 今は8kgぐらい。ジャンプしたらアウトかな、、、

象が踏んでも壊れない(アーム筆入れ)のサンスター文具さん、丈夫なケース作ってくれないでしょうか?


万が一欲しい方がいましたら、こちらに寸法図を公開するので、ご自分でつくってみてください。

このボードは貼れるタイプなので、1と2、3と4 を貼り合わせて作りました。ネジ頭とナットは1、4 の面に埋め込んでいます。
半分くらいを両面テープで固定して、ネジの数を減らすと良いかも。

厚さは 1mm 程 余裕があるはずなので、詰め物が必要かなと思いましたが、そのままで問題なさそうです。

(1/4 追記) ケース作る際、iPad 自体の寸法は自分で測ったのですが、、、Apple がケース製作者向け寸法図を公開してました。