I2CでVFD(FIP9B8)を制御するモジュールを基板で仕上げました。3Dプリンターで支柱も作成し、なかなかの見栄えとなりました。
I2C-VFDモジュールの動作確認として、ロータリーエンコーダーでカウントした数値を表示してみました。
ロータリエンコーダ面白い。 pic.twitter.com/TbJbw6E91H
— 『昼夜逆転』工作室 (@jsdiy) January 9, 2023
自分のwebサイト用にアップロード。左はクリック数、右は軸の回転角(24クリックで1回転→1クリック15度で換算した値)。 pic.twitter.com/JzPrDVexsy
— 『昼夜逆転』工作室 (@jsdiy) January 22, 2023
1番目のデモ動画のプログラムです。
ロータリーエンコーダーの軸の回転をポーリングし、値を -128~127でカウントし、VFDに表示します。
一連の処理をメインループの中で順次実行しているので、
アプリケーション開発で処理が増えると値の変化を取りこぼす可能性があります。
その場合、ポーリング方式からピン変化割り込みによる読み取りに変更するなどの方法が考えられます。
2番目のデモ動画は、どちらかというとI2C-VFDモジュールの使い勝手を検討することが目的だったのでプログラムは省略します。
ロータリーエンコーダーは軸の回転に連動して2つのスイッチA,BがON/OFFを繰り返す装置です。
スイッチA,BがONになる(またはOFFになる)タイミングのズレを検出することで軸の回転方向が判定できます。
マイコンでロータリーエンコーダーのON/OFFの状態を読み込む方法は、単に2個のスイッチを読み込むのと同じです。
それに加え、スイッチA,Bのどちらが先にONになるか(またはOFFになるか)を比較して回転方向を判断します。
ロータリーエンコーダーは製品によっては軸の回転にクリック感があります。
今回使用したロータリーエンコーダは24クリックで1回転するものです(1クリックで15度回転)。
クリック数を、軸が何度回転したか、に読み替えることができます。
軸を時計方向に回転してクリック数をカウントすることを考えます。
1クリックの回転を判断するポイント、すなわちスイッチA,BのON/OFF状態の変化を捉えたいポイントは図のP1,P2,P3いずれかです。
P1は軸がバネによってホールドされている状態から外れようとする瞬間です。
P2は軸がバネから外れて回転している最中です。
P3は回転していた軸がバネによってホールドされようとしている瞬間です。
3つのタイミングで読み取り実験をしたところ、
最も安定して1クリックをカウントすることができたのはP2のタイミングでした。
軸を適当にぐるっと一つまみ回転させたとき、
P1は安定して1クリックをカウントすることができました。しかし軸を(バネから外れないよう)わずかに回転させただけでカウントしてしまいます。
P3はチャタリングの影響が大きいのか、カウントの取りこぼしが目立ちました。
また、1クリック分の回転の終了時にカウントされるので、指の動きに対してカウントが遅れる違和感があります。
P2はバネ(チャタリング)の影響を受けず、軸が安定した回転動作中のON/OFF変化なので読み取りも安定するのではないかと思います。
というわけで、自分で読み取りプログラムを書く場合、スイッチA,BのON/OFF変化がP2のタイミングとなったときにカウントするのがオススメです。
図はEC12PLLVF-D-24K-24-24C-02/06-6Hデータシートより抜粋、一部加筆(P1,P2,P3の枠線)。
加筆なしの抜粋は[ここをクリック]。
ロータリーエンコーダーを初めて使いました。軸の回転に連動して数字が変わる動きを見て、単純に面白いと思いました。 使い道としては、1本立てのニキシー管の数字をくりくりと変えて鑑賞するのはどうでしょう。