manvaのエンジニアリング魂

エンジニアリング・ものづくり・DIYをもっと身近にするためのブログ。インスピレーションを刺激します。

Arduino Leonardoでマウスを自作する方法

Arduino Leonardoを使って,マウスを自作してみることにした。自作キーボードは流行っていて,作っている人が多いが、マウスを自作している人はあまり多くなさそうなので,やり方を書いておこう。

f:id:manva:20200912091314j:image

私は最近,マウス内蔵キーボードというのを開発中なのだが,今回作ったのは,普通のマウス。前に作ったマウス内蔵キーボード↓では,キーボードとマウスを別々にPCにつないでいたので,USBポートが2個必要だった。ここは,同じマイコンで処理して,デバイスとして一体感を出しておいた方が格好いいだろう。そのための練習として,まずマウスを作ることにした。

manva.hatenablog.com

今までは,キーボード用にQMK firmwareを使っていたが,調べてみると,マウスを開発するなら,Arduino IDEの方が簡単そうだ。QMK firmwareにマウスの処理を追加するのと,Arduino IDEにキーボードのレイヤとか左右分割のための通信などの処理を追加するのとで,どちらが楽か微妙なところだが,Arduino IDEの方で試してみることにした。

 

マウスの作り方を調べてみると,「キット」というのが見つかる。ただ,これは子供向けということなのか,出来上がった基板に部品をはんだ付けするだけでできてしまう。今回はマイコンまわりも自分で作りたいので,これではダメだ。

手作りマウスキット

手作りマウスキット

  • メディア: おもちゃ&ホビー
 

 

もう少し調べると,私の求めていた丁度よいものがあった↓。センサ部のみの基板と、レンズ(透明プラスチック部品)のセットで、Arduino Leonardoに繋いで使う。完成品のマウスが100均で買えるのに、部品だけで買うと数千円になるのは,慣れていない人にとっては損した気がするかも知れないが,量産品ではないのでこれくらいは普通だ。

www.instructables.com

 

マウスというのは世界中で使われているので、高度なイメージセンサがICとして出来上がっている。1個単位で売られている物は少ないが、探せば数百円くらいからある。仕組みとしてはほぼカメラで、下向きに撮影して画像処理で動いた距離を計算している。上記の基板に使われているイメージセンサADNS-3050は、19x19ピクセル(361画素)のカメラになっていて、計算結果の移動距離XとYの値がメモリのアドレス0x03と0x04に格納されるので、マイコンでこれを読めば良い。基板の方は、そのイメージセンサICとLEDのちょっとした配線と位置合わせだけのためのものなので、KiCADとか覚えれば自分でも作れそう。

上記サイトから マウスのボディ部分のSTLファイルがダウンロードできるので,底面の部品だけを3Dプリンタで作った。基板の寸法図が無いようなので、後でこれを実測して自分用に作り直そう。

配線は図があるのでその通りに配線し,Arduino Leonardo用のソース(スケッチ)もダウンロードして実行したら,すぐマウスとして認識され,動いた。シリアル通信で受信したXとYの値を、Arduino IDEのシリアルモニタ機能で表示するサンプルもあり、こちらも問題なく確認できた。

 

マウスホイールについては,こちら↓の記事にわかりやすく説明されている。

nn-hokuson.hatenablog.com

最初うまくいかず手間取ったが,接触不良があったようで,最終的にダイソーのマウスからエンコーダを取り外して,記事の通り配線して,ソースをコピーして書き込んだだけで,ちゃんと動いた。

A相B相の話は上記記事に詳しく書かれているのでそちらを見てもらうとして,配線3本だけで,電源とかどうなってるの?という原理を少し補足しておく。マウスホイールのエンコーダは,A相とB相がスイッチで表される↓。

f:id:manva:20200912031001p:plain

マイコン側には,内部プルアップ抵抗というのがある(ソフトで設定すれば使える)ので,A端子やB端子は,スイッチがオンのとき0V (Low),オフのとき5V (High)となる。

 

Arduino Leonardoでは,割込みに使えるピンが0,1,2,3,7番の5本。イメージセンサADNS-3050基板の方で,サンプルソースは3番ピンを使っていたが,エンコーダの方で2番と3番ピンを使って割込みをするので,10番ピンに変更して,ソースをマージしたら同時に動かせることが確認できた。

主要な部分はできたので、後はボディをFusion3603Dプリンタで作って、左右のクリックのスイッチをつないで、マウスホイールエンコーダをちょうど良い場所に固定して、できればその辺の部品を取り付ける基板をKiCADとかで作って、Arduino IDEで用意されているマウスの関数を使ってプログラムすれば、あっという間に自作マウスの完成だ。

……うん、あっという間に…

……まあ作り方は見えたので、ここぐらいまでで良いか。