KOSAKA LABORATORY->Tips

wiiリモコン 赤外線カメラ その1

 Wiiリモコンには赤外線カメラが搭載されています。Wiiリモコンの先端の黒い部分の中にカメラがあります。赤外線とは人の目には見えない光です。一番身近なものとしてテレビのリモコンや携帯電話などが挙げられます。
 ここでは、Wiiリモコンの赤外線カメラを用いて赤外線を検出したら振動するプログラムを作成します。

1.接続、切断ボタンの追加
1.フォームにボタン2つ張り付けてください。

2.貼り付けたら、「button1」のプロパティのTextを「接続」に、「button2」のプロパティのTextを「切断」に設定する。


2.接続、切断ボタンイベントの追加
1.接続をボタンをダブルクリックし、以下のプログラムを追加する。
        //接続ボタンが押されたら
        private void button1_Click(object sender, EventArgs e) {
           this.wm.Connect();                                        //Wiimoteの接続
           this.wm.WiimoteChanged += wm_WiimoteChanged;              //イベント関数の登録
           this.wm.SetReportType(InputReport.IRExtensionAccel, true);//レポートタイプの設定
        }
2.切断をボタンをダブルクリックし、以下のプログラムを追加する。
        //切断ボタンが押されたら
        private void button2_Click(object sender, EventArgs e) {
           this.wm.Disconnect();                                     //Wiimote切断
        }
3.Wii赤外線検出プログラム
Form1.csに以下の部分を追加する。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WiimoteLib;                                                     //WimoteLibの宣言

namespace WiimoteLib_Sample {
    public partial class Form1 Form {


        Wiimote wm = new Wiimote();                                    //Wiimoteの宣言

        public Form1) {


            InitializeComponent();

            //他スレッドからのコントロール呼び出し許可
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        //接続ボタンが押されたら
        private void button1_Click(object sender, EventArgs e) {

            this.wm.Connect();                                        //Wiimoteの接続
            this.wm.WiimoteChanged += wm_WiimoteChanged;              //イベント関数の登録
            this.wm.SetReportType(InputReport.IRExtensionAccel, true);//レポートタイプの設定


        }

        //切断ボタンが押されたら
        private void button2_Click(object sender, EventArgs e) {

            this.wm.Disconnect();                                     //Wiimote切断
            this.wm.Dispose();
        }



        //Wiiリモコンの値が変化する度に呼ばれる
        void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args) {
            WiimoteState ws = args.WiimoteState;                 //WiimoteStateの値を取得

            //もし赤外線を1つ発見したら
            if (ws.IRState.IRSensors[0].Found) {
                wm.SetRumble(true);     //バイブレータON
            } else {
                wm.SetRumble(false);    //バイブレータOFF
            }
        }



    }
}

実行

1.WiiRemoteを接続してください。

2.F5キーを押して実行してください。

3.接続ボタンを押してください。
  ※もしエラーが発生する場合はWiiRemoteが正しく接続されているか確認してください。

4.WiiリモコンをWiiセンサーバーに向けてください。
 ※センサーバーがない場合は、赤外線が発生するもの(太陽、ロウソクの火、テレビのリモコン、携帯電話の赤外線通信 など)に向けてください。

解説

Wiiリモコンの赤外線カメラの値を取得して、赤外線を発見したらバイブレータをONにします。

         wm.SetReportType(InputReport.IRExtensionAccel, true); //レポートタイプの設定
レポートタイプを赤外線取得モードに設定します。
この時、かならずwm.Connect(); の後に記述してください。wm.Connect();の上に記述すると赤外線カメラが正しく動きません。

 

          ws.IRState.IRSensors[0].Found
赤外線を検出するとTrueを返します。それ以外はFalseです。
WiimoteLibは、同時に4つまで赤外線を検出します。
IRSensors[0].Found : 1つの赤外線を発見した
IRSensors[1].Found : 2つの赤外線を発見した
IRSensors[2].Found : 3つの赤外線を発見した
IRSensors[3].Found : 4つの赤外線を発見した

 

 ロウソクなどを用いて赤外線を検出する場合は、火事などに十分気をつけて行ってください。また、テレビリモコンを用いる場合は、以下このとに気をつけてください。テレビリモコンは、ボタンが押されたときにしか赤外線を送信しませんので、何度か連打して確認をおこなってください。