Logicool LPST-14900のD-SubをArduinoProMicroを使いUSB接続できるようにする 1

はじめに

1年ほど前、ETS2を遊びたくて、コストコで5万ぐらいするハンコンセット(T300RS)を買った。ハンコンにはシフトレバーがついていなかったが、ハンドルの左右についている羽のようなグリッパーをシフターとして割り当てて遊んでいた。

T300RS – | Thrustmaster
Thrustmaster

Euro Truck Simulator 2
Euro Truck Simulator 2

マニュアル車は免許を取得してからは一度も乗ったことはなかったが、運転している感が好きで、それをゲームでも体感できればと思っていた。だが、シフトレバーが無いことにより、ほぼ飾りと化したクラッチと、実機とは大きく異なるギア操作で、自分が求めていたユーザー体験は大きく損なわれてしまった。

そこで最近、AmazonにてLogicoolが出しているLPST-14900なるシフターを購入してみた。わくわくしながらいざ開封してみると、なんと接続端子がD-Sub(9P)ではないか…!ネットを見ると、D-Sub to USBのコネクタを購入することで問題を解消している方が多く見受けられたが、そのコネクタがお値段4,500円。トータル5万以上の買い物をしておいて何をいまさらと思われるかもしれないが、自分の天邪鬼精神に火をつけた。

Amazonの商品紹介ページ 接続技術の欄にはUSBと書かれていたのに…。
Amazonの商品紹介ページ
接続技術の欄にはUSBと書かれていたのに…。

このような由々しき事態に対応するため、本記事では「ゲームをやればいいじゃない(steam4.com)」様の記事を参考に、手元にあったArduinoProMicro(5V 16MHz)を使って、D-Sub to USBのブリッジャーを作成する方法を記述する。

材料

  • SparkFunが出してるArduinoProMicro(5V 16MHz)
  • ジャンパーワイヤー
  • シフター(LPST-14900)
  • (Optional) ProMicroに履かす下駄
  • (Optional) Arduino接続用のUSB micro-Bケーブル
  • (Optional) ブレッドボード
今回の材料 ProMicroを使うのは贅沢だったかも
今回の材料
ProMicroを使うのは贅沢だったかも

今回の材料は全て自作キーボードの余り物で、Δ初期費用は0円だった。

準備

(Optional)ArduinoIDEのインストールとProMicroの動作確認

Arduino公式サイトからIDEをDLし、セットアップする。IDEが起動すると、USBのドライバ関連をインストールするか問われるので、素直に入れる。

PCとArduinoを接続し、IDEの Tools > Port から、接続しているUSBポート番号を選択する。今回はCOM3だったのでこれを選択。

接続ポート選択画面
接続ポート選択画面

Tools > Get Board Info からボード情報を取得できるようなので押下してみると、ボードは認識されているが、IDEのプリセットにはProMicroが登録されていないようだ。

BN(Board Name?)がUnknownとなっている
BN(Board Name?)がUnknownとなっている

調べてみると、Sparkfun公式からボードファイルなるものが配布されているらしい。ありがたい。

GitHub – sparkfun/Arduino_Boards: Board definitions for SparkFun-manufactured AVR, ARM, and ESP-based Arduino boards.
GitHub

インストール手順に従い、File > Preferences > Settings > Additional Boards Manager URLs へ以下のリンクを張り付け、OKを押下する。
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/main/IDE_Board_Manager/package_sparkfun_index.json

Tools > Boards > Boards Manager でボードマネージャーが展開されるので、Boards Managerのテキストボックスへ「sparkfun」と入力し、SparkFun AVR Boards by SparkFun Electronicsを探す。特殊な状況を除き、バージョンは最新のものを選択すれば問題ないだろう。INSTALLを押下するとインストールが開始される。

ボードの追加画面
ボードの追加画面

正常にインストールされると、Tools > Boards に「SparkFun AVR Boards」が追加されているはずだ。今回接続しているボードはProMicroなので、SparkFun AVR Boards > SparkFun Pro Micro を選択する。

ボードマネージャーから追加したSparkFunのボードらが選択可能になっている状態
ボードマネージャーから追加したSparkFunのボードらが選択可能になっている状態

Tools > Processor から、今回使用している「ATmega32U4(5V 16 MHz)」を選択し、Reload Board Data してからGet Board Info したが、Unknownのままだった。ボードデータは追加したプリセットから読んでいると思ったが、接続しているボードから呼び出しているのだろうか?きちんと接続されているか不安なので、ボードにデフォルトで配置されているLEDを点滅できるか確かめてみる。

cpp
1/*2  https://cdn.sparkfun.com/assets/f/d/8/0/d/ProMicro16MHzv2.pdf3*/45#define TX_LED 306#define RX_LED 1778void setup() {9  pinMode(TX_LED, OUTPUT);10  pinMode(RX_LED, OUTPUT);11}1213void loop() {14  digitalWrite(TX_LED, LOW);  // turn the TX LED on15  delay(1000);16  digitalWrite(TX_LED, HIGH); // turn the TX LED off17  digitalWrite(RX_LED, LOW);  // turn the RX LED on18  delay(1000);19  digitalWrite(RX_LED, HIGH); // turn the RX LED off20  delay(1000);21}

