三浦製作所

興味のあるものをとりあえず動かしてみた、実装してみたシリーズをガンガン上げていきたいと思います。あくまでも自身の備忘録としてですが、誰かの助けになったらうれしいです。

【低価格マイコン】【実装】Arduino Nanoでロータリエンコーダ (KY-040)を動かす

f:id:bamboomush:20210320163253p:plain
 Arduino Nanoを用いてロータリエンコーダを実装したので、そのやり方について紹介したいと思います。

この記事を読むことで、安価なマイコンであるArduino Nanoでロータリエンコーダが実装できるようになります。

ロータリエンコーダは本当に多くの電子製品に搭載されています。アンプのような音響機器の音量調節や、グリルのタイマ部分などに使用されており、ロボット開発としても、活用方法は数多くあります。

 

Youtude

youtu.be

 

ESP32版はこちら

 

 

◆Arduino関係の実装記事◆ 
  • DCモータ実装

www.takeshi-1222.com

  •  サーボモータ実装

www.takeshi-1222.com

  • OLED実装

www.takeshi-1222.com

  • 超音波センサ実装

www.takeshi-1222.com

  • LCDディスプレイ実装

www.takeshi-1222.com

  • 温湿度センサ (低コスト)

www.takeshi-1222.com

  • 温湿度センサ (ハイスペック)

www.takeshi-1222.com

  • 温湿度センサ (複数)

www.takeshi-1222.com

  • CO2センサ 

www.takeshi-1222.com 

  • ほこりセンサ

www.takeshi-1222.com

  • 心拍センサ

www.takeshi-1222.com

  • 皮膚電位センサ

www.takeshi-1222.com

Arduino Nano, KY-040の簡単な説明

Arduino Nano

Arduino Nanoは超安価で購入ができるマイコンで、電気やプログラミングの深い知識を持っていない電子工作初心者でも扱いやすい、オープンソースマイコンです。

Arduinoと比較すると、性能は劣るものの、安価で広い用途で使用可能なので初心者に適しています。

ちなみに、上記が純正品ですが、互換品である以下も性能面では変わらないので強いこだわりがない限りは、互換品の方がおすすめです。

ロータリエンコーダ (KY-040)

今回使用する安価なロータリエンコーダは分解能が荒く、モータの制御等には向かないですが、一方で構造上動かすのが容易です。逆に分解能が細かくロボット制御に向いているエンコーダもございますので今後はそれも動かしていこうと思います。

実験構成

 今回の実験に使用する部品は以下のものです。
  • Arduino Nano
  • ロータリエンコーダ (KY-040)
  • ジャンパ線多数

Arduino Nano、ロータリエンコーダは上記のものを使用しています。

 

ジャンパ線は何を使用してもいいですが、一応リンクを張っておきます。

実験

配線

まず配線は以下のようにします。

f:id:bamboomush:20210320163207p:plain

配線ができると以下のような画像のようになります。

f:id:bamboomush:20210320163226j:plain

実行コード

ここまで出来たら以下のコードを実行することで動作確認ができます。

/*
  ロータリーエンコーダ実験01
*/

int val;
int encoder0PinA = 2;
int encoder0PinB = 3;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;

void setup() {
  pinMode (encoder0PinA, INPUT);
  pinMode (encoder0PinB, INPUT);
  Serial.begin (9600);
}

void loop() {
  n = digitalRead(encoder0PinA);
  if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
      encoder0Pos--;
      delay(abs(encoder0Pos));
    } else {
      encoder0Pos++;
      delay(abs(encoder0Pos));
    }
    Serial.print (encoder0Pos);
    Serial.print ("/");
  }
  encoder0PinALast = n;
}

今回はロータリエンコーダの数値をシリアルモニタで確認できるようにしています。
値を角度に変換していないので分解能の異なるエンコーダにも応用できるかと思います。

まとめ

今回は、Arduino Nanoでロータリエンコーダを動かすために必要なものの紹介と、サンプルプログラムの紹介をしました。