新しいarrow.comをご利用いただいていますが、いつでも元の体験に戻ることができます。 元のサイトに戻る

Arrow Electronic Components Online

Arduinoボードでロータリーエンコーダを使用する

ロータリーエンコーダー20 5月 2021
すべての記事を表示

多くのプロジェクトはボタンやスライダー入力のようなコンポーネントを使用して制御できますが、もしビルドにノブが必要な場合はどうしますか? プロジェクトが回転入力を必要とする場合、選択肢は2つあります: ポテンショメータまたはロータリーエンコーダです。

ポテンショメータは、ノブの位置に基づいて抵抗を変化させるもので、よりシンプルでしばしば確固とした選択となりますが、現状では時計回りまたは反時計回りにしか回すことができません。どちらの方向にも継続的に回転できるものが必要な場合は、ロータリーエンコーダが最適です。どちらを選ぶか悩んでいる場合は、エンコーダとポテンショメータの比較が答えを見つける手助けになるかもしれません。
 
エンコーダは、2つの基本スタイルがあります:
 
1. インクリメンタルエンコーダは、シャフトがどれだけ、どの方向に回転したかを示すために、クアドラチャ配置の一連のパルスを使用します。
2. アブソリュートエンコーダは、固有の角度位置を認識しています。
 
この記事では、インクリメンタルエンコーダを主に取り上げます。最も一般的に見られるタイプのエンコーダです。単一出力エンコーダ(タコメータとも呼ばれる)も利用可能ですが、シャフトがどれだけ移動したかだけを示し、方向を示さないため、あまり有用ではありません。エンコーダの種類に関する詳細な記事をご覧いただけますが、今日はインクリメンタルエンコーダの基本的な動作と Arduinoボードとのインターフェース方法を紹介します。

直交エンコーダー: チュートリアルと概要

Image

エンコーダ信号AとBのための直交図。Bの立ち上がりエッジでAが低信号のとき、このパターン上で右に移動することを示し、Aの立ち下がりエッジでBが高信号のとき、左に移動することを示します。

ほとんどのエンコーダーの中心には、「A」と「B」の出力があり、絶え間なく増分的にパルスしています。これらの出力は必要に応じて電源と接地と組み合わせられます。AとBの出力は「直交エンコード」されており、各信号は50%のデューティサイクルを持っています(オンとオフの時間が半々です)。その動作は次の通りです:
- 各デューティサイクルは互いに90°位相がずれています。片方の出力が状態を変化させるのに要する時間を半分過ぎた時にもう片方の出力が変化します。
- 接続された マイクロコントローラー または専用ボードがこれらのパルスを回転量に変換し、パルスの順序からシャフトがどの方向に回転したかを示します。
 
上の図に示されているように、Aが低い状態のときにB信号が上昇すれば、このパターンの位置は右に進んだことになります。しかし、Aがすでに高い状態のときにB信号が上昇すれば、左に進むことになります。A信号の上昇と下降と組み合わせることで、各ラインに対して4つの異なる状態が得られます:
信号Aに対しても同様の信号パターンがあり、8つの異なる可能な遷移と、それぞれの方向に4つの遷移があります。このパターンが円形にラップして繰り返されることで、直交回転エンコーダーの基礎が得られます。
1. B上昇、A低
2. B下降、A高
3. B上昇、A高
4. B下降、A低

Arduinoでロータリーエンコーダを使用する

Arduinoに2種類のエンコーダを組み合わせます:
- 接触エンコーダ: 小型で、一般的にインターフェースデバイスとして使用されます。
- 光学式エンコーダ (LPD3806-600BM-G5-24C): ベアリングサポート付きの大型タイプで、通常モーターの速度測定に利用されます。
小型エンコーダを使用している場合は、以下の手順を実行してください:
1. 中央のラインをグランドに接続します。
2. 片方の外部接続をD2に、もう片方をD3に接続します。正の電圧は必要ありません。
大型エンコーダの場合、次の手順に従ってください:
1.  赤の電源ラインを+5Vに接続し、黒い線をグランドに接続します。
2. A線とB線(緑と白)をArduinoのD2とD3に接続します。
3. 接続方法、電圧の要件、カラーの組み合わせは実装によって異なる場合があることに注意してください。

Arduino Encoder Code

Image

Image: Jeremy S. Cook

エンコーダーのAラインとBラインが回転に伴ってどのようにパルスを発生させるかを理解したら、この入力をコードに変換することで有用な出力を得ることができます。このステップは理論上は簡単ですが、実際には難しいことがあります。例のコードはこちらで見つけられます(テストを助けるための3D印刷可能なトップも同様です)。トップは完璧ではありませんが、方向性が正確で、エンコーダーの動作を示します。Arduinoのマイクロコントローラーがいずれかのラインで高から低への移行を検知すると、両方のラインの状態を比較し、適宜増分を足したり引いたりします。
 
ATmega328が多くのArduinoボードで割り込みを生成できる唯一の2つの入力であるため、D2とD3を選択することを確認してください。ここでの移行が見られると、すぐに読み取りルーチンに入り、プログラムのロジックがそれを呼び出すのを待ちません。
 
移行中に状態が急速に変化し、短時間で急速に接続および切断する可能性のある入力に対応するmillis()デバウンスコードも心に留めておいてください。このコードは一部のアプリケーションで受け入れられる程度に機能し、エンコーダーの動作を理解するのに役立ちますが、100%正確に読み取ることは簡単ではありません。

Arduino Encoder Libraryの使用

Arduinoのエンコーダーコードは、エンコーダーの仕組みを理解するのに役立ちますが、プロジェクトで単に使用したい場合は、Paul Stoffregenによる既製のライブラリを活用してください。始め方は以下の通りです:
 
1. GitHubからエンコーダーライブラリをダウンロードしてください。
2. Arduino IDEで、スケッチ ==> ライブラリをインクルード ==> .ZIPライブラリを追加 に移動し、「Encoder-master.zip」を追加します。
3. インストールが完了すると、ファイル ==> 例 ==> Encoder の下に4つのプログラムが表示されます。「Basic」例をロードして、Arduinoボードに転送します。
4. エンコーダーを接続する際は、プラスとマイナスを従来通りに接続し、AとBの信号線をD5とD6に接続します。
5. シリアルモニタを9600ボーで開くと、位置が正確にインクリメントおよびデクリメントされるのがわかります。
 
光学式エンコーダーと同様に、調整なしで位置が変化するはずです。さらに楽しむために、同じボーレートでArduino IDEのシリアルプロッタを開いてください。位置の数値を示すだけでなく、値のグラフを自動的に作成します。

Image

カスタムインターフェースとして使用する場合でも、速度や距離を測定する場合でも、エンコーダはArduinoプロジェクトに優れた回転入力方法を提供します。他の多くの種類のデバイスに比べて設定に少し手間がかかりますが、その結果は十分に価値がある場合があります。

記事タグ

Global
Resistor Trimmers, Potentiometers and Rheostats
Encoders
Digital Potentiometers
アルドゥイーノ S.r.l.
Electromechanical Encoders

関連コンテンツ