Arduino Dueを使ってJoystickMouseControl
はじめに
タイトルの「JoystickMouseControl」というのは、Arduino IDEに内蔵されているスケッチ例の名前です。今回はジョイスティックで、マウスのようにパソコンを操作してみました。
▼Arduino IDEでのスケッチ例はこちら

スケッチ例に書いているURLのページで、公式の説明があります。
(→Joystick Mouse Control | Arduino Documentation | Arduino Documentation)
モジュールについて
スケッチ例のコメントに書いているのですが、このプログラムはArduinoのLeonardo、Micro、Dueで使います。なぜこの3つなのかというと、HID(Human Interface Device)機能があるからです。結局何ができるのかというと、マウスやキーボードのようにPCを操作することができます。
今回使ったマイコンはArduino Dueです。持っていなかったのでAmazonで買いましたが、高いですね…

Dueはイタリア語の2、Unoは1です。
DueはUnoよりも大きくなって、ピンの数がかなり増えています。先に述べたHID機能も追加されています。他にも性能が向上しているようで、調べたら周波数のこととかが書いていますが、よく分からないというのが正直なところ。そのうち分かるでしょう。
▼DueとUnoを並べたところ。ピンの数がかなり増えている。

ジョイスティックや他に必要なものは、いつも使っているスターターキットに入っていたものです。
▼今回使ったジョイスティック。スティックを押し込んだ時に反応するスイッチがついています。

回路を組む
回路はスケッチ例を読んで組みました。ピンの指定をされているものがこちら。
スケッチでの名前 | Dueのピン | 役割 |
---|---|---|
switchPin | 2 | マウスのONとOFFを切り替える |
mouseButton | 3 | マウスの左クリックに対応 |
ledPin | 5 | マウスのON、OFFに対応して点灯する |
xAxis | A0 | ジョイスティックのVRx |
yAxis | A1 | ジョイスティックのVRy |
UnoやNanoと違って、DueはI/Oピンの最大電圧が3.3Vまでということには注意してください。公式でWarningのところにThe maximum voltage that the I/O pins can tolerate is 3.3V. と書いていました。(Arduino Due — Arduino Online Shop)
▼実際の回路。回路図が見づらいのは、私が作ったシンボルで、ピンの配置が本物に対応しているからです。



スケッチ例を試す
DueにはUSBポートが2つあって、片方がProgramming Port、もう片方がNative USB Portです。プログラムを書き込むときはProgramming Portに、HID機能を使うときはNative USB Portに挿します。
ちなみにProgramming Portに挿したままだとマウスとして反応しませんでした。2つに分ける必要があるのかと思いましたが、使ってみると分かれているのがありがたかったです。なぜかというと、マウスが勝手に動き続けるプログラムを書き込んでしまったときに、パソコンを操作できなくなってしまうからです。失敗したときは完全にコントロールを奪われてしまいました。
▼スケッチ例はこちら
スケッチ例のままだと、ジョイスティックでマウスのカーソルを動かすことはできるのですが、クリックすることができません。switchPinでマウスのONとOFFを切り替えて、それに合わせてLEDを点灯させることはできました。
クリックできなかったのは、おそらくpinMode関数でmouseButtonの設定がされていないからだと思います。書き加えたらちゃんと動作しました。A0、A1は書いていなくても使えたので、無くてもいいのかは今のところ謎です。
また、カーソルの動きがかなり早いです。ジョイスティックが持ちにくいのも相まって、操作性が最悪です。というわけで、プログラムを書き直して使いやすくします。
プログラムを書き直す
書き直したのは以下の三点です。(最初のコメントを一部削っています)
- setup関数に、pinMode(mouseButton, INPUT);を書き加える
- 48、49行目のxReading、yReadingでカーソルの速度が決まるので、2で割る
- 59行目でmouseButtonがLOWだと左クリックするように変える
59行目については回路的にジョイスティックを押しこんでいないときがHIGHなので、押しこんだときにLOWになるようにする必要があります。書き直す前だと左クリックがめちゃくちゃ連打されます。
▼書き直したものがこちら
ちゃんと左クリックも反応して、いい感じの速度でカーソルを動かせるようになりました。
まとめ
ジョイスティックとArduino Dueを使って、マウスのように操作することができました。簡単な自作マウスという感じですね。Dueの値段的に結構高額になっていますが。しかも、ジョイスティックはそのままだと持ちにくいので、操作性が悪いです。
JoystickMouseControl以外にもKeyboard系のスケッチ例があったので、時間があるときに試そうと思います。