USB ホストシールド

Arduino を USB ホストにするシールドです (購入時価格: ¥950)。UNOLEONARDOMEGA 2560 で使う事が出来ます。ADK?知らない子ですね。

USB キーボードとか USB マウスとか USB ジョイスティックを接続して読み取ったり、Bluetooth ドングルを取り付けて Wii コントローラや PS3 / PS4 コントローラの状態を読み取ることができます。このシールドの主な使い方はリモコンです。



購入

Amazon で買えます (購入時価格: ¥950)。



各部詳細

とりあえずピン (足) が長すぎるので 5mm 程すべてカットしましょう。このシールドは SPI 接続なので、ICSP 端子 (6P) がちゃんと刺さっていないと正しく動作しません。何で ICSP 端子を使ってるかと言うと、LEONARDOMEGA2560 で使えるようにするためです。

信号 ピン
SCK ICSP 3
MISO ICSP 1
MOSI ICSP 4
SS D10
INT D9

そしてこの製品にはハンダブリッジしないと動かないというとんでもない罠があるのです。

5V で使う場合

3.3V で使う場合

製品によっては最初からハンダブリッジされているようですが...。

See Also:

ライブラリ

[スケッチ | ライブラリをインクルード | ライブラリを管理...] から USB Host Shield Library 2.0 をインストールします。

動作確認は USB 有線デバイスで行った方が無難です。手持ちの機器に合わせて [ファイル | スケッチ例 | USB Host Shield Library 2.0 | HID] からスケッチを選びましょう。



Bluetooth ドングル

割と鬼門です。Bluetooth ドングルは相性がキツいです。確実に動作すると思われるドングルの多くは海外製...つまり技適を通っていません。

私の手持ちの PLANEX BT-Micro4 は Playstation 3 コントローラと接続できました。PLANEX BT-MicroEDR2X ではダメでした。

以下、動作テストの手順です。

  1. USB Host Shield Library 2.0 のインストールフォルダへ移動
  2. その中にある settings.h をテキストエディタで開く
  3. ENABLE_UHS_DEBUGGING の値を 1 に変更する。
    ////////////////////////////////////////////////////////////////////////////////
    // DEBUGGING
    ////////////////////////////////////////////////////////////////////////////////
    
    /* Set this to 1 to activate serial debugging */
    #define ENABLE_UHS_DEBUGGING 1
  4. Bluetooth ドングルを USB ホストシールドに挿し、Arduino と合体させておく。
  5. [ファイル | スケッチ例 | USB Host Shield Library 2.0 | Bluetooth | PS3BT] を開く。
  6. そのままコンパイルして Arduino へ転送する。
  7. 念のためにリセットボタンを押して Arduino を再起動する。
  8. シリアルモニタを開く (115200 bps)。
  9. xx:xx:xx:xx:xx:xx の部分に表示されている Bluetooth Address を控えておく。もし、OSC did not start と表示されたら、ジャンパーをブリッジしていないか、対応していない Bluetooth ドングルだと思われる。
    PS3 Bluetooth Library Started
    Bluetooth Dongle Initialized
    No response to HCI Reset
    HCI Reset complete
    Write class of device
    Local Bluetooth Address: xx:xx:xx:xx:xx:xx
    Wait For Incoming Connection Request
  10. スケッチを書き換える。PS3BT の上の行をコメントアウトで止めて、下の行をアンコメントし、6 つの 16進値を先程控えておいた Bluetooth Address で書き換える
    /* You can create the instance of the class in two ways */
    //PS3BT PS3(&Btd); // This will just create the instance <- この行をコメントアウト
    PS3BT PS3(&Btd, 0x000x150x830x3D0x0A0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch <- この行をアンコメントして編集
  11. 再度コンパイルして Arduino へ転送する。
  12. 念のためにリセットボタンを押して Arduino を再起動する。
  13. シリアルモニタを開く (115200 bps)。
  14. PS3 コントローラの [PS] ボタンを押すとペアリングされる。

Arduino でリモコンを作るのが捗りますね (^^;A

See Also:

GPIO

ピンソケットかピンヘッダを立てれば、入力 8 本、出力 8 本の GPIO が Arduino 本体のものとは別に使えます...但し 3.3V 専用です。5V の Arduino で動作させていても、この GPIO は 3.3V 動作なので間違わないように。

ライブラリは以下のものを別途インストールします。

GPOUT の 1~8 いずれかに LED を接続し、[ファイル | スケッチ例 | USB_Host_Shield_GPIO] にある TEST_Max_GPIO をコンパイルして転送すると L チカできます。

GPIO を使って LCD 接続

GPIO に 1602 LCD を接続して文字表示する事ができます。Arduino のピンを消費しなくて済むのは有難いです。

接続方法はスケッチのコメントに書いてあるのですが、こんな感じです。

GPOUT 1602 LCD Arduino
VSS 3.3V LCD なら 3.3V、5V LCD なら 5V
VDD GND
2 RS
RW GND
3 E
4 D4
5 D5
6 D6
7 D7
A 3.3V LCD なら 3.3V、5V LCD なら 5V
K GND

...なんですが、USB Host Library v2.0 付属の max_LCD ([ファイル | スケッチ例| USB Host Shield Library 2.0 | max_LCD]) はそのままでは正しく動作しません。Usb オブジェクトを初期化しないと動作しないようです。

// Just a copy of the HelloWorld example bundled with the LiquidCrystal library in the Arduino IDE

// HD44780 compatible LCD display via MAX3421E GPOUT support header
// pinout: D[4-7] -> GPOUT[4-7], RS-> GPOUT[2], E ->GPOUT[3]

#include <max_LCD.h>

// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif

USB Usb;
Max_LCD lcd(&Usb);

void setup() {
  Usb.Init(); // <- これを追加
  // Set up the LCD's number of columns and rows:
  lcd.begin(162);
  // Print a message to the LCD.
  lcd.print("Hello, World!");
}

void loop() {
  // Set the cursor to column 0, line 1 (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(01);
  // Print the number of seconds since reset:
  lcd.print(millis() / 1000);
}

ちなみに USB Host Shield Library v1.0 だとこんなスケッチで動作します。一見関係なさそうな Usb.h をインクルードし、Usb オブジェクトを用意しないと動作しません...インクルードしなくてもコンパイルエラーにはならないのに。

// Just a copy of the HelloWorld example bundled with the LiquidCrystal library in the Arduino IDE

// HD44780 compatible LCD display via MAX3421E GPOUT support header
// pinout: D[4-7] -> GPOUT[4-7], RS-> GPOUT[2], E ->GPOUT[3]

#include <Max_LCD.h>
#include <Usb.h>

USB Usb;
Max_LCD lcd;

void setup() {
  // Set up the LCD's number of columns and rows:
  lcd.begin(162);
  // Print a message to the LCD.
  lcd.print("Hello, World!");
}

void loop() {
  // Set the cursor to column 0, line 1 (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(01);
  // Print the number of seconds since reset:
  lcd.print(millis() / 1000);
}

まぁ、動いたのでよしとしましょう。Max_LCD クラスは Arduino 標準の LiquidCrystal クラスと互換性があります。但し、ピンアサインを変更する事はできません。

See Also:

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

メニュー: