2013年5月24日金曜日

arduinoでロータリーエンコーダを使ってみる


ロータリーエンコーダは、軸が回転するとパルスが出力されます。
2相のパルスを出力することにより、回転方向も検出することができます。

参考:TekuRobo工作室 113.ロータリーエンコーダを使う
http://homepage1.nifty.com/rikiya/software/113ROTENC.htm



今回は、古いボール式のマウスからロータリーエンコーダを取り出しました。

マイクロスイッチも5個流用できそう。


通電すると3つの赤外線LEDの点灯がわかります。

軸と一体化した円盤のスリットをはさむ形で配置された赤外線フォトインタラプタです。
フォトトランジスタ(フォトダイオード?)2つが1つのパーツ内にあり、ずらして配置されていてタイミングがずれたパルスを出力します。
X軸、Y軸のロータリーエンコーダはスリットが65ぐらい、ホイールのスリットは9でした。
センサー周りの基板パターンを見るとフォトインタラプタの出力はそのままICへ入力されています。
おなじみの簡易オシロでパルス出力を見た時のキャプチャ。
A相(オシロ上側)の立ち上がりの時、B相はLOW

A相(オシロ上側)の立ち上がりの時、B相はHIGH
この違いで回転方向を検出できます。

フォトインタラプタ部分を切り取り、スリットのパーツも取り外しました。

手持ちの材料でこのように組み立て、つまみはミニ四駆の車輪を使いました。

配線してテストして

組み合わせ

フォトトランジスタ側とスリットを近づけないときちんとを反応しませんでした。
簡易オシロで波形を見るとちゃんとパルスが出てます。
さっそく前回作った4桁7セグメントLEDシールドに接続しました。

スケッチとしては、A相のパルスの立ち上がりエッジで割り込みを発生させて、その時のB相の出力をdigitalRead()で見ます。
LOWかHIGHで時計回りか反対周りと判断します。
動きが逆なら、A相、B相の配線を逆にするだけ。
解像度が必要な場合は、A相の立ち下がりエッジや、B相の立ち上がり、立下りも検出して処理すれば解像度は4倍でしょうか。

ロータリーエンコーダのパルスを見てみたり、7セグLEDを操作したり、ステッピングモーターを操作しているところ。



メニューダイアルやビデオ編集のジョグダイアルのような使い方ができそうです。
ロータリーエンコーダをロボットの車軸に組み込み車輪の回転角度や移動距離の計測にもよく使うようです。
製品には見た目は可変抵抗のカチカチッと動くロータリーエンコーダもあります。

環境:arduinoUnoR3、IDE1.0.4、win7(32bit)






1 件のコメント:

  1. エンコーダーとarduinoを用いた角度計測に参考にしたいのですが,フォトインタラプタの電子回路図とスケッチの公開をお願いします.

    返信削除