普段はMacbook Proでtwitterを読んでいる。すると、二本指でトラックパッドをこすることが多くなる。当然ながらやりすぎると指が擦れて痛くなることがある。
スクロールマウスを付けてみたけれど、Logitechを含めて数種を試してみたけど、分解能がイマイチなのかヌルヌルにはならずにカクカクしてしまう。
そのため、トラックボールを導入しようかと思ったけれど、市販品は案外高価なので、これだけのために導入するのもはばかられる。Aliexpressで探してみても、よさそうで安いものはない。流行らないのね。
Arduinoでジョイスティックを作ったらいいのではないかと思い至った。
最初は、Digisparkでカーソルキーを叩いたら簡単ではないかと思っていたのだけど、使っているtwitterクライアントである「夜フクロウ」では、カーソルキーでは1メッセージごとに移動するので使えない。ヌルヌル動いてくれないので、流し読みしにくいという問題もある。
ジョイスティックのパーツは、だいぶ前に買ってあったものを使う。ジャンク箱の中に転がっているのは覚えているけど、どこで買ったのかすら忘れている。

これと同じものかな?
4 ピース/ロット Arduino のデュアル軸 xy ジョイスティックモジュール高品質 PS2 ジョイスティックコントロールレバーセンサ KY 023 定格 4.9 /5|集積回路| - AliExpress
https://ja.aliexpress.com/item/4000055267372.html

アナログの2軸にプッシュスイッチがついている。ピンは5つで5V, GND, SW, VRx, VRy。

とりあえず、ジョイスティックモジュールの動作確認のために、いつも使っているNodeMCU-32Sを自作のバタフライブレッドボードに差し込んで接続してみる。無線LANもBluetoothも使う予定はないので少しもったいないけど。
配線は以下のようにした。
GND - GND
VIN - +5V
D25 - VRx
D26 - VRy
D27 - SW


スケッチはこんな感じ。とりあえず、アナログで値を取ってシリアルに出力してみる。

const int pinX = 25;
const int pinY = 26;
const int SWPin = 27;
int valueX = 0;
int valueY = 0;
void setup() {
pinMode(SWPin, INPUT_PULLUP);
Serial.begin(115200);
delay(1000);
}
void loop() {
int flag = digitalRead(SWPin);
if (flag == LOW) {
Serial.println("PUSH!");
}
valueX = analogRead(pinX);
valueY = analogRead(pinY);
Serial.print("X: ");
Serial.print(valueX);
Serial.print(", Y: ");
Serial.println(valueY);
delay(10);
}

書き込んでシリアル出力を観察してみる。なにもしていなくても値が振れる。

X: 2782, Y: 2866
X: 2783, Y: 2865
X: 2781, Y: 2867
X: 2783, Y: 2866
X: 2783, Y: 2865
X: 2782, Y: 2864
X: 2783, Y: 2865
X: 2781, Y: 2867
X: 2783, Y: 2865
X: 2783, Y: 2865
X: 2783, Y: 2865
X: 2783, Y: 2865
X: 2783, Y: 2867
X: 2783, Y: 2865
X: 2782, Y: 2867
ジョイスティックを動かすと、値は0-4095という感じに出てくる。delay(100)だと、微妙な値はほとんど取れていない感じ。動作の調整も難しい。delay(10)だと、だいぶ細かい中間値が取れる。
ボタンを押すと"PUSH!"と表示された。ジョイスティックモジュールの動作は問題ないようだ。
さて、つぎはUSBデバイスにするにはどうするかだな...
続きはいつになるかわからない...
オリジナル投稿:
ヌルヌル・スクローラーを作る -1-|kinneko|pixivFANBOX
https://kinneko.fanbox.cc/posts/1035789



