3Dマウス③ Arduino Pro USB-Cが届いた!
2023.01.04


前回の3Dマウスの記事はこちら
https://randol-news.net/art/00572.html


小いさっ!(笑)
Type-Cのバージョンはいくつかあるみたいですが、
紫基盤の一番小さいタイプを選んでみました。
Arduino Proはピンが少ないので
割り当てを上手にしないといけませんね。



Arduino Proで割り込みに使えるのは
D0,D1,D2,D3,D7のみです。
画像でいうところの水色の数字がデジタルピンとなります。
液晶系にI2C通信がよく使われているのでね、今のところ付ける予定はないけど
D2/D3(SDA、SCL)ピンは確保しておきたい。
なのでD0,D1,D7が空きとなります。

ピンの並びを見ると、D0(RX)、D1(TX)、GNDがきれいに並んでいるので
この3つをロータリーエンコーダーに使いましょうか。
USBでPCと通信している最中に、
このRX、TXのピンを使っていいのかはこれから調べてみますが、
ダメだったらI2Cはあきらめる(;´Д`)
Arduino ProをRX,TXで2個繋げてキーボード操作している文献を見たことあるから
おそらく大丈夫だと思うけど。



とりあえずこのように配線した。
特に問題なければソースファイルもこのピンでカスタマイズします。



ジョイスティックは5V、GND、VRx、VRy、SWの5配線必要。
VRy()をD18(A0)に。
VRx(青)をD19(A1)へ、
SW(黄)をD20(A2)へ。
赤はVCC、灰はGNDへ。



基盤の固定が甘かったらピンホールをネジ穴に使おうかな。
基板の角に位置するD9(A9)、RAWのピンホールは使わないのでここがよさげ。
ちょっと押さえが弱いようならD10(A9)も犠牲になってもらおう(;´Д`)
極小の穴なので1mmネジで通るかなって感じだけど、
まぁ、大量に集めた中古ネジストックにあるでしょ。



テスト部品をいつまでも段ボールの上に張り付けておくわけにはいかないので、
Arduino Proに合わせた土台を試作します。



前回試作したジョイスティックの土台の位置を継承して、
完全固定の台座を用意。



ジョイスティックの底面は半田でデコボコしてるのでスペーサーを用意。
FDMだと複雑な造形を一部品にすると難易度が上がるので、
こうやって分けて印刷すると出来上がりがきれいです。



スペーサーが乗るゲタ。
足が2本生えてますが、これは強度が弱いのでおまじない程度だけど、
Arduinoを上から押さえつける役割を与えました。



位置関係はこんな感じ。
Arduino Proはジョイスティックの下に隠れるようにしました。
USB-Cケーブルのコネクタの処理が思いつかなくて
ここ以外ではスペース的に厳しかったんです(;´Д`)
とはいっても、最適解だと思ってます。
おかげで空間はかなり余裕ができました。



上蓋はこんな感じ。
普通にドーム型にして、ジョイスティックが干渉しないように穴を設ける。
ロータリーエンコーダーは上蓋に取り付けるイメージです。
上蓋はFDMでの印刷は困難だけど、そこはおいおい考えるとして、
試作はレジンで光造形します。



底面のベースをFDMで印刷。素材はABSを使ったけど、盛大に失敗(;´Д`)
0.2mmノズルを使っているのに、0.4mm設定で印刷したものだから、
印刷ラインや吐出量などがガタガタ。よく完走したなという感じ。
普通ならノズルが詰まってスロートに逆流してもおかしくない。
出来上がったものはガタガタだけど、ま、いいか(;´Д`)



実際にジョイスティックを載せてみた図。
ネジ穴に微妙な問題が出てる。ネジ山が崩れてしまったようだ。
もしかしたらインフィルの設定をかなり粗いメッシュにしたかもしれない(;´Д`)
今回の印刷は何から何までダメダメだわ。
コストを下げるためにインセットナットを使わない設計にしたつもりだけど、
この試作では使わざるをえないか(;´Д`)
USB端子部分は、同じくFDMで印刷した留め具を用意し、M2ネジで固定。
これも微妙。穴はあらかじめ用意せずピンバイスで自分で開けた方がよさそうだ。
あと留め具の強度も弱い。改善点が多々見つかっていく(;´Д`)



配線はArduinoの上にこれだけスペースがあれば十分通せそう。
ここは思い通りに行きそうだ。
Arduinoは上からの押さえのおかげか遊ぶ様子もなくしっかり固定されている。
うん、悪くない。

では配線してみますかね。



いい感じだが、ジョイスティックのデュポンコネクタが
思いのほか邪魔になっていることに気が付く(;´Д`)
これは外装を固定するときの障害になりそうだ。
ORBIONの二の舞か?(笑)
ちょっと工夫しなくてはならんね。

左手を上に置いてみた感じ、なかなかしっくりくる(*'▽')
これ外装いらない説?(笑)



配線とソースの書き換えが正常にできているか動作確認。
問題なく動いているようだ。よしよし。
では、キーボードとマウスの動作をPCに送れるのか実験。
キーボードの操作方法は前回の記事で調査していたので万全です。
マウスも同じような方法で使用可能でした。
Mouse.hをincludeして
SETUPにMouse.begin();
を追加で使用可能。
カーソルの操作は
Mouse.move(x,y,ホイールをスクロールする量);
こんな感じで行けるっぽい。
マウスのボタンは
MOUSE_LEFT:左ボタン(デフォルト)。
MOUSE_RIGHT:右ボタン。
MOUSE_MIDDLE:中ボタン。
この3つが制御可能で
Mouse.press(ボタンの種類);
で行います。
Mouse.release(ボタンの種類);
を実行するとマウスのボタンを押すのをやめます。

とりあえず、ジョイスティックを押したらShift押しながら
マウスの中央ボタンを押しつつカーソルを右に移動するというのを組んでみる。
これが動けばおおむね動作確認はOKだ。
100msの速度で10pxずつの移動で実行してみました。



映像は暗いですが深夜にスマホで撮ったものですのでご容赦を。
反応は良好。100msは遅いかな?もう少し早くても良さそう。
時々シフトキーを押し忘れることがあるね。
これはシフトボタンを押してマウスを動かすまでウエイトが無いことが原因かな。
課題が見えてきた(;´Д`)

とりあえず今回はここまで。
次はジョイスティックの動きに合わせて移動量を変化する部分をつくりますかね。
あ、仕事の合間に作っているので進行が遅いです(;´Д`)

次の3Dマウスの記事はこちら
https://randol-news.net/art/00577.html

- CafeNote -