最近、RaspberryPi ZeroとWebIOPiを使ったラジコンタンクを作ってみたのですが、ラズパイはPWMコントロールが苦手で、ラジコンを作るとなると別途サーボコントローラーが必要になるため、どうしても体積がかさんでしまいます。
加えて、OSを使ったシステムとなるため、取り扱いが煩雑になるという欠点もあります。しかも、残念なことにWebIOPiは既に開発が終了しています。
色々な意味で、やっぱりこういうのはArduinoの方がスマートだよなと思ったので、今度は、Arduinoを使ってラジコンを作るにはどうしたらいいのか、調査してみることにしました。
その結果、USBホストシールドを使ってBluetooth USBアダプタをArduinoに接続し、Bluetoothのゲームコントローラーからモーターやサーボモーターをコントロールするというやり方があるのを知り、早速自分もやってみることにしました。
というわけで、今回はArduinoを使ったラジコン制作に欠かせないArduinoとBluetoothゲームコントローラーとの接続までのやり方を備忘録として記事にまとめることにしてみました。
目次
- 必要なパーツの準備
- ミニUSBホストシールド2.0の改造
- Arduino IDEでライブラリを導入する
- まとめ
1. 必要なパーツの準備
まずは必要なものを準備していきます。本来手持ちのArudinoがあればそれでもいいのですが、将来的にプラモデル等に組み込むことを念頭においてシステムを組むため、なるべく体積が小さくなるよう工夫する必要があります。そこで、下記のような構成としてみました。
SparkFun Pro Micro 3.3V/8MHz (32U4搭載)
SparkFun Pro Micro 3.3V/8MHz DEV-12587
Pro Microには5v版と3.3v版の2種類がありますが、ミニUSBホストシールド2.0で使用できるのは3.3v版のみです。amazonで入手できる安い互換品は、ほとんどが5v版ですので注意してください。SparkFunの純正品には3.3v版のものがあります。
ミニUSBホストシールド2.0
GAOHOU ミニUSBホストシールド2.0ADK SLR開発ツール互換SPIインターフェイス
必要な分だけポキポキ切り取って使用できるため、持っていると結構便利なのです。
Bluetooth USBアダプター
プリンストン Bluetooth USB アダプター Ver4.0+EDR/LE(省電力) PTM-UBT7X
Bluetooth USBアダプターは他のものでも代用できると思いますが、当方で動作を確認したのは上記の製品です。
Bluetooth ゲームコントローラー
※上記のリンクはamazonへのリンクとなっています。
実は、専用ライブラリを使ってArduinoに使用できるゲームコントローラーは複数あり、他にもPlayStation3、4用のものなど接続可能ですが、当方で動作確認したのは上記のものとなります。詳しくは後述しますが、この安価な互換コントローラーを使う場合は「Xbox One S」のコントローラーとして接続することになります。
2. ミニUSBホストシールド2.0の改造
この製品はPro Microと同じサイズで、両サイドにピンソケットを装着して使用すると、ちょうど抱き合わせのような形で合体させることができます。双方をコンパクトにまとめられるので、模型に組み込むようなニーズにピッタリなのです。

ただ、このミニUSBホストシールド2.0は回路電圧が3.3Vという仕様で、そのままではUSBアダプターに5vを給電できないという謎仕様の製品で、使うには改造が必要となります。回路電圧が5vだったら、こんな改造は必要ないのに…。
またこの改造には、プリント基板の配線をカッター等で強制的にカットするという乱暴な工程があるので、工作には注意が必要になります。

上の写真のピンクの箇所の配線をカッター等でカットします。確実に断線するようにしてください。また黄色とオレンジのラインは、ジャンパー線などを使って配線します。なお、このバイパスのための配線は基盤の上側にするかのように示してありますが、自分の場合は、基盤の裏側に施しました。
このような改造を施すことで、Pro Microに繋ぐべきピンの位置に合わせることができ、USBアダプターソケットにPro Micro側から直接5vの電圧を給電することも可能になります。

