CLV-202 to USB

0
0
デモ

CLV-202 to USBはニンテンドークラシックミニ スーパーファミコンのコントローラー(CLV-202)を無改造でUSBゲームパッドとして扱えるようにする。

スペシャルサンクス

本ハードウェア及びソフトウェアは以下のサイトの情報がなければ完成しなかったでしょう。深く感謝いたします。

ニンテンドークラシックミニ スーパーファミコンの通信解析 – Keio Robotics Association

プロローグ

河原はWindows版ぷよぷよテトリスのオンライン対戦に明け暮れていた…。(やるのはテトリスだ)

ある日使っていたXbox OneのコントローラーのD-Padがチャタリングを起こすようになり、まともにゲームを遊ぶことができなくなってしまった。

モデルチェンジ前のXbox Oneコントローラー

そこで新しいXbox Oneのコントローラーを購入したのだが、新しいコントローラーはモデルチェンジによってD-Padの形状が変わっていた。 河原は、操作感のしっくりこないコントローラーと一緒に悶々とした日々を送った。

モデルチェンジ後のXbox Oneコントローラー

そんな中、なんとぷよぷよテトリス2の発売が決定されたのだ。

このことで、ゲームが発売されるまでに問題を解決させる必要が出てきた。

さてアクションパズルゲームの勝敗は十字キーの良し悪しによって決まる。 素晴らしい十字キーを持つコントローラーといえばスーパーファミコンのコントローラーだ。

ニンテンドークラシックミニ スーパーファミコンのコントローラー

調べたところスーパーファミコンのコントローラーは現在では生産されていないが、ニンテンドークラシックミニ スーパーファミコンのコントローラーについては入手可能であることがわかった。

こうして河原はニンテンドークラシックミニ スーパーファミコンのコントローラーをベースに究極のゲームコントローラーを開発することにした。オンライン対戦で勝つために…。

全体の構成

長いので以降ニンテンドークラシックミニ スーパーファミコンのコントローラーのことをコントローラーと表記する。

コントローラーの中にはマイコンが入っていて、これは3.3Vで動作する。通信インターフェースはI2Cである。

だからコントローラーのI2Cの信号を受け取って、その値をUSBゲームコントローラーとしてパソコンに送ってやるようなハードウェアを作れば良いのだ。

構成図

ハードウェアを作るために必要な部品

以下にハードウェアを作るために必要な部品を挙げる。

Sparkfun Pro Micro 3.3V/8MHzコネクタータクタイルスイッチ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 をインストールする。

XInputライブラリのインストール

Arduino IDE を再起動する。

ツール-ボードから以下のようにSparkFun Pro Micro w/ XInputを選択する。

ボードの選択

ここからマイコンへソフトウェアを書き込むのだが、これがやたらと難しい。

リセットスイッチをダブルクリックすると COM ポートが出現しマイコンが書き込みを受け付けるのだが、この時間がたった数秒間しかない。 (マイコンの接続状態は Arduino IDE のウィンドウ右下を見るとわかりやすい)

数秒間だとポートの設定だけで終わってしまうし、Arduino IDE は書き込みのたびにコンパイルするのでとても間に合わない。

そこで以下のようにソフトウェアを書き込む。

  1. マイコンを USB 接続する。
  2. リセットスイッチをダブルクリックすると COM ポートが出現するので、素早く Arduino IDE の`ツール`-`シリアルポート`から COM ポートを設定する。
  3. Arduino IDE の書き込みボタンを押す。
  4. Arduino IDE のコンパイル完了。のトーストが出現したあたりで、リセットスイッチをダブルクリックし、マイコンに書き込みを受付させる。

うまくいけば Arduino IDE に`書き込み完了`と表示される。以下のように妙な赤字が出るかもしれないが、動けば良いのだ。

書き込みに成功した図

動いた

一心同体だ。

デモ

費用

はんだごてなどの工具は含めていない。結構かかったが面白かったので良し。

材料値段[円]
コントローラー1650
コントローラー送料660
マイコン2064
マイコン送料200
コネクター200
コネクター送料579
タクトスイッチ10
ケース110
線材555
合計6028

エピローグ

こうして究極の操作性を持つコントローラーを手に入れた河原は、練習の日々を送った…。

しかし発売されたぷよぷよテトリス2は操作性が良くなくて、オンライン対戦を止めてしまった。

でもアナログスティックの要らないゲームをパソコンで遊ぶときには、このコントローラーを使っている。

おわり

おたより