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
3Dマウス② ファームウェアを作り始めよう。
2022.12.15


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


ロータリーエンコーダーとジョイスティックの検証は済んでいたので、
まずは2つを混合させるだけの簡単な仕事から。

まずピン設定や変数、定数の宣言はIncludeで取り込む形にして
よく使うファイルを見やすくすっきりさせた。
今後ソースが肥大化するにつれて視認性の確保と
カスタマイズ性が失われることを防ぐためにも重要。

部品の位置や配線の都合により、X軸、Y軸の値の向きが逆になったりすることもあり得るので
フラグで正位置、逆位置を指定できるように。
0~1024という値を返すジョイスティックは少々扱いにくいと考え、
-512~512で受け取れるように加工。0がニュートラルを示すように分かりやすくした。
実際のニュートラルは個体差があるので、Setupが動いたときに0補正するようにした。



試験用に用意したArduino Nano
中国の互換機です。本家だと思って買ったら偽物だったという奴(;´Д`)
本家との大きな違いはUSB接続。CH320のドライバーを入れないとつながりません。
まぁ動作検証するだけなら十分でしょう。
実はこの企画はATmega32u4を搭載したArduinoじゃないと動きません(;´Д`)
Arduino ProかLeonardoじゃないと実現できないのです。

なぜならキーボードとして認識させる機能がNanoにはないからですね。
でもまぁ、いま使えるのが無いので仕方ないね(;´Д`)
ちょっと急ぎでLeonardoを注文しとこう。

ジョイスティックのVRX(緑)をA1へ、VRY(青)をA0に。SW(オレンジ)をD4へ。
赤線は5V、黒はGNDへ。
ロータリーエンコーダーの緑縞線をD3、青縞線をD2へ。青線をGNDへ。



Arduinoを挿しているこのソケットがかなり便利。
デュポンのオスを挿してもいいし、裸線をさしてもいい。
ネジを締めれば簡単には抜けないので試作では大変重宝しています。(*'▽')



走らせてみた。
実行、修正を数回繰り返し何とか満足いくレベルに。

次はFusion360にキーボードの信号をどうやって送るかを考える。
私は初めて使うライブラリだけど、Arduinoには便利なものが最初から用意されている。
ただしArduino Pro(Leonardo)を使っている場合のみ使用可だけど・・。
いちいちドライバーやらなにやらを自分で組む必要はないみたい。
そして使い方は簡単らしい。

Keyboard.hをIncludeして、setupにKeyboard.begin()を入れ込めば
パソコンはArduinoをキーボードとして認識してくれるとのこと。チョー簡単。
あとは
Keyboard.print(文字データ);
Keyboard.press('文字データ');

これらを使うだけで文字を送れるという話。
文字じゃない特殊キーはKeybord.h内に定数が用意されていて、

#define KEY_LEFT_CTRL 0x80
#define KEY_LEFT_SHIFT 0x81
#define KEY_LEFT_ALT 0x82
#define KEY_LEFT_GUI 0x83
#define KEY_RIGHT_CTRL 0x84
#define KEY_RIGHT_SHIFT 0x85
#define KEY_RIGHT_ALT 0x86
#define KEY_RIGHT_GUI 0x87
#define KEY_UP_ARROW 0xDA
#define KEY_DOWN_ARROW 0xD9
#define KEY_LEFT_ARROW 0xD8
#define KEY_RIGHT_ARROW 0xD7
#define KEY_BACKSPACE 0xB2
#define KEY_TAB 0xB3
#define KEY_RETURN 0xB0
#define KEY_ESC 0xB1
#define KEY_INSERT 0xD1
#define KEY_DELETE 0xD4
#define KEY_PAGE_UP 0xD3
#define KEY_PAGE_DOWN 0xD6
#define KEY_HOME 0xD2
#define KEY_END 0xD5
#define KEY_CAPS_LOCK 0xC1
#define KEY_F1 0xC2
#define KEY_F2 0xC3
#define KEY_F3 0xC4
#define KEY_F4 0xC5
#define KEY_F5 0xC6
#define KEY_F6 0xC7
#define KEY_F7 0xC8
#define KEY_F8 0xC9
#define KEY_F9 0xCA
#define KEY_F10 0xCB
#define KEY_F11 0xCC
#define KEY_F12 0xCD

この定数を利用すれば特殊キーの動作をさせることが出来るっぽい。
例えばコピペで使うCTRL+Vはこんな記述。

Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('v');
Keyboard.releaseAll();

FusionもCTRLとかSHIFTとか使うからこれの応用だね。
実際に動かしてみたいけど、Arduino Proがないので届くまでお預け(;´Д`)
仕方ないので、その間他のことを考える。
電流はどれくらい流れてどのくらいの太さの配線でいいのか確認してみよう。
これも結構大事な事。

