手が不自由な人用の入力デバイス「らくらくマウス」をPro Microで自作する

ずいぶん前の話題ですが、このニュースを見まして

www.47news.jp

これ機能的にはわりと簡単に同じものを自作できるのでは、と思ってやってみました。

※機能的に同等なものを実験的に作ってみるだけで、医療や福祉の現場または日常生活で実用に耐えうる製品を作るという趣旨ではありません

らくらくマウスとは

f:id:slideglide:20191126224000p:plain
公式サイトより引用

らくらくマウスというのは、手が不自由な人用のマウスの代替デバイスです。

  • マウスを移動させる代わりにジョイスティックやボタンでカーソル移動ができる
  • ダブルクリックボタンがあり、1回押すだけでダブルクリックができる
  • ドラッグボタンがあり、ボタンを押し続けなくても、一度押すだけでドラッグ状態にできる(再度押すと解除)
  • マウスカーソルの移動速度がデバイス側で切替可能

このあたりが主要な機能のようです。

なぜ自作できそうと思ったかというと、このへんの機能を簡単に実装できるデバイスがあるのです。

マウスの代わりになるマイコンボード Arduino Leonardo

ArduinoシリーズにArduino Leonardo(以下、Leonardo)というのがありまして、

このボードにはHID機能がついています。HIDとはヒューマンインタフェースデバイスの略ですが、要はPCにふつうにUSB接続したときに、マウスやキーボードとしてふるまえるということです。

www.youtube.com

f:id:slideglide:20191127094341g:plain

例えばこちらの動画は以前作った習作で、ボタンを押すと全自動で僕のTwitterアイコンを描画します(画面に映っているアプリケーションは、Windows標準のペイントです)。ボリュームを動かすと描画サイズの変更ができます。

これはどうなっているかというと、PCはLeonardoをHIDデバイス(ここではマウス)と認識しています。Leonardoのほうでは、手の動きの代わりに、あらかじめプログラムされた描画動作(カーソル移動とボタンクリック)をPCに送信しているというわけです。

しかもこれ、標準関数からめちゃ簡単にできるようになっており、例えばマウスカーソルを移動するだけなら

Mouse.move(xVal, yVal, wheel) //相対座標で指定

左クリックなら

Mouse.click(MOUSE_LEFT);

という感じでコマンド一発で操作できます。べんり~

ちなみに本記事ではマウス機能のみ使っていますが、HIDはキーボードとしても使うことができます。

もうひとつの、マウスの代わりになるマイコンボード Pro Micro

で、さんざんLeonardoの紹介をしてきてアレなのですが、今回は使いません。
代わりにおなじくHID機能を持った、Pro Microを使います。これはSparkFunから出ているLeonardoと似たArduino互換ボードです。
このPro Microはオープンソースなので、クローンがたくさん出回っています。今回もクローン品を使いました。

f:id:slideglide:20191123171512j:plain

接続端子はMicro USBです。長辺3cmくらいのけっこう小さいボードです。
最近ではHID機能を生かして、自作キーボード界隈でよく使われています。

ところで今回使っていないにもかかわらず先にLeonardoの話をしたのには理由があります。
今回使ったPro MicroクローンをPCに挿してみると、なんとLeonardoとして認識されたのです。しかも、その後ボード設定で「Arduino Leonardo」を選んでプログラムを書き込むと普通に動作しました。
調べてみると、中国製Pro Microクローンの多くが、Leonardoのブートローダが書き込まれた状態で出荷されているそうです。(そんなことある!?)

通常、Pro Microの開発にはArduino IDEの環境設定が別途必要になりますが、あなたがクローンを使っている場合、それは不要かもしれません。

マイコンボードにたくさんボタンをつけるには

そんなわけでマウス機能はすでにあるので、プログラム的にはそんなに難しくなさそうです。
となると障壁となるのが、らくらくマウスのボタンの多さではないでしょうか。
今回はジョイスティック版ではなくボタン版を作ろうと思っていて、そうするとボタンが16個あります。

Pro Microのデジタルピンは12個しかないので、足りません。アナログピン入れても16個しかないので……いや、足りるな。
いまになって足りることに気づきましたが、足りないという前提で製作を進めたので、ここでは足りないということにします。

調べてみると、少ないピン数でボタンをたくさん使うのは、2つのやり方がありそうです。

1.キーマトリックス方式

f:id:slideglide:20191126232101p:plain
Arduino Keypad Tutorial : Electronics Hubより引用

