【テレワーク向け!】PC操作なしでもスリープしない!USB自動操作マウスの作り方(Digispark使用)

【テレワーク向け!】PC操作なしでもスリープしない!USB自動操作マウスの作り方(Digispark使用)

[2020/5/7 追記]
本日より販売を開始しました。
こちらからご確認ください!

新型コロナ流行に伴い、自宅でテレワークをしている方が多いと思います。
そんな中、会社によってはPCが無操作だと5分ほどでスリープモードになって、
挙句の果てにチャットツールのステータスが離席中になっていたりなど、
サボるにも神経すり減らしてはいませんか?

いや、別にサボってはないんですがね。いちいちステータス気にして本来の仕事のパフォーマンスが発揮できていなければ本末転倒です。

そこで今回はそんな不安を取り払うべく、
定期的に自動で動いてくれるUSBマウスを作ってみることにしました。

まずは仕様決め

PCをスリープさせない方法は色々考えられますが、
ソフトウェアだと会社PCに入れられない。
ハードウェアだとUSBメモリ等のデバイス接続NG。
と八方塞がりだったのですが、外付けマウスやキーボードは挿して使ってたりしたので、それをマイコンで再現すればいいのでは?と考えました。

部材選定

できるだけ小型でUSBにそのまま挿せるようなデバイスを探していた所、
こんなのをAmazonで見つけました。

Digisparkというマイコンの互換機のようでArduino IDEで開発が可能とのこと
しかもこのマイコン、ベースがATtiny85というローエンドマイコンなのに仮想的にUSBを使うことができるというではないですか!

1個300円ちょっとでUSB機器が作れるとは驚きですね。
さっそくポチッと購入して、プログラムを書き込んでみましたよ!

書き込み用作業

Arduino IDE導入

みなさんArduino向けソフトウェアの導入は済んでいると思いますが、
していない方は以下を参照の上、Arduino IDEの導入をしてください。

Digispark用ボードマネージャーの追加

環境設定→設定→追加のボードマネージャ のURLに”https://raw.githubusercontent.com/LukasSchulz/arduino-boards-index/master/package_digistump_index.json”と設定してください。

*公式ガイドはhttp://digistump.com/package_digistump_index.jsonを指定していますが、最新版Mac OS(Catalina 10.15.3)には対応しておらず書き込みできなかったため、有志のボードマネージャーファイルを使用しています。

Digispark用ボードマネージャーの導入

ツール→ボード→ボードマネージャーを選択

Digistump AVR Boardsをインストールしてください。

これで導入準備は完了です。

Lチカ動作

動作確認のためシンプルなLED点灯プログラムを動かしてみましょう。

Arduino IDEでファイル→スケッチ例→Digispark_Examples→Start
*もしDigisparkのスケッチ例が出てこなければArduino IDEを再起動してみてくださいね。

そしたらボード”Digispark (Default – 16.5mhz)”を選択しましょう。

通常、Arduinoの書き込み時はUSB接続してそのまま書き込みボタン押しますが、Digisparkの場合手順が異なります。
この時点ではDigisparkをPCに接続しないでください!!(←これ重要)

挿していない状態で一旦書き込みボタンを押すと、
ステータスコントロールに”Plug in device now.. (will timeout in 60 seconds )”と表示されます。
このメッセージが表示されたら60秒以内にDigisparkをPCに挿してください。

正しく書き込みが行われると以下のようなステータスメッセージが表示されます。

*結構失敗します。あきらめずに何度かトライしてくださいね。

自動仮想マウス サンプルコード

サンプルスケッチにあったUSBマウスのプログラムを多少いじって
非常にシンプルなコードを作成してみました。

#include <DigiMouse.h>

void setup() {
  DigiMouse.begin(); 
}

void loop() {  
  DigiMouse.moveY(1); // Y軸に1動かす
  DigiMouse.delay(15000);//15秒待つ
  DigiMouse.moveY(-1); //Y軸に1動かす
  DigiMouse.delay(15000);//15秒待つ  
}

15秒おきにマウスのカーソルが1(単位よく分かりません。。)上下に動くだけです。
これだけのサンプルコードでもちゃんとスリープすることなく動作し続けることができました。
なお1の変位量は目視でわからないレベルのため、USB挿したままPCを操作したとしても操作に影響を受けることはなかったです。

まとめ

Digispark互換機を用いることで、半田付け等の電子工作なしで、
非常に簡単にスリープ防止の機器を作製できました。
名付けてスクリーンキーパー!
PC側からは外付けのマウスとして認識されますので、会社側のセキュリティでUSBデバイスが禁止されている場合でも使える場合は多々あると思います。
今回は定期的に上下するだけのマウスですが、プログラムを複雑化することでほんとに仕事しているようにも見せられる?!のではないかとも思いました。