りんりん
homeに戻る

WiimoteIR-HIDmouse

概要

本体

WiiリモコンのIRセンサを利用したマウス。Wiiリモコンのように画面に向けてマウスを操作できる。HIDデバイスなので、どのコンピュータでもUSBで接続するだけですぐに利用できる。ケースは光造形3Dプリンタで作成した。

利用している様子

Wiiリモコンのしくみ

Wiiリモコンが動作するためにはセンサーバーが必要である。このセンサーバーは、名前とは反して、センサーはついていない。センサーバーには赤外線のLEDがついており、Wiiリモコンはその光をカメラで見ることで、リモコンの向いている方向を調べている。

今回のマウスも同様に、センサーバーの代わりとなる赤外線発光部が必要になる。センサーバーは両端にLEDがついており、2点を捉えることでカーソルの角度や距離が取得できるが、マウスカーソルはWiiと異なりそれらは必要ないため、赤外線発光部は1点のみにし、つぎのようなコンパクトな作りにした。明るさ確保のためLEDを3つ付けたが、センサに捉えられるのは1点だ。利用したのはタカチのボタン電池ボックスつきのケースである。(https://www.takachi-el.co.jp/products/CS)

赤外線発光部(Wiiのセンサーバーにあたる)

WiiリモコンのIRセンサをマイコンで利用する

回路図

WiiモーションplusがないモデルのWiiリモコンのセンサはI2Cで利用できる。今回はこれをArduino Pro Microに接続した。センサの利用方法について、詳しくはkako氏のサイトが参考になる。(http://www.kako.com/neta/2007-001/2007-001.html)

ArduinoおよびESP32向けにしょっぱいライブラリを作ったので公開する。https://github.com/ybasviel/wiiIRcam

#include <wiiIRcam.h>
#define SENSITIVITY 2

wiiIRcam cam;

void setup(){
  Serial.begin(115200);
  cam.begin(SENSITIVITY); // You can omit SENSITIVITY
}

void loop(){
  char str[128];

  if( cam.get() ){
    sprintf(str, "%d,%d,%d,%d,%d,%d,%d,%d\n", cam.x1, cam.y1, cam.x2, cam.y2, cam.x3, cam.y3, cam.x4, cam.y4);
    Serial.print(str);
  }
}