クワエルマウス開発中で、大きな課題として、歯とセンサ端子の接触形状、材質がマウス操作性を大きく左右することが判ったのですが、ひずみゲージ式のマウスポインタだからこのような課題が発生するのであって、その他方式ではどうなのかを検証して、クワエルマウスとして、ひずみゲージ式が本当に正解なのかをしっかりと検証してから先に進めていかないと、完成したところで、他方式のほうが簡単で性能が良いということになっては、コト作り的には、失敗作となってしまうので、横道にそれますが、任天堂SWITCHで使われているというALPS電気のサムスティックをマウスにしてみました。
●Nintendo Switch Proコントローラー
https://www.nintendo.co.jp/hardware/switch/accessories/
修理ブログたくさんありました
https://sundaygamer.net/repair-of-pro-controller/
このJOY STICKのデバイスを調べたら、ALPS電気製の2CHのポテンショデバイスでした。
●仕様
https://www.alps.com/prod/info/J/HTML/MultiControl/Potentiometer/RKJXK/RKJXK_list.html
●試作備忘録
サムスティックからmbedへのAD変換取り込み回路ができたので、あとは、USBデバイスでプログラムをくむだけです。
このやり方は、こちらの記事が丁寧で、確実です。mbed 5でのSTM32用のライブラリを使いますので、
対応CPUボードは、Nucleo F4xxx で、私が動作確認しているのは、F446REとF411REは動作しました。
https://qiita.com/eggman/items/9e7dad30e4d2833af17f#
USBケーブルをばらして配線するのですが、ピン配列間違いやすいので、ここでチェックさせていただきました。
https://matome.naver.jp/odai/2135385321207359701
●プログラム
20分で完成しました。
// ALPS RKJXK SAM STICK control // PA_0,PA_1 AnalogIn 2.5V-0.5V //2019/05/31 Shinshu-Makers #include “mbed.h” #include <math.h> #include “USBMouse.h” USBMouse mouse; AnalogIn sx(PA_0); AnalogIn sy(PA_1);Serial pc(USBTX, USBRX); // tx, rx for debug terminal Timer t;int main() { int i; int xd,yd; float xa,ya; float xsum,ysum; float xave,yave;pc.baud(115200);t.start(); xsum=0; ysum=0; xave=0; yave=0; for(i=0;i<100;i++){ xsum=xsum+sx.read()*3300; ysum=ysum+sy.read()*3300; } xave=xsum/100; yave=ysum/100; //******************************************************************************************************** while(1){xa=sx.read()*3300; ya=sy.read()*3300; xd=int(-(xa-xave)/100); yd=int((ya-yave)/100); mouse.move(xd, yd);pc.printf(“%d,%d,%4.4f\n\r”,xd,yd,t.read());} } |
これで制御すると少し遅めですがスムーズです、しかし、IBM トラックポイントのような変位無しで力だけで動作させるタイプと違って、変位が必要なので、一瞬の遅れを感じます。ゲームスティックもひずみゲージ式の力センサスティックのほうがいいのかもしれません。
●以後
回転可変抵抗式のセンサとひずみゲージ式センサでのポインティングデバイスとしての、原理比較を行って、
通常のサムスティックとクワエルマウスとしての優劣を比較して、コト作りとしてどの方式がよいか検討してみます。
触った感じは、ストロークが必要な点でひずみゲージ式がよいと思いますが、サムスティックの微小角度変化を増幅して、制御できればひずみゲージと同じになるかを検証しないと判りません。