超簡単!光電ロータリーエンコーダー( Incremental Rotary Encoder )をArduinoでサクッと動作検証!
みなさん、こんにちわ!
6月に入って、少し暑くなってきて、汗ばむ季節に入りましたが、汗を流して元気よく電子工作をやりましょう!
この前ロータリーエンコーダの記事を書きました。
目次
光電式回転エンコーダー 100 パルス AB 相 5 24 v 結合 NPN 出力 (100 pulse)
その後、しばらく遊んでいましたが、正直なところ、精度がイマイチな気がします。回す時もカクカクする感触があります。
これはこれで、使う場面もあるでしょうし、廉価で入手しやすいから、特に問題はありませんが
もし、より精度が求められるような応用でしたら、他に良いロータリーエンコーダがないかなと思って
アマゾンで調べたら(はい、すみません、アマゾンに依存し過ぎです、今年はなんとかします!笑)
光電ロータリーエンコーダというのが知りました!
早速購入!アマゾンありがとう!
もう調達のインフラですね。笑
型番:LPD3806-100BW-G5-24C
光電ロータリーエンコーダーをArduinoでサクッと動作検証!
今日は、誰でもすぐに検証できるやり方をお伝えします!
まずは、実物はこちらです!

配線
配線はとても簡単です。
今回は、直接にArduinoと接続します!
緑 AはArduino Digital3番に接続します。
白 BはArduino Digital2番に接続します。

黒 0Vは ArduinoのGNDに接続します。
赤 5Vは Arduinoの5Vに接続します。
これでOKです!

プログラム
プログラムはこちらです。
/*
光電ロータリーエンコーダを動かしてみる!
*/
volatile unsigned int temp, counter = 0;
void setup() {
Serial.begin (9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
//interuptをセットアップする
//
attachInterrupt(0, ai0, RISING);
//
attachInterrupt(1, ai1, RISING);
}
void loop() {
// カウンターの値を出力する
if ( counter != temp ) {
Serial.println (counter);
temp = counter;
}
}
void ai0() {
if (digitalRead(3) == LOW) {
counter++;
} else {
counter--;
}
}
void ai1() {
if (digitalRead(2) == LOW) {
counter--;
} else {
counter++;
}
}
解説はまた、これから、内容をアップデートするときには加筆します。
動かす
コンパイルして、Arduinoに書き込むんだ後、シリアルモニターを開いてください。
ロータリーエンコーダを回してみると、シリアルモニターで数値の変化を確認できるはずです。

私は、最初に、前のプロジェクトの設定が残して、全然表示がなくて、あれ?と思いましたが
その後、通信スピードを9600に直したら、できました!
エンコーダを左右に回しながらシリアルプロッタで見るのも楽しいです。

まとめ
どうでしょうか?思ったより、簡単でしょう!笑
金属の本体、結構好きです!金属フェッチです!笑

次は、ロータリーエンコーダでサーボやステップモーターを制御する回路を作ってみたいですね!
では、また!
[amazonjs asin=”B0774P59LD” locale=”JP” title=”光電式回転エンコーダー 100 パルス AB 相 5 24 v 結合 NPN 出力 (100 pulse)”]
[amazonjs asin=”B0044X2E5S” locale=”JP” title=”【永久保証付き】Arduino Uno”]