ミニ USB ホストシールド

Arduino を USB ホストにする Pro Mini 専用のシールドです (購入時価格: ¥850)。シールドとしては Pro Mini 専用ですが、ブレッドボードに挿して使えば他のボードからも使えます。

ピンヘッダやピンソケットは付属していませんので、別途調達する必要があります。

今回は普通のピンヘッダを使います。

問題点の整理

このボード、通常サイズの USB ホストシールドと違ってちょっと困ったちゃんなのです。まずは問題点を挙げてみましょう。

ちょっと面倒ですね。

Pro Mini と ミニ USB ホストシールドをどのように接続するのか?

ミニ USB ホストシールドには、USB ホストシールド同様、GPIO が出ています。


これを活かすにはミニ USB ホストシールドが上の方が都合がいいので Pro Mini は下となります。ミニ USB ホストシールドには下の画像のような感じでピンヘッダとピンソケットを取り付けておきます。上部のピンヘッダとピンソケットを先に取り付けないと、下部ピンヘッダのハンダ付けが困難になりますので注意。


Pro Mini に普通のピンソケットを立て、上にミニ USB ホストシールドを乗せるとブレッドボードに挿せないし、合体時に Pro Mini の信号を引き出せないので秋月の長いピンソケットを使います。


合体させるとこうなります。これならミニ USB ホストシールドの機能を余すところなく使えますし、ブレッドボードに挿して Arduino の GPIO を使う事もできます。


単体でブレッドボードに挿して他のボードから使う事もできますね。

Pro Mini は 3.3V 駆動でなくてはならない

このシールドを使うには 3.3V 版Pro Mini が必要です。5V 版を 3.3V で動作させても動くかもしれませんが、(定格でない) 16MHz 動作になるのでやめておいた方がいいでしょう。

Pro Mini の FTDI ヘッダの VCC に 5V をかけてはいけない

Pro Mini の記事中の 3.3V 版での注意点 を参照してください。FTDI ヘッダに 5V をかけるとミニ USB ホストシールドに 5V が流れてしまいます。

ミニ USB ホストシールドの USB コネクタには 3.3V しか供給されない

これが最大の問題です。USB ホスト機器は VBUS 5V (4.75~5.25 V) で動作するのですが、ミニ USB ホストシールドの VBUS には 3.3V しか供給されません。このため、動作しない USB 機器が出てきます

オリジナルでの解決方法は、

  1. VBUS ジャンパをパターンカットする (下の画像のオレンジ色の箇所)
  2. RAW <-> VBUS 間にジャンパを飛ばす
  3. RAW に 5V を供給する

つまり、このシールドをマトモに動作させるには (内部的に) 5V / 3.3V の二つの電源が必要になるという事です。

オリジナルと異なり、ミニ USB ホストシールドの互換ボードには VBUS ジャンパがないので、パターンカットするしかありません...まぁどちらもパターンカットですけどね。

ボードサイズの都合上、レギュレータやレベル変換が載せられなかったからだろうとは思いますが 3.3V 動作を要求しておきながら 5V が必要という。

...そういう事なので、上記改造を施した上で、整流化された 5V を RAW から供給すればコンパクトに使えそうです。

最終的には

最終的にはこうなりました。5V を別電源で取る方法と、USB<->シリアルモジュールから取る方法です。

テストの方法など、ソフトウェアに関する事は通常サイズの USB ホストシールドと全く同じです。Bluetooth な PS3 コントローラももちろん動作しました...Arduino でリモコンを作るのが捗りますね (^^;A

USB ホストシールド Arduino
VBUS 5V
3V3 3.3V
GND GND
RST RST
INT(D9) UsbCore.h で定義されている INT ピン
SS (D10) UsbCore.h で定義されている SS ピン
MOSI (D11) MOSI
MISO (D12) MISO
SCK (D13) SCK

Pro Mini 以外での結線は上記の通りです。シールドの RAW ピンはどこにも繋がっていないので、ここに 5V を供給しても意味はありません。VBUS に直接供給しましょう。

MOSI / MISO / SCK がどのピンに該当するのかは各ボードのピンアウトを調べるなり、以下のスケッチを実行するなりしてください。

void setup() {
  Serial.begin(115200);
  while(!Serial);

  Serial.print("SCK : "); Serial.println(SCK );
  Serial.print("MISO: "); Serial.println(MISO);
  Serial.print("MOSI: "); Serial.println(MOSI);                       
  Serial.print("SS:   "); Serial.println(SS  );                       
}

void loop() {
}

INT / SS は公式 Arduino (Mega ADK 以外) だと D9 / D10 です。

余談

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: