今回はArduinoやPICやRaspberryPiでロータリエンコーダを接続する時に、みなさんが一様に困っていた誤カウントを防止する上に、GPIOの節約、そしてプログラムを簡素化できるI2C接続で使えるロータリーエンコーダ・ボード「I2C Encoder V2」をご紹介致します。
さて、まずはボードの詳細に移る前にロータリエンコーダを使った事がない方にロータリエンコーダの原理とマイコンでロータリエンコーダを使った時に起こる不具合を少しだけお話させて頂きます。
ロータリエンコーダと言うのはクルクルと丸いつまみを回す回転式の入力装置で、ボリューム抵抗だと回っても360度で必ずどこかで止まりますが、ロータリーエンコーダは延々と無限に回り続けます。
ですから身近な所ではカーナビのオーディオのボリュームや選局用ダイヤルとして使われたりと、ボリューム抵抗は1度回しても位置によって抵抗値が大幅に変化したりしますが、ロータリエンコーダは1カウント分(たいていカチッと言う感触によるフィードバックがあります)だけ動かせば1カウントですし、早く回せばその速さに合わせてカウントアップしたり、カウントダウンしますのですごく細かな調整が必要な入力装置として使うのにはとっても便利な入力装置なのです。
ただこれをマイコンで使う場合、A相とB相、モノによってはZ相のパルスの立ち上がり、立ち下がりが切り替わった瞬間に割り込みをかけて、他の位相がH(High)なのかL(Low)なのかを見て、エンコーダがどちらに回っているのかを判断して、割り込みがかかる度にカウントアップ、カウントダウンするのですが、分解能の高いインクリメンタル式のロータリーエンコーダを高速で回したり、左右に急速に振ったりすると割り込み処理中にH,Lが入れ替わったりして正しくカウントできない事がよくあるのです。
しかも1台のArduinoやPICでロータリエンコーダの処理や他の入出力処理をさせていると更にパルスの取りこぼしが出て来たり、基本的には割り込み処理は1つのGPIOにかかけられませんので、複数のロータリエンコーダを使うとなると、カウントの取りこぼしは更に酷くなります。
ですからマイコンでロータリエンコーダを扱う時は非常に苦労するのですが、この「I2C Encoder V2」を使えばロータリエンコーダの処理はこのボードで行い数値だけをI2Cにて吐きますのでプログラムを書くのが非常に楽になります。
しかもこの「I2C Encoder V2」はアドレス指定をジャンパーをショートする事で最大7台の「I2C Encoder V2」をデイジーチェーンで繋いで使う事ができますので、今までロータリエンコーダ2個の処理でも大変な思いをしたと言う方には、一気に抱えている問題を解決できます。
またロータリエンコーダはインクリメンタル式のものであればスタンダードなものからフルカラーLEDを内蔵したものまで扱えますし、拡張用GPIOとして用意されているGP1,GP2,GP3にRGB-LEDをハンダすれば、フルカラーでLEDを点灯させる事ができる他、このGPIOはデジタルI/Oとして使える他にPWM出力やアナログ入力端子としても流用できます。
更にロー立ちエンコーダについて言えば、最小値と最大値、そして1ステップでいくら増減させるのかと言う指定を予め行う事ができますので、プログラム中では返って来た数値をそのまま使うだけで良いなど、プログラムを書く上でもステップ数を減らしメモリーの節約ができますで、今までメモリー不足で入れる事ができなかった処理を加える事ができたりと、想像するだけでワクワクする様なボードになります。
またGitHubで詳細は既に公開されていますので、下記URLのページのリンクから飛んでご覧下さい。
https://www.kickstarter.com/projects/1351830006/i2c-encoder-v2
この記事へのコメントはありません。