見出し画像

Arduinoでゲームキューブを自動化してみた

2021/07/22追記:
ポケモンコロシアム・XDを操作できなかった問題がnicohood/Nintendoライブラリv1.4.0で改善されたので、既に環境を構築されている方もArduino IDEの「ライブラリを管理」からアップデート・ソースコードの再書き込みをお願いいたします。また、サーボで本体のリセットボタンを押下したり、スティック(Cスティック)を傾ける機能を追加した最新版ファームウェアをgithubにて公開しました。記事中の「ソースコードを書き込む」項を参照してください。

お久しぶりです。ゲーム好きの和菓子ことみずようかん(AT12806379)です。前置きしておきますが私は自動化の有識者ではないです。
さて、SwitchのBluetooth(Windows)による自動化のひと段落した今日この頃、何をしようか考えている時にとある方から依頼が舞い込んできました。
私はさほど昔のゲームに詳しくないのでかいつまんで説明すると

「GBAのソフトを自動化したいからゲームキューブ(ゲームボーイプレーヤー)を操作できる機械作って」

という事でした。
私は今までSwitchの自動化に関する事しか調べてこなかったため、ゲームキューブコントローラーに関する知識はこの時点でゼロです。
ですが、こういったコントローラーは既に解析がなされている物が多く、「HARDMODの勉強になるのでは...」という考えのもと請ける事にしました。
という事で今回の記事は「Arduinoでゲームキューブを自動化してみた」になります。

まずは下調べ

GC自動化の手順はおそらく2つあり、

・Arduino等有線接続
・パチモンウェーブバードによるBluetooth制御

等ができそうだとわかりました。
本来ならBluetoothで便利にしたいところですが、今回はより身近なArduinoによる有線接続を選択します。
理由は多々ありますが...最も大きな理由を述べますと

既にそういうことができるライブラリがあった

これに尽きます。先駆者のライブラリ(リンク)最高!!!!!
このライブラリはArduinoでGC/64コンの入力を読み取ったりそのエミュレートが行えるようです。
Bluetoothのを一から調査するより、こちらを使った方がお互いに良いという結論のもと、ハード制作に取り掛かるのでした。

なんか工作する

ここまで読んでもらってなんですが...残念ながら写真が無いのでわかりづらいかもしれない。
とりあえず必要なものをあげると

(必須)
・GCコン延長ケーブル
・ジャンパワイヤ(オス-メス)
・Arduino(UNOやpromicroなど)
(2022/5/27追記:GC本体に異常をきたさないよう、ロジックレベル変換モジュールを必須として追加)
・ロジックレベル変換モジュール

(あると便利)
・熱収縮チューブ(ケーブル同士の接続部分の補強)
・ヒートガンorはんだごて(↑を収縮させるため)
・ワイヤーストリッパー(延長ケーブルの被覆をはがすため)
・Arduinoケース(ホコリ対策)
・テスター(延長ケーブル内部のDATA線の確認用)

これくらいですね。既にswitchなんかの自動化環境があるなら延長ケーブル以外揃ってる人も居るのではなかろうか。
では軽く手順を説明しますと...

①GCコン延長ケーブルを切り、被覆を剥く

はい。勇気を出して真ん中くらいで切ります。
切って断面を見ると、互換ケーブルでも大抵色がついているはずです。
私のケーブルは赤・白・黄・緑・黒でした。
切った後は、ワイヤーストリッパー等を用いてとりあえず赤と黒のケーブルの銅線を露出させておきます。(理由は②にて)

②テスターでDATA線・GND線を見つける

画像1

これはGC本体側から見たピンアサインです(画像はここから拝借しました)。2番がDATA線、3番がGNDとなっています。
テスターを用いて、どの色の線がどのピンに対応しているか確認しましょう。(とは言いましたが、大抵のGCコン延長ケーブルでは赤がDATA線、黒がGNDです...でも違う可能性もなくはないのでちゃんと確認してね)

③ジャンパワイヤで配線、熱収縮チューブで固定する

ジャンパワイヤ(メス側)に銅線をつなぎます。
(ジャンパワイヤの色はわかりやすいように別々のにしよう)
もしジャンパワイヤに入れるにはゆるすぎる場合ははんだ付けでもOKです。
ジャンパワイヤに繋げたら、熱収縮チューブを接続箇所を覆うようにつけ、温めて収縮・固定します。(ヒートガン買い忘れた私ははんだごてでちょっとずつ縮ませました)

④Arduinoに接続する

(2022/5/27追記:ロジックレベル変換モジュールの記述を追加)
下記のソースをArduinoに書き込んだ場合、DATA線のジャンパワイヤをロジックレベル変換モジュールを介してArduinoのデジタル5ピンに挿しましょう。(ロジックレベル変換モジュールの使いかたは色々なサイトで解説されていますので省略…)
GNDはそのままGNDに繋ぎます。
これでハードウェアの製作は終了です。お疲れさまでした。

ソースコードを書き込む

ソースコードはここに置いておきます。

Git cloneもしくはzipでダウンロードし、解凍したフォルダ内部の.inoファイルをArduino IDEで開いて書き込んでください。(もし.inoファイルが開けない場合は、WHALE.inoファイルがWHALEフォルダの中に入っているかどうか確認してください。)

あ、Arduino IDEのツール→ライブラリを管理からnicohood/Nintendoライブラリをインストールしないとコンパイルできないのであしからず。

画像2
画像3

「Nintendo」で検索すると真ん中に出てくるよ!

実際に動かしてみる

プログラムを書き込むと、Arduinoはシリアルポートとして認識されているはずです。
Arduino IDEのシリアルモニタで開いてコマンドを送ると、GC側にボタン入力を送ることができます。
対応するコマンドは...ソースコードから見てください(ただ上からアルファベットになってるだけだよ)

画像4
画像5

画像少ないし拙い文章でしたが、ひとまずやり方を理解していただけたら嬉しいです。
今回書き込んだプログラムはシリアルモニタから文字を送ると動くように作ってありますが、今後は専用のソースコードとソフトでゲームキューブを自動化できる環境が整えられるようになると思うと楽しみですね。期待してますよソフトウェア開発者!!!!!!!!!!

この記事が気に入ったらサポートをしてみませんか?