Pro Microとの接続には、秋月電子通商製のメスのピンソケットも使いますが、ミニUSBホストシールド2.0では使用しない箇所のピンの外側にもう一列ピンソケットを瞬間接着剤を使って取り付けて、そちらに配線を迂回させることにしました。こうすることでPro MicroのIOピンを無駄なく使用することができます。
なお、このメスのピンソケットは、必要な箇所で簡単に切り離して使用できるので大変便利でした。また先端のピンはフラットな形状で、内側に簡単に曲げることができ、そこにはんだ付けします。

改造後の基盤裏側の様子です。ジャンパー線を使って回路をこのようにバイパスさせると、Pro Microのピンに合わせることができます。

今度は表側から見た様子。外側のピンソケットを増設することにより余剰となるIOピンを無駄なく使用することができるようになります。

合体させるとこのような形状に。自分の場合はブレッドボードに挿して使用することはひとまず想定していなかったので、このような使い方となりました。
参考URL:
なお、この改造をするにあたり、下記のブログが大変勉強になりました。また、ミニUSBホストシールド2.0の仕様や使い方に関して、さらに詳細を知ることもできますので、是非確認してみてください。
ミニ USB ホストシールド
https://ht-deko.com/arduino/shield_usbhost_mini.html
Pro Microにmini USB Hostシールドを付けてUSBキーボードを接続する
https://okiraku-camera.tokyo/blog/?p=8092
3. Arduino IDEでライブラリを導入する
ハードウェアの準備ができたら、今度はArduino IEDにPro Microを設定して、USBホストシールドのライブラリをインストールします。

メニューバーの「Arduino > Preferences」の順にアクセスすると環境設定を開くことができますが、この「追加のボードマネージャのURL」に下記を追加します。
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
追加したら、今度は「ツール > ボードマネージャ」から「SparkFun AVR Boards」を探してインストールします。

インストール後は上記のようにボードを選択しておきます。なお、プロセッサは必ず「ATmega32U4 (3.3V, 8MHz)」が選ばれているようにします。5V版を選択して書き込むと適切に動作しません。また、シリアルポートは接続先のUSBが選択されているか確認します。
今度は「USB_Host_Shield_2.0」ライブラリをGitHubからダウンロードしてインストールします。
USB_Host_Shield_2.0
https://github.com/felis/USB_Host_Shield_2.0
zipアーカイブとしてダウンロードして解凍した後、通常「書類」フォルダの中に作成さている「Arduino > libraries」の中に「USB_Host_Shield_2.0-master」フォルダを格納しておきます。

この記事を書くにあたり、接続をテストした「FONLAM Switch対応 コントローラー…」は、amazonの商品説明に「Switch対応」とあるものの、ボタンレイアウトがXboxとも類似しており互換性があります。今回、サンプルスケッチの「XBOXONESBT」で問題なく動作することを確認できました。このサンプルスケッチを開くには「ファイル > スケッチ例」を開き、上の画面キャプチャのように辿れば、開くことができます。
サンプルスケッチを開いたら、先ほどのPro Micro+ミニUSBホストシールド2.0+Bluetoothアダプターを取り付けた状態で書き込みを行い、下の画面キャプチャにあるように「ツール > シリアルモニタ」を開いておいてください。
書き込みが完了したら、すぐにゲームコントローラーの右端の「Aボタン」を押しながら、中央の「ホーム」ボタンを左上の細長いLEDが素早く点滅するまで長押しします。その後、数秒で点灯状態になりペアリングが完了するはずです。

ペアリング後は、コントローラーのボタンをあれこれ押してみてください。シリアルモニタに押されているボタン名称が出力されれば接続成功です。
4. まとめ
今回はPro Micro+ミニUSBホストシールド2.0+Bluetoothアダプターという構成で、ゲームコントローラーに接続するまでの方法をまとめてみました。
ミニUSBホストシールド2.0は安価で小さく、Arudinoに様々なUSBデバイスを繋いで活用できる大変便利なボードです。回路電圧の3.3vがそのままUSBに給電されるという謎仕様ではありますが、ちょっとした改造で便利に活用することが可能となります。
Pro Microと抱き合わせのようにコンパクトに構成することで組み込みも一層楽になります。今度は、これにモーターやサーボモーターをあれこれ繋いで動作テストさせてみたいと思っています。