パソコンを操作中に邪魔を入れる装置を作った

デイリーポータルZに記事を書きました。
portal.nifty.com

明治大学で毎年行われているABProというイベントのレポートだ。
僕が参加したのは3回目で(前回作ったのはこれ)、めちゃくちゃ面白いイベントなのでぜひ記事を見てほしい。
見てほしいのだが、こっちでは発表したものについて書いていきたい。

作ったもの

マウス入力をすると勝手にマウスが動き、キーボードを打っていると勝手にキー入力がされるシステムを作った。
普段操作するマウスやキーボードとは別に、邪魔するためだけのマウスとキーボードを用意して、それを動かすというものだ。

ひとまず動画を見てもらいたい。
www.youtube.com

マインスイーパをやっていると勝手にマウスが動いて、普段なら絶対に押さないような「2」の隣のマスをクリックしてしまう。
走れメロスを写経していると、「かの邪智暴虐の王」が「かのじゃあちあああああ暴虐の王」となってしまってヘナヘナと力が抜けてしまうこと請け合いである。

作り方

http://portal.nifty.com/2016/10/19/b/img/pc/30.jpg
見た目的にはこういう構成になった。

  • タッパーの中にワイヤレスマウスが入っている。
  • タッパーにはサーボモータをくっつけていて、動かす命令が来ると中に入っているマウスを左右に振る。
  • ワイヤレスキーボードの上空にキーを押すための出っ張りを用意して、モータでそれを動かして押す。

ハード側はこういう感じで作って、Arduinoで制御してやる。
制御し始めるトリガをPCから送るために、Cocoaアプリケーションをswiftで書いた。
ちょうど会社で新卒くんにswiftでのiOSアプリの作り方について教えてもらったのが役に立った。超感謝。

Cocoaアプリケーションだとグローバルなマウスイベントやキーイベントを取得出来るらしい。
つまり、ブラウザでもExcelでも、他のアプリケーションを使っていても、マウスやキーボードを使っているかどうかがわかるようになるのだ。

実装にあたっては、こちらのエントリを参考にさせていただいた(感謝!)。
mask.hatenadiary.com

マウスを動かすたびに毎回邪魔を入れると操作出来なくなってしまうので、ランダムでたま~に邪魔が入るようにしてある。
邪魔を入れると判定すると、pythonスクリプトを介してArduinoにシリアル通信をする。
※なぜpythonを介したかというと、シェルで書いたらなぜか動かなくて、しかもそれが本番の2時間前とかで、めちゃくちゃ焦って昔使ったスクリプトを流用したからです。

これで邪魔を入れることに成功した。

コードは下記に置いてある。
github.com

ABProについて

先述の通り3回目の参加となったが、毎回最高のイベントである。
特に何が最高かというと、コンテストではないのが良い。
記事の最後にも書いたのだけど、自分はこういうのが作りたいと思ったんだ、だから作ってみた!というのが許されるし、それをまっすぐに受け止めてくれる。
何の役に立つの?などと聞かれることはない。

頭の悪いメカ発表会」というイベントを6月にやったのだけど、(作品のレベルは抜きにして)近いものを感じた。
こういう場に出るのが最高に楽しいので、どんどんやっていきたい。