レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

Wiiのヌンチャクコントローラーをマウスにする

2018年11月18日 | 電子工作

前回使用したヌンチャクコントローラーですが、加速度センサーの使い道があまりなかったので今回はセンサーを何かに利用してみたくなりました。といってもすぐに思いつくのはマウスにすることくらいでしたので、とりあえず試してみることにしました。

コントローラーは前回のものを再利用してもいいのですが、中古で1個税抜き¥300なのでもう一つ購入してしまいました。今回購入したのは黒いヌンチャクコントローラーです。白のコントローラーよりも少し高級感がありますね。



マイコンはArduino Leonardoを使用します。接続するヌンチャクコントローラーはひとつだけなので配線は簡単です。コントローラーのSDA・SCL・VCC・GNDを2ピン・3ピン・3.3v・GNDにつなぎます。



加速度センサーの割り当てですがX軸・Y軸をマウスの左右・上下に割り当てました。センサーのZ軸はマウス操作に利用するのはちょっと難しかったので今回は使用しませんでした。
マウスボタンはZボタンが左ボタン、Cボタンは右ボタンで、中ボタンはちょっと使いにくいのですがアナログスティックの右に割り当てました。アナログスティックの上下はマウスホイールの上下にしました。

ところで加速度センサーをマウス動作にすると、マウスから手を離して机に置いたりしたときにマウスカーソルが画面端に飛んでいってしまいます。そこで、アナログスティックの左でマウス動作を一時停止できるようにしました。再度スティックの左で一時停止を解除出来ます。

作成したスケッチはこちらです。

NunchuckMouse.ino

スケッチのはじめの方にある#define文で、マウスの操作感を変更します。

#define MARGIN ではスティックのあそびを設定します。スティックはボタンやホイールとして動作しますので、この値が小さいとスティックにちょっと触っただけでボタン等が押されたことになってしまいます。

#define ACCEMG は加速度センサーのあそびで、小さいと反応は良くなりますがマウスカーソルの位置が変化しやすくなり一箇所に留めにくくなります。

#define CURWAIT はカーソル移動のスピードを遅くするパラメーターで、この値が小さいとカーソルが早く動いてしまいメニューの選択など細かい操作がしにくくなります。

#define WHEEL はマウスホイールのスクロールスピードの設定を行うもので値が大きいほど早くなります。Arduinoのマウスライブラリのホイールスクロールのスピードは少し早すぎるので、ここの値は1のままでいいと思います。

#define WHWAIT 上記のスクロールスピードを最低速度の1にしてもまだ少し早いようなので、更にウエイトをつけてスピードを遅くするようにしました。ウエイトはdelay()文で行いますので、単位はmsです。

これらのパラメーターは利用環境によって設定値が異なると思いますので、このスケッチを利用する場合はお好みで値を変更して下さい。

思いつきでヌンチャクコントローラーをマウスにしてみましたが、使用感はいまいちですね。実際のマウスと比べて、カーソルを正確な位置に持っていってクリックするのが難しくなってしまいます。唯一アナログスティックによるホイールスクロールだけは快適でした。

加速度センサーを有効に使うのは難しいですね。センサー機能を遊ばせておくのはもったいないので、後でまたなにか考えてみましょう。



最新の画像もっと見る

コメントを投稿