ArduinoとRetroSpyを使って実機でコントローラー入力表示を使う
概要
この記事は、2020年秋に開催された「きゃすけっと」というオンラインの創作イベントにて展示した内容をnote記事化したものです。情報は当時のものとなります。
ゲーム配信などで用いられるコントローラーの入力表示は通常、パソコンで遊ぶゲームにおいて、パソコンに接続したコントローラーを表示するためのソフトウェアを起動して行います。当然ですがゲーム機で同じことをしたくても、コントローラーはパソコンではなくゲーム機に接続するため、パソコン側でコントローラーの入力信号をキャッチする方法がなく、入力表示ができません。
この問題を解決するために、実機のゲーム機を使いながらも、パソコン上でコントローラーの入力表示ができるようにする方法について記載したものがこの記事となります。
Arduino:PCにUSB接続ができるマイコンボード。2.54mmのピン型入力端子があり、入力信号をプログラミングで処理ができる。
RetroSpy:Arduinoと連携して、コントローラーの入力信号をキャッチして表示するソフトウェア。実機でコントローラー入力表示が可能。
とりあえず実際に配信してやってみました。Twitch配信録画です。
今回の構想
1つのコントローラーのみでRetroSpyを使う場合は、「RetroSpy」で検索して出てくる既存記事で十分に対応可能です。しかし、接続箇所がテープ固定であることや、2つ以上のコントローラーを使いたい場合は差し替える必要があります。これら物理的接続をスマートに解決したいと思い、調べたところブレッドボードを使用すると出来そうなことが分かりました。最低限必須のものから、いくつか追加で道具や工具を揃えることで、ブレッドボードを用いたArduino+RetroSpyの接続をしました。
準備するもの
必須
・Arduino本体(Arduino Uno R3):秋月電子で購入(確か¥3,300)、電源とUSBケーブルは付属しません、互換性のある安いやつでもいいけど動くかは不明
・コントローラー用延長コード:Amazonに各種売ってます、ノーブランド品なので同じものでもピン番号と内部ケーブル色の対応が違う場合があるので注意
購入した延長コードは【ニューファミコン】【スーパーファミコン】【ゲームキューブ】【プレイステーション1&2】のものです。
・ジャンパーワイヤー(オス-オス):秋月電子で購入(¥220)、各色/各種長さが計60本程度、繋がれば何でも良いと思います
・ニッパー:切断したりケーブル被覆をむいたり
今回の構想を実現するために追加
・Arduino用アクリルベースセット:秋月電子で購入(¥750)、ブレッドボード付き
・2.54mmのコネクタとピンのセット:Amazonで購入(¥879)
・ワイヤーストリッパー(ベッセル:3500E-2):Amazonで購入(¥1.418)、ニッパーでもいけるけど芯線はケーブルが細いので
・精密圧着ペンチ(エンジニア:PA-21):Amazonで購入(¥3,818)、ピンを圧着するのに必須
・ケーブルストリッパー(日本製線:NSWST-M):仕事の関係で持ってたやつを流用、本来はLANケーブルの被覆むき用、コントローラー用延長コードと太さが似てるので、あれば便利だけど別になくてもニッパーでいい
・テスター(KYORITSU:KEWMATE 2012R):仕事の関係で持ってたやつを流用、抵抗値とか導通が計測できれば何でも良いと思います
準備したもの写真
作業結果
作業の過程は配信のほうをご覧ください。
課題
課題その1
コントローラーと本体が2つ以上接続されていると、電気信号が混ざってしまう関係か、コントローラーが動作しない。使わないコントローラーの本体側の接続は外して、使いたいコントローラーの本体側のみ接続する必要がある。リスナーさんによると、同時に接続していても大丈夫なようにするには、ダイオートやFET(電界効果トランジスタ)を入れれば良いのでは、との事。ダイオートやFETは、電流を一つの方向にしか流さないようにする回路部品で、逆方向には流れないようにすることができる。電子回路とかに出てくる基本的な部品ですね、工業高校の時に習いましたが、もう忘れました。
課題その2
コントローラーを切り替える場合は、以下いずれかの手順が必要。
・【PC側操作】Arduinoで書き込むRetroSpyのコードで、コントローラーの#defineに対するコメントを設定/解除してから書き込み直す
または
・【物理操作】#define MODE_DETECT のコメントアウトを外して、setupとloopの条件式をコントローラーに合わせて整理、config_arduino.hにあるアナログピンの設定をする
これをもう少し綺麗に解決するなら、物理スイッチを付けてスイッチの入力に応じて、Arduinoのアナログピンへの接続を切り替えてあげれば良いかな。
参考資料
当時参考にしたサイト等ですが、この記事に書き写した時点で残念ながらなくなっているリンクが多くありました。なくなっていたものは、過去のサイトをクロールして保存しているWeb Archiveというサイトで探して見つかったものは貼り換えていますが、完全でない可能性もあるので、これ以上の情報はお手数ですが各自検索してください。
電子回路 Arduinoの基礎知識:基礎情報、Arduinoとブレッドボード
※リンク切れのためWeb Archiveにて代替
コントローラー入力表示 RetroSpy(input display)導入方法:【超重要】ソフト操作方法含めて一から作成するなら必見
※リンク切れのためWeb Archiveにて代替
RetroSpy配置:【超重要】Arduinoのピン入力端子に、コントローラーのどのピンを接続すればよいかの一覧表
RetroSpyを用いたPS1/PS2での入力表示解説:作り方参考
PlayStation1用input displayを作成したありちゃんの短いおはなし:作り方参考
※リンク切れのためWeb Archiveにて代替
おわりに
以上となります。途中経過を省略しているので、電子工作部分やプログラミング部分などの、細かな作り方は載せておりませんが、配信で一から作ってはいるので、ある程度参考になるかなと思います。本気で作りたいという意欲がある方は、相応のサポートはしますのでTwitterやDiscordのDMなどでご相談ください。
Twitter:discordjinro Discord:アジーン#7555