Smiley

なんでも一回は作ろうとする人

6自由度のトラックボールを作りたい(調査編②)

とりあえずトラックボールのセンサーに使うためにいくつかマウスを買ってきました。

買ったのは以下

 

それと安いほうがいいよねということでAliexpressで以下

2.4GHzワイヤレスゲーミングマウス,Bluetooth,サイレント,高品質,コンピューターアクセサリ,ラップトップ,タブレット用,w8m6| | - AliExpress

 

エレコムのほうについていたICはPAW3212DBで、データシートもちゃんとありました

pdf1.alldatasheet.com

 

で、Aliexpressで買ったほうなのですが、センサーチップの中にレンズもLEDも入ってコンパクトですごくいいんですが

素性がわからなすぎる・・・・

刻印は"YC-860"と”DS2286"、基板のシルクには"8699"です
よくわかりません

マウスのコントローラーICのほうは刻印は”YC1011”で、おそらくYiChipのYC1011だと思います

http://www.yichip.com/yc10XX

説明的にもそれっぽいですね

センサーICもYCが入っているので同じ会社のかと思いましたが違うっぽいです

 

取り合えず素性がわからなすぎるので一旦PAW3212を使っていこうと思います

 

 

6自由度のトラックボールを作りたい(調査編①)

6自由度、つまりXYZ軸の回転と移動を操作できるトラックボールが欲しくなりました

一応商品としては3DConnexionのSpace mouseとかがあります

 

が、トラックボールが単純に好きなのでこれをトラックボールでできたらなと思っています。

 

まずどうやって3軸の回転データを手に入れるかを考えます。

自分用メモを含むので詳しく解説していきますが、間違っている可能性高いので

間違っていたら教えていただけると助かります。

 

トラックボールの仕組み

トラックボールは球体で、3軸すべての方向に360度回りますが、とれるデータは2軸です。

理由はセンサーが普通のマウスと一緒の物を使用していて、このオプティカルフローセンサーというものが平面用だからです。

黄色い点がセンサーとして、緑と赤の線の回転しか取れないということです。



もしもZ軸回転を行ったとしてもXとY軸での回転はないのでセンサーでは読み取れません。(実際にはセンサーの特性上、多少は動きがあると思います。)

 

Z軸回転も取得する方法

これは単純な話で、Z軸の回転を取得できる場所にもう一つセンサーを置くことです。

これで各センサーの値を取得すればXYZすべての回転がわかります。

 

各回転軸の移動量/回転角

下のセンサーをSaとして、横についてるセンサーをSbとします

各センサーの値を以下のように格納します。

X = Sa.Y

Y = Sa.X

Z = Sb.X

回転なので、XとYが反転しているのは注意です。

 

次は回転角を求めます。

センサーからのデータは、ICにもよりますが大体CPIをかけるとインチに変換できると思います。

1インチ25.4mmなのでそれをふまえ以下のように計算します

Xmm = X/CPI*25.4

Ymm = Y/CPI*25.4

Zmm = Z/CPI*25.4

これで移動量(mm)が手に入りました

 

次に実際の回転角を求めます。

トラックボールの半径をrとして計算します。

円弧の長さLから中心核x°を求める公式は

x°=180ℓ/πr

なのでそれぞれ読み替えていくと以下になります

普通のトラックボールは直径34mmが多いみたいなのでその場合rは17になります

Xd=(180*Xmm)/(πr)

Yd=(180*Ymm)/(πr)

Zd=(180*Zmm)/(πr)

でしょうか・・・・・

合ってますかね💦・・・・・

 

ただ実際に使うときはDPI調整と称して感度をいじると思うので

一個目の式で事足りそうな気もしています

HIDIコントローラーを使ってStreak Deckの自作計画

Streak Deckってあるのですが

自分はそんな高価なもの買えないので劣化版を自分で作ろうと思います

 

MIDIコントローラーは家にあったAkai LPD8 Mk2で

このMIDIコントローラーからの情報を受け取って実際に処理してくれるアプリを作ろうと思います

 

やりたいこと

①音量ミキサー

これはPCのマスター音量ではなく、アプリケーションごとの音量です

ゲーム中に音楽聞きながらだったり、通話しながらすることが多いので

結構調節することがあるのですが

ゲームは全画面なので操作しようと思ったら意外と手間なんですよね・・・

なのでバックグラウンドで動いてくれると助かります

 

②マクロの起動

アプリケーションの起動・決められたキーボード入力のエミュレート、その他いろいろ

これに関してはVBSをバックグラウンドで起動できたらいいかなと思っています

大体はこれだけである程度対応できるはず

 

ほんとは本家Streak Deckのソフトに対して

StreamDeckと認識される仮想デバイスソフトを作ろうかと思ったのですが

企業を敵に回したくないので止めておきますが

利便性とか各会社から出ているプラグインがあるので使いたいです

 

 

以上、開発日記的なのをゆっくり投稿していきます