金倉寺こどもまつり

四国第七十六番霊場 金倉寺のこどもまつりで今年もロボット操縦体験コーナーを担当してきた。いつもの「ロボックマ」シリーズだけでなく、今年はロボカップジュニア・サッカーチャレンジ規格のロボも持って行き、人間と自律ロボの対戦で遊んでもらった。

以前、別のイベントで自律のサッカーロボを展示した際、就学前の小さなお子様たちが、勝手にボールを追いかけるロボで喜んで遊んでいたのを見て、対戦できれば更に受けるのではないか、と思ったことが無線コントロール化のきっかけではあったが、そのイベント以降すっかり忘れていた。せとうちオープン前に、ふとしたことでPS2コントローラ互換の VStone VS-C1を眠らせていることを思い出し、さらに arduino で動くPS2コントローラライブラリを見つけてしまい、おやじリーグ2輪の制作を後回しにして、作業を進めた。


参考にしたのはこちら。


うちのサッカーロボはベースがTJ3Bなため、arduinoをTJ3Bのスレーブとして認識するようプログラムし、arduino にコントローラの受信機を接続して、無線操縦できるようにした。マスターとなるTJ3Bでは、C-Style中でC-Code の sub_io_get_gV() 関数を使いスレーブ側の変数を参照する形でコントローラの状態を取得するようにした。


TJ3Bをスレーブとして使用する場合のソースがC-Styleのビルドパスにある Slvフォルダ中の DS_I2C.c と DS_I2C.h に記述されているので、これを元にArduinoをプログラムする。TJ3Bマスタ側のsub_io_get_gV() 関数に対するTJ3Bスレーブ側の処理は、i2c_cmd_job() 関数の「case I2C_RCMD_V:」あたりにまとまっているので、これを参考にArduinoをプログラムする。

TJ3Bマスタ側のsub_io_get_gV() 関数にのみ応答するだけのスレーブarduinoであれば、Wire.onRequest(handler)部分だけ実装すれば済む。


コントローラの受信機とarduino 間は、XHコネクタのコンタクトを収縮チューブで保護した状態で、PS2コネクタのピンに直接接続した。写真のLEDはコントローラの状態表示用で、送受信機間で正しく接続ができていれば緑LEDが点灯するようにした。エラー時は赤LEDが点灯するので、その場合はリセットで対応する。3pinコネクタは未使用。