レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

Wiiリモコンにつなげるゲームコントローラーを作る 2

2021年04月13日 | 電子工作

前回のテストで、ファミコンジョイスティックをWiiリモコンにつないでBluetooth経由で利用することが出来たので、今度はWiiクラシックコントローラーのボタンを全て割り当てられるプレイステーションコントローラーを使ってみることにしました。
前回はATtiny85を利用しましたがピン数が少ないので、今度はATmega328Pを使います。



ATmega328Pの動作電圧はWiiリモコンに合わせて3.3Vにし、クロックには内蔵8MHzを使います。長時間の使用もあると思うので、電力供給はWiiリモコンの乾電池からだけでなく外部の3.3V電源からも行えるようにします。

まずは配線です。それほど複雑な回路ではないので、ブレッドボードは使わず初めから基板に配線してしまいました。

ATmega328P ⇔ PSコントローラー・Wiiリモコン
5  ⇔ 7 CLK (PSコントローラー)
6  ⇔ 6 SEL (PSコントローラー)
7  ⇔ 2 CMD (PSコントローラー)
8  ⇔ 1 DAT (PSコントローラー)
18 ⇔ SDA (Wiiリモコン)
19 ⇔ SCL (Wiiリモコン)

各デバイスの電源端子も結線し、ATmega328Pのリセットピンに10KΩのプルアップ抵抗を、電源近くには0.1μFのパスコンもつけてあります。パスコンは配線の都合上、基板の裏側につけました。



プレイステーションのコネクタは以前マルチタップから取り出した物の残りを利用しました。

次にスケッチを作成します。スケッチではこれまで作成してきたものと同様にデジタル・アナログ・ネジコン・わいわい雀荘コントローラを扱えます。



デュアルショック(SCPH-1200)は使用できますが、デュアルショック2(SCPH-10010)には対応していません。



Wiiクラシックコントローラーが振動機能を持っていないので、コントローラーの振動機能も使えません。また、わいわい雀荘コントローラはボタン割り当てを変えないと普通のゲームでは利用しづらいでしょう。当然ですが、液晶画面も機能しません。

作成したスケッチはこちらになります。

ATmega328WiiPS.ino

前回同様、wiimote.hとwm_crypto.hもスケッチと同じフォルダに入れておきます。

スケッチを書き込んだATmega328PとWiiリモコンを接続したら、Wiiリモコンのボタンを押してXWiimoteインストール済みのLinux(Ubuntuで確認)と接続します。はじめからATmega328Pに外部電源をつないでおいても動作しました。(外部電源なしでも動作しました)
あとで気がついたのですが、PSコントローラーをつなげたATmega328PはWiiリモコンがPCとBluetoothでつながっている間、I2Cコネクタを抜き差ししてもちゃんと再認識され問題なく利用出来ました。



Bluetooth接続後にjstest-gtkで確認するとクラシックコントローラーとして認識されていたので、RetroArchで使用してみました。まず、RetroArchを起動したら、以下の設定を行います。

設定→入力→ポート1コントロール→デバイスインデックス→Nintendo Wii Remote Classic Controller



これで普通にゲームコントローラーとして利用することができました。ただ、アナログコントローラーの分解能が低いのでアナログスティックを使うゲームによっては移動量の調整が必要になりそうです。それ以外は特に問題はありませんでした。



無線やUSBの機能を持っていないAVRをBluetoothゲームコントローラーに仕立てられるのはなかなか画期的です。Wiiリモコンは面白いデバイスですね。本体内部に色々なセンサーやデバイスが組み込まれているようなので、しばらくこれで遊べそうです。




最新の画像もっと見る

コメントを投稿