Switch版 『電車でGO! はしろう山手線』用ワンハンドルマスコンを作る
2021年3月18日、Nintendo Switch向けの『電車でGO!! -はしろう山手線-』が発売されました。
今作では山手線のE235系・E231系500番台・205系や、隣接する埼京線や総武線などを運転体験することができます。
しかし、今作の電車でGO!! は、予約時点で既に「公式専用コントローラの発売予定はなし」と公式ホームページ に記載されていたため…出ないなら作ってしまえ!ということで制作を試みました。
用意したもの
- Nintendo Switch + ドック
- 電車でGO!! はしろう山手線
- 電車でGO!コントローラ ワンハンドルタイプ for PlayStation (TCPP-20001)
- Arduino Micro (ATmega32u4搭載機なら可)
- 220μF 電解コンデンサ ×2
- 10kΩ抵抗 ×2
- AQM1602Y I2C液晶モジュール
- 1kΩ抵抗 ×1
- 配線材、ユニバーサル基板、スイッチ等
制作過程
ベースとなるマスコンは、PlayStation用の電車でGOワンハンドルマスコンを選択。
ヤフオク!にてコントローラ本体のみの出品があったので、なんとか落札しました。送料込みで¥3000ちょっと。
特にトラブルもなく、無事に到着。
多少外装に使用感はあるものの、大きなキズや破損等はありませんでした。
さて、このPlayStation用コントローラの入力を読み取る方法ですが、2種類のパターンが考えられました。
- PlayStationコントローラ用のアダプタや対応ライブラリを用いて読み取る
- 分解して、接点等をArduinoなどに繋いで読み取る
最初は①の破壊しないで済む方法も検討したのですが、私自身がPlayStationを持っていないのでPlayStationとの接続機能を失っても問題がなかったこと、Switch対応のためにはボタンの追加が必要だと考えられたことなどから、自由度の高い②の方法を選択しました。
制御には、ATmega32u4搭載のボードである、Arduino Microを選択。
Arduino Uno等と違い、32u4搭載のLeonardoやMicroはUSB-HIDデバイスとして振る舞えるため、Switchに接続しUSBジョイスティックコントローラとして認識させることを目標としました。
必要なパーツを発注したところで、まずはマスコンを分解。
内部の基板は「マスコンハンドル部」と「ボタン類・PS接続部」の2つに分かれていました。
また、内部の空きスペースが多いので、Arduinoやその他パーツを仕込む余裕もありそう。
特に肝心なマスコンハンドル部ですが、抵抗で分圧されているだけの簡単なアナログ回路であることが判明。
赤・黄・白・黒の4線で接続されており、黒をGND、赤を適当VCCに接続すると、黄・白それぞれがブレーキ側と力行側のハンドル位置に応じて電圧を出力してくれました。
Arduinoはアナログ入力を読み取ることが出来るので、このハンドル部の配線をArduinoへつなぎ替えることで無事にハンドル位置の読み取りに成功。
なお、各ハンドル位置の間には微妙に無接点な場所があり、そのままだとハンドル操作中に0位置、すなわち「N」として認識してしまう場合があったため、電解コンデンサで簡単に平滑回路を挟んで接続し、さらにArduinoのプログラム側でもバッファを組むことで回避しています。
また、このコントローラにはA・B・C・SELECT・STARTのボタンが配置されていますが、これらも基板上に接点が出ていました。特にA~Cボタンは基板上のジャンパJP6~8を抜くと片側がそのまま接点として使えました。
それぞれのボタンは押すとGNDに短絡するようになっていたため、Arduino内部のプルアップ抵抗を用いることで、この接点をそのままArduinoにつないでいます。
なお、Nintendo Switchでは右側の操作ボタンとして A・B・X・Yの4つ、左側に十字キーが最低限操作に必要であることが想定されました。(SELECT・STARTはHOME・プラスに割当)
そのため、A・B・CをそれぞれA・B・Yに割当、X相当のボタンと十字キーは別途押しボタンスイッチを用いて自作し、取り付けを行っています。
マスコン側のハードウェア面での解析は概ね終了したため、適当にArduinoとつなぐ回路を設計。
基本的にはマスコン部をアナログ入力に接続、あとは各種入力ボタンをそのままArduinoのデジタル入力ピンに接続しています。
その他、ハンドルの認識位置の確認用にI2C接続の小型ディスプレイを追加したり、PC接続用のモード切替スイッチを追加したり、警笛ボタンであるSwitchのAボタン(PSコントローラではCボタンの位置)にペダル接続用のジャックを追加したりしています。
実際のNintendo Switchへの接続は、Arduino向けライブラリ「SwitchControlLibrary v2.0.0」を使用させていただきました。
スケッチ書き込み時に、Arduino MicroのPID/VIDを書き変えることで、Switch側に対応するコントローラ(ポッ拳コントローラ)として認識させ、各種キー操作を行っています。
今作の電車でGO!では、設定から操作モードを「スタンダード & ダイレクト」にすることで、Lスティックの上下位置でハンドル位置を指定することができるため、この設定を前提にArduinoで読み取ったマスコンのハンドル位置をLスティックの上下位置にマッピングするコードを書いています。
目標通り、無事にSwitch版 電車でGO!! はしろう山手線でワンハンドルマスコンを用いてプレイをすることができました。やはりシミュレーター系のゲームは専用コントローラがあると没入感もUPしてとても良いです…。
なお、発売日の3月18日に 株式会社瑞起 さんが専用マスコンを開発中と報道されました…どうなることやら…
P.S. Arduinoスケッチは需要がありそうならいずれ公開する…かも…?