以前から少しずつ進めているのが左手デバイスの自作。既存のものを買っても良いのだが地味に高かったり、イマイチ使い勝手が悪そうだったりする。なので自分でより安く、使い勝手の良いものを作ってみたい。という訳で少しずつ勉強している。AIいじりも楽しいのでなかなか前に進まない・・・というか前の記事書いたの去年の8月かよ・・・。
以前の電子工作関連の記事は↓
ロータリエンコーダを使う
左手デバイスで必ず付けたいのがロータリエンコーダ。一般的にはツマミというか、つまんで時計回り/反時計回りに回すやつ。マウスのホイールもロータリエンコーダ。ちなみに買ったのはこれ。2024年4月現在で1個100円。
ロータリーエンコーダ(24クリックタイプ): 制御部品・駆動部品 秋月電子通商-電子部品・ネット通販
原理については下記サイトを参照されたい。
付けたい個数は絵を描くことを想定して
- 拡大/縮小
- キャンバスの左回転/右回転
- ブラシサイズの大/小
の3つ。で、最初になんとなく「こんなもん、適当に繋げば動く動く」と思って繋げてみたらイマイチ動作が不安定だった。
原因はチャタリング。我々は普段、当たり前のようにスイッチをON/OFFしている。しかし物理的な構造である以上は理想的なデジタル信号が出るとは限らない。というか通信であれ何であれハードウェアにおいては理想的なデジタル信号などおそらく存在しない。だって現実(物理)はアナログなので。
たとえば金属を使用している場合は小さいパーツでも振動することがある。その振動が信号として伝わると短い時間にON/OFFが繰り返されて、思わぬ誤作動に繋がる。通信においてはアイパターンなんかで調べると面白い。
「言うてそんなごくわずかな振動なんか認識出来ないだろう」と思うのは甘い。今回使用したマイコンのCPUはクロック周波数16MHz、比較的低スペックなものではあるが、1秒間に1,600万回のペースで動作する*1。かたやチャタリングはms*2単位=1,000分の1秒単位の現象なので、CPUはこれを信号として認識できる。ちゃんと処理しないと時計回りに回した時の動作が反時計回りに回しても行われることになる。
「ロータリエンコーダ チャタリング」で検索すると解決方法を記してくれているサイトがちらほら。今回参考にしたのはこちら。
チャタリング対策にはハードウェア的な対策、ソフトウェア的な対策があるようだが、この方が紹介しているのは前者。ソフトウェア的な対策はどうしてもコードが煩雑化するので避けたい。ハードウェアで対策する方が楽。一般的にはソフト側で対策するのが基本のようだが*3。
紹介されている方法は2つで、まずロータリエンコーダのA相、B相の間に0.01μF*4のコンデンサーを挟むこと。もう1つがシュミットトリガを挟むこと。後者の方が誤作動は少なくなるようだが部品点数が増える上に回路が複雑化する。正直、原理がどうこう以前に面倒くさい。
という事でとりあえずコンデンサーを挟むだけの方法を試してみた。これだけではどこがどうか分かりづらいので回路図を以下に示す。
少し分かりづらいがそれぞれのロータリエンコーダA相、B相をデジタルピンに接続し、コンデンサー(青い楕円)を介してGNDと繋いでいる。真ん中の足は元からGNDに接続する用なのでGNDに接続。
使用しているマイコン*5の割り込みピンは0、1、2、3、7。割り込み処理ができるようにプログラムしておくとこれらのピンのいずれかに変化が起きた時、それまで実行している動作を中断して特定の動作をさせることができる。つまりどのロータリエンコーダを回した時でも思ったような処理が入る。なお、割り込みピンは各エンコーダそれぞれ1つで足りる。
実際の動作はと言うとこれだけでほぼ完璧に誤作動が無くなった。強いて言えば時計回りに回した時に、稀に逆時計回りの動作が1回入る時がある。実用上は問題ないレベル。
なぜコンデンサーでチャタリングが解消するか。解消と言うよりはチャタリングが抑えられていると言うべきだがこれはコンデンサーという部品の原理から知る必要があり、かなり沼にハマるので割愛する。
回路を組んだ後はそれぞれのロータリエンコーダに割り振った割り込みピンに変化が生じた際に割り込み処理が起きるようにして、A相B相の排他的論理和を取れば回転方向が分かるので、その結果に応じて場合分けして処理をすれば良い。
蛇足
人間と関わるよりもこういう事をやっている時がずっと楽しい(人間不適合者並の感想)。
まったく関係無いが、私が子供の頃にアニメが流れていたZOIDSが最近になって熱い。昨日、デスザウラー(作中で最強クラスに位置づけられるゴジラみたいなやつ)のキットが新しくなって予約開始された。お値段33,000円と決して安くは無いが、この時代に今やほぼ手に入らないキットがリフレッシュして復活は素晴らしい。
旧世代のキット(現在のシリーズよりも前のもの)は金型がタイにあったのが洪水に遭い、ほぼ全滅したと風の噂で聞く。つまり旧キットは絶版状態。プレミア価格がついている。実際、ある程度の人気はありながらも復刻されたキットはごくわずか。今回のキットも基本的なデザインは踏襲しながら新造していると思われる。価格は高いがそれにみあった希少性がある。
PV。まさか令和6年になって大塚芳忠氏の声がギュンター・プロイツェン役で新録されるとは。ノリノリで「私の1/72フィギュアも付属する」と言うあたりがツボ。素晴らしい。子供ながらに氏の声の渋さに憧れたものだ。プロイツェン、アニメでは小者?的な立ち位置に思えるがバトルストーリーの方の最期は漢。
Amazonで予約すると30,000円を切る。ポチった。正直もう1個買おうか迷う。
*他のサイトでも予約可能(タカラトミーモール等)
*出品者選択に注意。Amazon公式であればポイントが付く