小ネタ 2007-001
Wiiリモコンのポインティング用赤外線センサ部品の解析
リモコンの中の基板から赤外線CMOSセンサを取り外して、8ピン(4ピン×2列)のコネクタを取り付けてみた。
まず最初に、、この8つのピンの機能を調べてみた。結果は以下の通り。
上の写真の基板右上側が1番ピンで、千鳥状に順番にピンが並んでいる。
(後日加筆 2007.1.31 4番ピンは#CE信号らしい)
次に、上記のとおりにしてIRセンサが動くかどうか、確認のため、回路を自作して調べてみた。
(後日加筆 2007.1.31 4番ピンは、#CE信号なので、GNDに落としておくべきである)
実際に組み立てた回路の写真
IRセンサを取り外したWiiリモコンの中身の基板からVcc,SCL,SDA,GNDの4本の線のみを引き出して、この回路に接続してみた。
接続した状態でリモコンを動作させてみたところ、元通りにIRセンサが動くのが確認できた。
ちなみにWiiリモコンの拡張ポートにもI2Cの信号が出ていることが分かった。ヌンチャクとかクラシックコントローラーとの通信にもI2Cバスを使っている。
I2Cだと活線挿抜もできるので、こいういう用途にも使用できるようだ。
Expansion Port Pin for Nunchaku/Classic Controller
1 - Vcc
2 - SCL
3 - 1と導通(コネクタの接続検出用)
4 - n.c.
5 - SDA
6 - GND
(4番がヌンチャクやクラシックコントローラーでは未接続だが、リモコン側は何か電源のような回路になっている。振動パック用の電源か? クラコンとWiiリモコンの間に中継して取り付けるのかもしれない。)
ヌンチャクコントローラーのケーブルを真ん中でカットして、
(Wiiリモコン w/o IRセンサ)→(自作IRセンサ基板&中継コネクタ)→(ヌンチャクコントローラー)
という形で、IRセンサ基板を拡張ポートに接続することで、WiiリモコンからIRセンサを取り外してリモコン外部でIRセンサ機能を動作させることができた。
拡張ポートの3番ピンが検出されている状態だと、途中でケーブルをカットしてヌンチャクコントローラーがつながらない状態にするとWiiリモコンがフリーズする。フリーズさせないようにするには、上記のように中継する形で接続すればよい。
(後日加筆 2007.1.30 拡張ポートの1番ピンと3番ピンを導通させるとフリーズするというのは、再度試してみたところ再現しなかった。おそらく作業ミスでそれ以外の信号をショートさせてフリーズしたのかと思われる。)
IRセンサに限らず、I2Cバスで接続できるデバイスならば、Wiiリモコンの拡張ポートに接続することが可能である。これならWiiリモコンを拡張する自作周辺機器というのも可能そうだ。
つまり、
・拡張ポートの応用1 ... I2Cの信号線に何らかのI2Cデバイスを接続して、自作周辺機器を動作させることができる。
・拡張ポートの応用2 ... リモコンをPCに繋いでコマンド待ち状態にしておき、I2Cの信号線を別のマスターに接続して、リモコンの外からリモコン内部のI2CデバイスであるEEPROMなどにアクセスすることができる。
リモコン内部にはI2Cバスに接続されたEEPROMが存在する。BluetoothのIDだとかMiiデータなどを記録している。今のところ未確認情報だが、EEPROMにはWiiリモコンのCPUにロードされて実行されるとおぼしきバイナリのようなものが記録されているそうなので、これが本当だとEEPROMの書き換えで任意のコードがWiiリモコン上で実行できるhackが可能かもしれない。このEEPROMは上記の応用2の方法で拡張ポートを使って読み出すことは可能だが、書き換えるのは困難。Bluetooth経由でも、EEPROMの後ろの方のアドレスは読み書きできないようにロックされているそうだ。リモコンを分解してEEPROMを取り外して直接書き換える以外の方法は無理そう。
次に、自作IRセンサ基板を、Wiiリモコンでなく、その他のI2Cマスター機器に接続してみた。
結論を先に書くと、IRセンサにコマンドを送受信してWiiリモコンと同様にセンサーバー等の赤外線の光源の検知をすることができた。(2007.1.25)
PCでI2Cバスを使用するため、DeVaSys社のUSB-I2CIOという周辺機器を使用した。PCにUSBで接続、I2Cマスター機器として機能する。他にも汎用のI/Oの機能も付いている。
配線は、Vcc(3.3V),GND,SCL,SDAの4本をそのまま接続した。
実際に動作させてみたところ (MPEG1形式の動画 download 2.0MB)
C言語で、USB-I2CIOを制御するためのライブラリをDeVaSysのウェブサイトからダウンロードして、そのライブラリを使って赤外線センサにI2Cバスでコマンドを送受信するためのソフトを自作した。
(ソフトは公開しても使うような人がいないと思う。同じように基板を作ったという人から希望があれば、個別に配布するかも。とりあえず現在、コードの整理中)
(2007.2.2 Wii-Tenkey[wii number pad]というのを作った。)
(2007.2.7 Wii-Gyroというのを作った。)
(後日加筆 2008-2-22 日本国内で入手可能なI2CのI/Fとして、REX-USB61というのを入手して使ってみた。とりあえずライブラリを呼び出す部分を書き換えて、同じソフトが動くようになった。あいかわらずコードの整理ができていなかったりするが。完全に放置しているわけではなくて、一応は進行中。)
(後日加筆)
ATMEL AVRマイコンへの接続について回路とソフトを公開した。
(後日加筆 2013-12)
Wiiリモコンの中身のIRセンサーが以前と違うものになっているそうだ。分解して調べてみた。(2013-12-24)