上記のコードを張り付け、Uploadでボードに書き込む。書き込み完了後、ボードを見ると、図のRX LEDとTX LEDが交互に点滅していることが確認できた。接続に問題は無いようだ。

参考:https://cdn.sparkfun.com/assets/f/d/8/0/d/ProMicro16MHzv2.pdf
参考:https://cdn.sparkfun.com/assets/f/d/8/0/d/ProMicro16MHzv2.pdf

スケッチを書き込んだ際に出力される文字列が赤文字なため、一瞬エラーが出てしまったと思った。なんと紛らわしい…。せめて緑色とかにしてくれ。

シフコン操作用のスケッチを適用

一次ソースのYouTube動画概要欄に記述のあるGitHubへアクセスし、スケッチをデバッグしてみる。
メインコード: https://github.com/AM-STUDIO/LOGITECH_USB_ADAPTER
ライブラリ: https://github.com/MHeironimus/ArduinoJoystickLibrary

ライブラリはzipで落とし、Sketch > Include Library > Add .ZIP Library… から選択、ロードを行う。

zipで落としたライブラリをIDEにインクルード
zipで落としたライブラリをIDEにインクルード

メインコードをIDEに張り付け、コンパイル(Verify)とArduinoへの書き込み(Upload)が成功した。一通り準備は整ったので、次は配線だ。

(今さらだが、今回利用するジョイスティックライブラリは、ATmega32U4ベースのサポートを行っているため、本ボードで問題なく動作する。他バージョンやナンバリングのマイコンを搭載したArduinoでは動作しない可能性があるので注意が必要だ。)

配線

褒められた方法ではないが、ブレッドボードに下駄を差した状態ではんだ付けをすると便利

熱でブレッドボードが変形する可能性があるが、利便性の前では無視できるのだ
熱でブレッドボードが変形する可能性があるが、利便性の前では無視できるのだ

元ネタではArduino LEONARDを使ったスケッチになっているが、利用するピンが少ないこともあり、そのまま流用できる。接続は以下の通りだ。

色付きの番号が各D-Subのピンに対応している
色付きの番号が各D-Subのピンに対応している

D-SubとArduinoの接続対応表

D-Sub Arduino
1 not use
2 D2
3 5V
4 A0
5 not use
6 GND
7 5V
8 A2
9 not use
実機の様子 ジャンパがゆるゆるで、手で押さえていないと抜けてしまうズボラ仕様
実機の様子
ジャンパがゆるゆるで、手で押さえていないと抜けてしまうズボラ仕様

動作確認

呪文

動作確認を行うのに「デバイスとプリンター」項目を開く必要があるそうだが、見つからない…。偉大なるネットの先人達に聞いたところ、どうやら項目を実装しているDeviceCenter.dllに割り当てられたGUIDを呼び出すことで、一発で到達できるようだ!

Windows 11でコントロールパネル「デバイスとプリンター」を簡単に表示するには
日記というほどでも

早速、Win+Rでコマンドパレットを開き、以下の呪文を唱える。
shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}

こうでもしないとたどり着けなかったのは何で…?
こうでもしないとたどり着けなかったのは何で…?

おぉ、なんということだ。一発で「デバイスとプリンター」に到達してしまったではないか。今日一番の感動である。

呪文により突如出現した「デバイスとプリンター」 (使用中の周辺デバイス名を晒すのはセキュリティ上よろしくないぞ!)
呪文により突如出現した「デバイスとプリンター」
(使用中の周辺デバイス名を晒すのはセキュリティ上よろしくないぞ!)

コントローラテスターでの確認

デバイス一覧に「SparkFun Pro Micro」が存在していれば、これを右クリックし、ゲームコントローラーの設定 > プロパティ にて、テスターが出現するはずだ。

こんな機能初めて見た
こんな機能初めて見た

接続を確認し、シフターをぐりぐり動かしてみる。

挙動が変だが動いた!
挙動が変だが動いた!

挙動が若干怪しいが、問題なく動作することが確認できた。
本記事が、少しでも参考になれば幸いである。

課題点

実際に動作確認をしてみて、いくつかの改善点があった。

  1. ジャンパワイヤーがスカスカですぐ抜けるし、配線がむき出しで格好悪い

  2. メインコードの閾値が微妙で、特にギアを3, 4に入れたときおかしくなる

  3. ギアをRに入れる場合、スティックを押し込んでからRに入力する必要があるのだが、押し込んだ瞬間にR判定となってしまう

これらの改善点は次回の投稿に持ち越そうと思う。

備考

今回SparkFunProMaxの配線を描画するのに、Wokwi.comというサービスを利用した。初期プリセットでは該当するモデルが無かったため自作してみた。参考程度にフォークしたブランチを置いておく

feat: Add SparkFunProMicro(5V 16MHz) by TANUKIpro · Pull Request #1 · TANUKIpro/wokwi-boards
GitHub