Button switch mouse. Moving 1 dot by 1 push.
1回押すと、1ドット分ポインタが移動するマウス
マウスでドラッグしていると、あと1ドット移動したいのに、行ったり来たりして、なかなか定まらない事があります。
精神衛生上良くないので、押しボタンで1移動単位を送るUSBマウスを作ってみました。
プログラムは、LPC11U35を搭載したオリジナルCPUボード用に作成しましたが、mbed対応のボードで多分動作可能です
(ポート名は、使用ボードに合わせて変更してください)
*オリジナルCPUボードは「MC11U35」の名前で、スイッチサイエンスさんで販売しています。
mbedに対応したCPUを搭載していますので、クラウドでのプログラム作成とUSBからのプログラム書き込みが可能です。
*PC用なので、薄くて小さい方が便利です。上記のボードのフォームファクターを生かせてまとめる事ができました。
ソフトの構成。
プログラムはmbedクラウド上で、USBDeviceを読み込むだけの作業で作る事ができます。
このあたりは、mbedの中の人に感謝です。
処理と言ってもUSBDeviceの中のUSBmouseを10mSに一回、呼び出しているだけです。
**注意:MC11U35を使用する場合は、プラットフォームの選択をmbed LPC11U24
に設定してください**
プログラムはさておき、今回は工作を中心に行きたいと思います。
用意した材料は、ケース、タクトスイッチ6個、CPUボードです。
左が用意したケース、右が開封した状態です。
収まり具合をチェックします。余裕があります。
はめ合いのフチにUSBのハウジングがあたりそうですので、先に削る事にします。
USBコネクタをはめて、位置をマーキングします。
ケースの材質は柔らかいので、少し削るだけなら、カッターナイフで大丈夫です。
削りが終われば、基板を固定します。
真面目に四隅を固定するのがベストですが、動きまわるものでもないので、厚い目の両面テープで貼り付ける事にします。
(CPUの裏側には、部品の足とかの出っ張りはありません)
基板を接着した後、上のふたをかぶせて、USBコネクタのハウジングの逃げを確認します。
現物合わせで切り込み場所にマーキングします(左)、 こんな形に削る必要があります(右)
カッターナイフでは無理がありますので、方法を考えます。
・のこぎりで縦に二本切り込みを入れて、へし折る。
・ハンドニブラーで切り込む。
・Pカッターを使う。
・ヤスリで削る。
・ハンドルーターで加工する。
・NCの切削マシン(もってません)
・ドリルで連続する穴を空ける。
最後の方法で行く事にしました。
穴をあけて(左)、ニッパーで穴の間を切断します(右)
半月状に残った出っ張りですが、左右はニッパーで切り取る事ができます。底面(上の方?)はヤスリで削りました(左)
仮にふたをして、ちゃんと刺さるか確認します(右)
押しボタンの配置を検討します。
実物を置いて、よさそうな場所を探します。位置が決まれば、スイッチの間隔を測ります。
最終的には、右の様な配置に決まりました。位置を紙に書き出して、穴あけのマーカーにした所です。
位置が決まれば、マーカーにした紙の上から、ドリルで穴を空けます。1φで開けましたが0.8φでも入るかもです。
紙を除去すると...(左)OK、裏返せば...裏には、基板取り付け用のポストがありました。
裏を良く確認せずに、デザイン重視で配置した上の失敗です。何事もなかった様に、ポストをニッパーで飛ばしました(右)
もう少し、横に配置していると、ケースの上下を止める、ポストに当たるところでした、セーフ。
今回は、印刷でパネルを作りました。白いケースですので、そのままマジックで手書きでもOKだし、そもそも文字入れなんか不要の声が聞こえてきそうです。
パネルをかぶせたので、スイッチの穴を光にすかせて、尖ったピンセントで穴を空けました。
そこに、タクトスイッチを差し込みます。
ほとんど、完成品と同じ形状です。
無理にスイッチをひね事で、すこしくらいの歪みならこの時点で修正できます。
裏側でスイッチの配線を行います。タクトスイッチの足に直接電線をハンダ付します。
CPU側のピン位置は、近い順で適当に決めました。
プログラムの書き込みです。
おしまい...
ピン接続、
CN2はMC11U35のコネクタ番号です。Pn_xxはLPC11U35のピン名称です。
右クリック用ボタン ・・・ P1_16 ・・・ CN2 / 5番ピン
ポインタUPスイッチ ・・・ P1_19 ・・・ CN2 / 7番ピン
ポインタLEFTスイッチ ・・・ P1_27 ・・・ CN2 / 11番ピン
ポインタRIGHTスイッチ ・・・ P0_2 ・・・ CN2 / 9番ピン
ポインタDOWNスイッチ ・・・ P1_24 ・・・ CN2 / 17番ピン
左クリック用ボタン ・・・ P1_28 ・・・ CN2 / 19番ピン
スイッチ共通のGND ・・・ CN2 / 1番ピン
Revision 0:00c483aa2b22, committed 2014-07-20
- Comitter:
- morita
- Date:
- Sun Jul 20 02:28:20 2014 +0000
- Commit message:
- First version.;
Changed in this revision
diff -r 000000000000 -r 00c483aa2b22 USBDevice.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBDevice.lib Sun Jul 20 02:28:20 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/USBDevice/#0c6524151939
diff -r 000000000000 -r 00c483aa2b22 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jul 20 02:28:20 2014 +0000 @@ -0,0 +1,69 @@ +#include "mbed.h" +#include "USBMouse.h" + +USBMouse mouse; + +int main() { + DigitalIn psr(P1_16), psl(P1_28); + psr.mode(PullUp); psl.mode(PullUp); + DigitalIn swu(P1_19), swl(P1_27), swr(P0_2), swd(P1_24); + swu.mode(PullUp); swl.mode(PullUp); swr.mode(PullUp); swd.mode(PullUp); + + int16_t x = 0; + int16_t y = 0; + bool swuf=false,swlf=false,swrf=false,swdf=false; +//auto repeat stating time = 1.0sec +#define REPEATTIME 100 + uint8_t repeat_timer=REPEATTIME; + + while (1) { + if(swu==0){ + if(swuf==false){ + y--; + swuf=true; + } else { + if(repeat_timer==0){ + swuf=false; + repeat_timer=2; + } + } + } else swuf = false; + if(swl==0){ + if(swlf==false){ + x--; + swlf=true; + } else { + if(repeat_timer==0){ + x--; + repeat_timer=2; + } + } + } else swlf = false; + if(swr==0){ + if(swrf==false){ + x++; + swrf=true; + } else { + if(repeat_timer==0){ + x++; + repeat_timer=2; + } + } + } else swrf = false; + if(swd==0){ + if(swdf==false){ + y++; + swdf=true; + } else { + if(repeat_timer==0){ + y++; + repeat_timer=2; + } + } + } else swdf = false; + mouse.update(x, y,((psr==0)? 2:0)|((psl==0)? 1:0),0); + x=0; y=0; + if((swuf | swlf | swrf | swdf)==false)repeat_timer=REPEATTIME; else repeat_timer--; + wait_ms(10); + } +} \ No newline at end of file
diff -r 000000000000 -r 00c483aa2b22 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Jul 20 02:28:20 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/04dd9b1680ae \ No newline at end of file