bluetooth-HID応用例(wiiリモコン)

PIC基板とwiiリモコンとの無線接続

PIC基板とwiiリモコンを接続します。PICに書き込むファームウェアはhid_wii2.zipです。
使い方は簡単で
1.PIC基板の電源をいれます。
2.wiiリモコンのボタン1とボタン2を同時に押します。
とするだけです。
接続が完了するとPIC基板から、wiiリモコンの3番目のLEDを点灯する命令が送信されますので、その点灯が確認できれば、接続されたことが視覚的にわかります。その後、wiiリモコンの適当なボタンを押すと、そのデータがPICにて受信されます。それぞのボタンを押してみてください。 受信状況はログファイルをとると確認できますが(デバッグ・モニタ用のRS232C回路が必要)、例えば、wii2.txtのようになっています(ボタン1を押した場合)。

wiiリモコンとのデータのやり取りに関しては、 L2CAP(プロトコル)におけるチャンネルの確保の最後の方をご覧下さい。なお、wiiリモコンを制御するためのリポートID番号とデータはwiiリモコンのデータに詳しく書かれています(英語ですが)。


サーボモータ制御

サーボモータMicro 2BBMGを無線で操作してみました。PIC24FJ64GB002基板は3.3V単電源としました。3Vの乾電池では正常に働きません。サーボモータの電子回路が3Vでは働かないようです。モータから3本の線(赤、黒、白)が出ています。赤は3.3V、黒はアース、白はPICの2番ピンにつなぎます。PICに書き込むファームウェアはhid_wii_servo.zipです。

PIC基板とwiiリモコンとを上記の方法で接続します。PIC基板の電源を入れるとサーボモータは中立角度の位置に回転して行くので、手を挟まないよう十分注意してください。wiiリモコンの十字ボタンの左側を押すとサーボモータは反時計回りに回転して最小角度の位置で止まります。また、右側を押すとサーボモータは時計回りに回転して最大角度の位置で止まります。そして、上側を押すとサーボモータは中立角度の位置に戻ります。

hid_wii_servo.zipにおいて、hid_wii2.zipとの違いは、main.cの中のInitializeSystem ( void )関数でPWM(パルス幅変調)の設定を行ったことと、case HID_READ_DATA:の下に、case HID_SERVO:を付け加えたことだけです。なお、case HID_SERVO:のところで、wiiリモコンから送られてくるデータにしたがって、サーボモータに送るパルス幅を変えています。

なお、サーボモータの白線に加える信号ですが、図の用に周期は20ミリ秒で固定、中立角度の位置でパルス幅は1.5ミリ秒、最大角度の位置でパルス幅は1.0ミリ秒、また最小角度の位置でパルス幅は2.0ミリ秒です。


DCモータ制御

PIC関連で有名な後閑氏のサイト上の無線モジュール応用ラジコン車を真似て、BlueWiiカーを作りました。モータの回転方向や回転速度(PWM)を制御するためのFETを個別に揃えるのは大変なので、FETアレイ東芝MP4212を使いました。電源に関しては、ニッケル水素充電池を4本用い約5Vを得てます。PIC自体は3.3V動作ですので、5Vから3端子レギュレータで3.3Vを得ています。以下が回路図で、PICに書き込むファームウェアはhid_wii_motor.zipです。

以下の写真のように、車体には3mm厚のアクリル板を使い、それにタミヤ製ツインモーターギヤーボックス(Cタイプ位置)と35mm高のキャスタを取り付けました。キャスタは充電池の右下にありますが、写真では取り付け用の3mmφビス2本の頭しか見えていません。なお、タイヤにはタミヤ製のもの(楽しい工作シリーズNO.96:オフロードタイヤセット)を使用しました。

PIC基板とwiiリモコンとを上記の方法で接続します。接続に成功すると、写真のようにwiiリモコンの3番目のLEDが点灯します。リモコンの十字カーソルで、以下の表のようにBlueWiiカーを操作します。なお、Aボタンを押すとBlueWiiカーは停止します。ツインモーターギヤーの摩擦の違いにより、左右の車輪が同じように回らないことがあったり、右左折するときにモータがうまく回らないことがあるので、PWMの値(デューティ比)を適当に変えてください。

十字カーソル操作 動作
前進
後進
上+左 左曲前進
上+右 右曲前進
下+左 左曲後進
下+右 右曲後進

hid_wii_motor.zipにおいて、hid_wii2.zipとの違いは、main.cの中のInitializeSystem ( void )関数でPWM(パルス幅変調)の設定を行ったことと、case HID_READ_DATA:の下に、case HID_SERVO:を付け加えたことだけです。なお、case HID_SERVO:のところで、wiiリモコンから送られてくるデータにしたがって、DCモータに送るパルス幅を変えています。


戻る