一般的なキーボードに採用されている方式です。例えば図の左上のボタンが押された場合、Arduinoのデジタルピン7と0がショートされます。ほかのキーが押された場合も、各キーごとに違った組み合わせのデジタルピンがつながるので、それを調べれば押されたキーがわかるわけです。
具体的にはたとえばデジタルピン0~3を出力にしてふだんLOWにしておき、4~7を入力にします。0~3を順番に一個ずつHIGHにしながら、都度4~7をdigitalRead()していけば、どのキーが押されているかわかる。

2.分圧回路を使った方式

synapse.kyoto
こちらのページで紹介されているものです。
直列に配置された抵抗の間にスイッチを配置すれば、押されたスイッチに応じて異なる電圧がアナログピンに入力されます。


抵抗分圧器を使った、多くのスイッチのセンシング(1):しなぷすのハード製作記より引用

例えば上の図でVCCと書いてあるところをArduinoの5Vピンにつなぐとします。そうすると、スイッチを押していない場合で5V、SW1を押すと0.5V、SW10を押すと4.5Vがアナログピンに入る計算になります。この電圧を読み取るだけでキー入力の判別ができますね。
(Pro Microは5Vピンがありませんが、VCCにつなぐと5V取れるっぽいです)

こちらのやりかたは抵抗をたくさん使う必要はありますが、アナログピン1つでたくさんのキーを扱えます。
使用する抵抗の計算が面倒そうですが、自動計算してくれるページまであります。ありがた祭りです。

実装

今回は何となく配線が楽そうという理由で、後者を採用することにしました。

f:id:slideglide:20191126235420j:plain

↑これが完成図です。

f:id:slideglide:20191126235200p:plain

↑こっちは配線図です。…が、スイッチの配線が多くて、ユニバーサル基板用のツールだととても描ききれなかったのでGNDしか描いてません。
右上の方にある抵抗から緑の短い線が出ていますが、あれが各カーソル移動スイッチにつながっています。
他のスイッチは普通にデジタルピンと1対1でつないでいます。

※あとPro Microの絵がなくてArduino Pro Miniで代用したので、実際とピン配置が違います。例えば5番ピンにつながっているように見える青い線は実際にはPro MicroのVCCです。

f:id:slideglide:20191126220709j:plain

配線図に描き切れなかったぶんの線はUEW線(エナメル線)でやりました。被膜されていますがはんだ付けのときにちょっと長めに熱すると勝手に溶けてくれるので、ジャンパ線として使うのに便利です。使う際のポイントとしては、被膜がついているとはんだが乗りません。はんだがしっかり乗るようならその部分の被膜はうまく溶けています。

というわけで、自作版らくらくマウスが完成しました!

f:id:slideglide:20191126220718j:plain

ソフトウェア

スケッチは長くなるのでgistにアップしました。

rakuraku_mouse.ino · GitHub

配線を間違えて移動ボタンのswitch caseがきれいに時計回りじゃなかったりしますが気にしないでください。
面倒だったところはカーソルの自然加速モードの時の速度計算くらいでしょうか。といってもめちゃ簡単な計算しかしていませんが。

  if (moveSpeedMode == moveSpeedModeNum){ //自然加速のとき
    if(i == moveButtonPrv){
      moveSpeed = (moveSpeed < 200) ? (moveSpeed * 1.03) : 100;
    } else {
      moveSpeed = moveSpeeds[0];
    }
  }

前述しましたが、このプログラムはPro MicroクローンのハードにArduino Leonardoとして書き込んでいます。

動作の様子

というわけで、完成した自作らくらくマウスの様子です。

www.youtube.com

f:id:slideglide:20191127001445g:plain
f:id:slideglide:20191127001517g:plain
f:id:slideglide:20191127001508g:plain
f:id:slideglide:20191127001450g:plain
f:id:slideglide:20191127001502g:plain
f:id:slideglide:20191127001456g:plain

実物を触ったことがないので確かなことは言えませんが、なんとなくフル機能動いている感じがします!!
寝転がってパソコン触るときに使えそうですね。

らくらくマウスのその後

あのニュースを見た当時に「自作できそう」とTwitterに書いていたところ、当事者から連絡をいただきました。

会話の続きからなのでちょっと見にくいですが、分かったこととしては

  • 後継者不在問題は解決したっぽい
  • らくらくマウスはすでに販売停止された20年以上前のハードで、ALLアセンブラで作られていた。(当時。現在は不明)
  • 作るのはできるんだけど大変なのは利用者の障害に合わせたカスタマイズ、保守対応

なのだそうです。

自分も遊びなのでサクッと作れましたが、これでちゃんと筐体作って耐久性も高めてソフトもハードも信頼性の高いものにしていったうえでさらにカスタマイズ&保守つき……とか思うと簡単に真似できるものではないな、という感じです。

ちなみに実は本物のらくらくマウスも、完成基板付きの自作キットが販売されているようです!腕に覚えのある方はどうぞ。