まずは、ジョイスティックから。



アイドル時に流れている電流は19.3μA



ぐりぐり動かしているときの電流19.4μA
全く同じ。0.1違うのは誤差の範囲です。
こんなに小さいのね。



これはロータリーエンコーダーのアイドル時、GNDラインに落ちる電流の様子。
1.5μAとほぼ無いに等しいレベル。



これはぐりぐり回しているときのGNDラインの様子。
写真では18.8μAまで上昇をとらえてるけど、最大25μAくらいまではあがるっぽい。
それにしたって、こんなもんなんだなー。



XとY軸のうちの信号線を1本をひろってスティックをぐりぐりしている様子。
だいたい25μAが上限だね。



ジョイスティックの様子は一応動画でも残してみた。
オシロスコープのように値をリアルタイムに表示することはできないけど、
だいたいの様子はわかる。

ま、予想はしてたけど、ジョイスティックもロータリーエンコーダーも、
極細配線で十分という結果に。
ネットで買おうとすると一番細いのは30AWG・・・ ま、こんなのは切れやすくもあるので
28AWGあたりが細さの限界値か・・
まぁ28AWGより細い線はそうそうないので、見かけた一番細い線を使えばいいね。
なるべく柔らかいやつ(;´Д`)

次の3Dマウスの記事はこちら
https://randol-news.net/art/00576.html
オートバックス オイル交換料金値上げ
2022.12.02


アコードのエンジンオイルをエレメントも合わせて交換するとき、
アンダーカバー外すの面倒なのでいつもオートバックスに任せていたんだけど、
今回で最後かな・・・ あまりにも値上がり過ぎて・・(;´Д`)

今まで、エレメント持ち込みは500円、オイル持ち込みも500円、オイル会員の年会費500円
合計1650円(税込)だったのですが、
エレメント持ち込み1000円、オイル持ち込み1000円、オイル会員年会費500円
で税込み2750円に。

じゃ、オートバックスでオイルとエレメント買えば安いのか?と考えますが、
オイル4Lとエレメントを買ったら1万超えます(;´Д`)
オートバックスってわけわからんメーカーは安いんだけど、まともなオイルはマジで高いよ。
正直この価格は工賃込みでも高い。

これからは別のところを探さなきゃ(;´Д`)
最悪自分でやるかぁ・・・
ジムニーなら楽だけど、アコードはジャッキアップしなきゃいかんからなぁ・・・


アコードの指定オイルは0w-20、NEXTも指定に入っているけどこちらは0w-7.5
0W-20選んで4000円、NEXTを選べば5000円越え。
ネットでも最近のオイル事情はかなり高めに推移。
エレメントもHAMPの物を用意すると1個500円。これはまぁあまり高くない。

地元のコバックでオイル交換の料金を調べてみた。
オイル交換のみで3762円(税込み、工賃込み)
エレメント追加で2200円(税込み、工賃込み)
合わせると5962円となる。
オイルは0w-20のトヨタオイルと言っていたので4000円と仮定すると
5962-4000-500=1462円
工賃はおおよそ1462円
うん、ここお安いわ(*'▽')

ちなみにオイルとエレメント持ち込みでお願いしたらいくらになるか聞いてみたら、
オイル交換で1100円、エレメント交換で550円だそうで、
工賃は1650円
すげー、良く出来てる(;´Д`)


この調子で他の店も調べてみよう。









- CafeNote -