2012年1月16日月曜日

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 がケース製作者向け寸法図を公開してました。

2011年12月19日月曜日

USB Newton Keyboard 詳細篇


USB Newton Keyboard にコメントがあったので、詳細篇です。
まさか需要があるとは、、、

前回の記事はブレッドボードに組んでいましたが、その後ユニバーサル基板に組みました。
(MOSA Software Meeting 2011 の懇親会で紹介したときのバージョンです。)

[ハードウェア]


ハードウェアは単純にRS422 とArduino のUART とのレベル変換です。
NewtonKeyboard と、レベル変換IC (LTC485) に電源が必要ですが、
この回路では D7 ピンをHIGH、D6 ピンをLOW にして、電源としています。

・D5 ピンにLED をつけると、CapsLock の状態によって点灯します。
・LED の種類は任意です。電流制限用の抵抗を直列にいれます。
(計算方法が分からない場合は 470Ω〜1kΩ 程度をつけてください。)
・104 は念のためつけたパスコン(セラミックコンデンサ 0.01uF) です。
 無くても動作すると思います。
・コネクタはキーボード側のプラグを正面からみた図です。

[ソフトウェア]

まず、こちらのプログラムを通常のArduino のプログラムとして書き込みます。

プログラムの動作はNewton Keyboard が出力するシリアルキーコードを、USB HID Keyboard のファームウェアに合わせて変換し、シリアルポートから出力しています。

次に、Arduino Uno のUSB シリアル変換部のチップ(Atmega8u2) に、DFUプログラミングで USB HID Keyboard のFirmware を書き込みます。
 →こちらの記事を参照して下さい。

Arduino のプログラムを書き換える場合は、再度DFU プログラミングで USB シリアル変換 のFirmware に戻します。


もしかして、他にも欲しい方いらっしゃいますか?


たこ足シールド

コネタ中のコネタですが、、、
お気に入りなので、自作シールドとして、胸を張って公開したいと思います。

「たこ足シールド」はArduino のシールドに挿んで使うシールドです。
試作中、後からピンを追加したくなったときに使います。


基板は秋月電子のAE-ATMEGA
連結ソケット(8p, 6p) と通常のソケット(8p, 6p) をL字につけただけのものです。計390円。
基板は要らないんじゃ、、、とおっしゃるかと思いますが、
「無くさない」という大きなメリットがあります。



調度いい感じにブレッドボードを収める事ができるので、
このまま使っても良いでしょう。


合わせ技で、このような使い方も。
省スペースで作業をする事ができます。
出先でのデモなどに活躍します。


(12/25追記) ちょろちょろと過電流の警告(Mac のUSB ポートは過電流時、保護機能が働きます)がでるとおもったら、USB コネクタのハウジングで+5V とGND がショートしてました、、、気をつけましょう、、、