Seeeduino XIAOで無限にマウスカーソルを動かす
「離席中」が気になる
弊社で使っているコミュニケーションツールでは、5分以上パソコンを操作しないとステータスが離席中になります。ちょっとトイレに行っただけで離席中になっちゃいます。在宅勤務中にサボっていると思われるのは嫌なので、これではステータスが気になって仕事に身が入りません。
「在宅 マウス 動かす」でググってみると、すでに先人たちが試行錯誤しているようです。プラレールを使う、アナログ時計の秒針をマウスのセンサに当てるなど物理的な方法では安定性に不安があります。また、弊社ではフリーソフトを利用は禁止されており、ソフトウェアを用いた方法は選択肢からは外れます。
しかし、いまのところ私物のUSBデバイスを接続することは禁止されていません。 そこでSeeeduino XIAOをUSBマウスとして認識させることで、マウスカーソルを無限に動かすデバイスを作ってみました。
USBは挿しっぱなしでオンオフしたい
マウスカーソルをぐるぐるさせること自体は簡単なコードで実現できそうです。ちょっと工作の要素も入れたいと思い、カーソルぐるぐるをオンオフするスイッチを付けてみました。手元にあったタクトスイッチ、プルアップ抵抗、ユニバーサル基板を無理やりはんだ付けしました。
コード
素人のコードなのでご参考までに。gaugeCalc関数でチャタリングによる誤作動防止しています。
#include <TinyUSB_Mouse_and_Keyboard.h> #define SHORT 50 // ゲージ量の設定 #define PIN 6 // スイッチを接続したピン boolean flag = false; // スイッチの状態 int count = 0; // カウント void setup() { Mouse.begin(); //Unlike Arduino Mouse.h, you must use "begin" method. pinMode(PIN, INPUT); attachInterrupt(PIN,gaugeCalc,FALLING); // スイッチの状態を監視 } void loop() { // カウントによってカーソルの動く方向を決める if (count < 50 && flag) { Mouse.move(1,0); delay(10); count++; } else if (count < 100 && flag) { Mouse.move(0,-1); delay(10); count++; } else if (count < 150 && flag) { Mouse.move(-1,0); delay(10); count++; } else if (count < 200 && flag) { Mouse.move(0,1); delay(10); count++; } // カウントのリセット if (count >= 200) { count = 0; } } // スイッチの状態を監視 void gaugeCalc(){ int gauge = 0; // ゲージ量 // ゲージ量を計測 for(int i = 0; i < SHORT; i++){ if (digitalRead(PIN) == LOW){ gauge++; } delay(200 / SHORT); } // ゲージ量が設定以上であればflagを更新 if (gauge >= SHORT) { if (flag) { flag = false; } else { flag = true; } } }
↓こんな風に動きます
3Dプリンタでケースを作る
最近3Dプリンタを購入したばかりで、何か作りたい欲が強いためケースを作ってみました。3D CAD初心者にしてはまずまずなモデリングではなかろうか…!上下ケースとボタンの3パーツ構成です。上下ケースは接着剤でくっつけました。
完成
500円玉と大きさ比較、ちっちゃくてかわいいです。USBケーブルを抜き差しせずに動作オンオフできるのは思った以上に便利です。休憩時間も「離席中」にならないのは不自然ですからね。これで在宅勤務が捗ります。