サイトアイコン KOKENSHAの技術ブログ

超簡単!光電ロータリーエンコーダー( Incremental Rotary Encoder )をArduinoでサクッと動作検証!

みなさん、こんにちわ!

6月に入って、少し暑くなってきて、汗ばむ季節に入りましたが、汗を流して元気よく電子工作をやりましょう!

 

この前ロータリーエンコーダの記事を書きました。

ロータリーエンコーダをArduinoで動かしてみました。

目次

光電式回転エンコーダー 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”]

 

モバイルバージョンを終了