3Dマウス⑦ ファームの調整
2023.02.28


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

また外装に手を入れてました(;´Д`)
すこしずつ良くなっていく実感があります。
これでプロトタイプは完成形。

ファームウェアですが、ボタンの処理を追加するだけで完成~~とはいかなくて
実際に動かしてみてオービットしているときにボタンを押したらどうなるかとか、
そういうのを検証していくと、ソースは短くとも結構奥深いんだなと感じました。

GOTO文なんてためらわず使ってます(笑)



ボタンA(左側)をシフトキー(複数選択するときに使う)の機能に
ボタンB(右側)をパン用の機能に当てました。
Fusion360用として微調整を行い、ほぼイメージ通りの動きが再現できました。

自分で言うのもなんだけど、かなり快適。
リミットスイッチのクリック感もいい感じ。
Orbionの出番はもうないと思う(笑)

問題点は左手でオービット操作しているときに、
右手で掴んでいるマウスカーソルを動かすと、
回転が誤動作する。
「動かすな」という話なんだけど、
ちょっとした拍子に動いてしまう事だってままある。
これはArduino側ではどうにもならないので、
Windows側に管理アプリを走らせないと止められないと思う。

管理アプリを使うということは
カーソル情報やボタンの情報をシリアルで通信で受け取るという事なので、
Arduino Pro(Leonardo)じゃなく安いArduino Nanoて良くね?
という元も子もない結果になりそうだ(;´Д`)

とりあえず現バージョンはここで完成ということで
Nano対応版の制作は次のバージョンと言うことにしよう。

本体が小ぶりなのもちょっと気になりだしてきた。
男の手だともう二回り大きくてもいいかもしれない。
作り直したいのはやまやまだけど、仕事がゴタゴタしてるし
作業場移設で今後しばらく3Dプリンターは使えないので
とりあえずこのプロトタイプをVer1.00としていったん情報を整理しておこう。

このデータ欲しい人が多ければ配布も考えます。
希望者がいればコメントどうぞ。



一応3Dマウスの管理アプリは時間がかかりつつも並行して進めてます。
プログラムの流れは以下の通り

1.起動直後から一定周期でCOMポートを走査。
Arduinoが使っているCOMポートを見つけ出し接続する。
接続が完了したらCOMポートの走査を終了し別のステージへ。

2.Fusion360がアクティブウインドウになった時だけアプリが制御するように
アクティブウインドウのプログラムが何なのかを一定周期で監視。
大体1秒刻みでいい気がする。

3.Fusion360がアクティブウインドウの時で、3Dマウスがオービットを始めたときに
マウスカーソルの制御を入れる。
3Dマウスがオービットを終えた時にはマウスカーソルはフリーになる。

たったこれだけのプログラムだけど、
Fusion360が簡単にハンドルを取得させてくれなかったので結構てこずった(;´Д`)
昔よく使ったシリアル通信を行うコンポーネントも最近のDelphiには対応してなくて
インストールするにはかなり手間がかかってしまった・・

あと、管理アプリ側でオービットやパンを制御したとき、
パソコンの処理速度によってだいぶ差が出るんじゃないか?という懸念がでてきた。
そういったことも考慮して、速度調整ができるようにもしないと・・

私の使う言語はマイナーなDelphiなので、
シリアル通信のコンポーネントをインストールするのに知識も必要だし
オープンソースはちょっときびしいか(;´Д`)
EXEファイルをArduinoのソースと一緒に同梱する形になるなぁ・・

- CafeNote -