CLV-202 to USBはニンテンドークラシックミニ スーパーファミコンのコントローラー(CLV-202)を無改造でUSBゲームパッドとして扱えるようにする。
本ハードウェア及びソフトウェアは以下のサイトの情報がなければ完成しなかったでしょう。深く感謝いたします。
河原はWindows版ぷよぷよテトリスのオンライン対戦に明け暮れていた…。(やるのはテトリスだ)
ある日使っていたXbox OneのコントローラーのD-Padがチャタリングを起こすようになり、まともにゲームを遊ぶことができなくなってしまった。
そこで新しいXbox Oneのコントローラーを購入したのだが、新しいコントローラーはモデルチェンジによってD-Padの形状が変わっていた。 河原は、操作感のしっくりこないコントローラーと一緒に悶々とした日々を送った。
そんな中、なんとぷよぷよテトリス2の発売が決定されたのだ。
このことで、ゲームが発売されるまでに問題を解決させる必要が出てきた。
さてアクションパズルゲームの勝敗は十字キーの良し悪しによって決まる。 素晴らしい十字キーを持つコントローラーといえばスーパーファミコンのコントローラーだ。
調べたところスーパーファミコンのコントローラーは現在では生産されていないが、ニンテンドークラシックミニ スーパーファミコンのコントローラーについては入手可能であることがわかった。
こうして河原はニンテンドークラシックミニ スーパーファミコンのコントローラーをベースに究極のゲームコントローラーを開発することにした。オンライン対戦で勝つために…。
長いので以降ニンテンドークラシックミニ スーパーファミコンのコントローラーのことをコントローラーと表記する。
コントローラーの中にはマイコンが入っていて、これは3.3Vで動作する。通信インターフェースはI2Cである。
だからコントローラーのI2Cの信号を受け取って、その値をUSBゲームコントローラーとしてパソコンに送ってやるようなハードウェアを作れば良いのだ。
以下にハードウェアを作るために必要な部品を挙げる。
マイコンの最低要件はUSBゲームコントローラーの開発が可能で、かつI2C通信が可能であることだ。3.3V駆動だとより良い。5V駆動だと降圧する必要があり部品が増えて面倒だからだ。その点で言うとSparkfun Pro Micro 3.3V/8MHzは完璧だ。
コントローラーとマイコンの接続にはコネクターを使用する。コネクターを使えばコントローラーに破壊的な改造を行う必要がなくなる。コネクターだけ販売しているサイトがある。
マイコンのリセット用のタクトスイッチも用意する。
マイコンとPCを接続するためにUSBケーブルが必要である。コントローラーのケーブルは十分に長いので、USBケーブルは短いものが望ましい。
コントローラーについては任天堂に迷惑をかけるわけにはいかないから詳しくは書かないが、手に入れる方法があるのだ。
以下にハードウェアの配線図を載せる。
部品が揃ったら組み立てる。
なおハードウェアの筐体はダイソーで入手可能である。
ハードウェアは作っただけでは動かず、ソフトウェアを用意しないといけないのだ。
コードはGitHubに置いた。
このソフトウェアは I2C 通信して、XInput のライブラリを呼んでいるだけである。
I2C 通信は以下の情報を参考に、Arduino 向けに落とし込んでいる。
ニンテンドークラシックミニ スーパーファミコンの通信解析 – Keio Robotics Association
これをマイコンに書き込めば終わりなのだが、今回使うマイコンは書き込み方が一癖あるので、袋とじで攻略情報を教えよう。
ソフトウェア書き込みにはArduino IDEを使う。
以下のリポジトリをクローンする。
GitHub - dmadison/ArduinoXInput_AVR: AVR boards package for the ArduinoXInput project
GitHub - dmadison/ArduinoXInput_Sparkfun: SparkFun boards package for the ArduinoXInput project
Windows 環境の場合、クローンしたファイル群を以下のように置き直す。バージョンなど足りないディレクトリは手動で作成する。
%LOCALAPPDATA%Arduino15
└─packages
├─arduino
├─builtin
├─xinput
│ └─hardware
│ └─avr
│ └─1.0.5
│ │ boards.txt
│ │ LICENSE
│ │ platform.txt
│ │ post_install.bat
│ │ README.md
│ │
│ ├─.github
│ ├─bootloaders
│ ├─cores
│ ├─drivers
│ ├─libraries
│ └─variants
└─xinput_sparkfun
└─hardware
└─avr
└─1.0.0
│ avrdude.conf
│ boards.txt
│ platform.txt
│
├─bootloaders
├─libraries
└─variants次に ツール-ライブラリの管理...から XInput をインストールする。
Arduino IDE を再起動する。
ツール-ボードから以下のようにSparkFun Pro Micro w/ XInputを選択する。
ここからマイコンへソフトウェアを書き込むのだが、これがやたらと難しい。
リセットスイッチをダブルクリックすると COM ポートが出現しマイコンが書き込みを受け付けるのだが、この時間がたった数秒間しかない。 (マイコンの接続状態は Arduino IDE のウィンドウ右下を見るとわかりやすい)
数秒間だとポートの設定だけで終わってしまうし、Arduino IDE は書き込みのたびにコンパイルするのでとても間に合わない。
そこで以下のようにソフトウェアを書き込む。
コンパイル完了。のトーストが出現したあたりで、リセットスイッチをダブルクリックし、マイコンに書き込みを受付させる。うまくいけば Arduino IDE に`書き込み完了`と表示される。以下のように妙な赤字が出るかもしれないが、動けば良いのだ。
一心同体だ。
はんだごてなどの工具は含めていない。結構かかったが面白かったので良し。
| 材料 | 値段[円] |
|---|---|
| コントローラー | 1650 |
| コントローラー送料 | 660 |
| マイコン | 2064 |
| マイコン送料 | 200 |
| コネクター | 200 |
| コネクター送料 | 579 |
| タクトスイッチ | 10 |
| ケース | 110 |
| 線材 | 555 |
| 合計 | 6028 |
こうして究極の操作性を持つコントローラーを手に入れた河原は、練習の日々を送った…。
しかし発売されたぷよぷよテトリス2は操作性が良くなくて、オンライン対戦を止めてしまった。
でもアナログスティックの要らないゲームをパソコンで遊ぶときには、このコントローラーを使っている。
おわり
おたより