Перейти к содержанию

Arduino encoder, как подключить энкодер KY-040

Ардуино как подключить энкодер KY-040

Поворотный энкодер Arduino (модуль KY-040) очень часто используется в проектах для управления различными устройствами от микроконтроллера Arduino. В этом обзоре мы рассмотрим распиновку и схему подключения модуля KY-040 к Ардуино. Представим несколько примеров с использованием модуля rotary encoder для управления яркостью светодиода, вращением серводвигателя с помощью платы Arduino Uno.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • rotary encoder ky-040
  • светодиоды и резисторы
  • сервомотор
  • макетная плата
  • коннекторы
  • скачать библиотеку RotaryEncoder.h

Дополнительные материалы на эту тему:

  1. Управление таймером на LCD от энкодера
  2. Подключение потенциометра к Ардуино
  3. Включение светодиода от кнопки Ардуино

Encoder Arduino используется для преобразования угла поворота в электрический сигнал. Поворот ручки на модуле создает два сигнала (A и B), которые находятся в противоположной фазе. Исходящий сигнал зависит от направления поворота ручки энкодера — по часовой стрелке или против часовой стрелки. Цифровые и аналоговые порты микроконтроллера могут быть использованы для считывания сигнала A и B.

Encoder Arduino распиновка, характеристики

Encoder Arduino ky-040 распиновка, характеристики

Характеристики энкодера ky-040 (datasheet)

  • Напряжение питания: 5 В
  • Рабочий ток: 10 мА
  • Импульсов / оборотов: 20
  • Рабочий ресурс: от 15000 оборотов
  • Длина вала: 12 мм

Каждый раз, когда сигнал A переходит от положительного значения к нулю, мы считываем значение сигнала B (смотрите схему с принципом работы модуля). Если сигнал B в это время положительный, то поворотный энкодер вращается по часовой стрелке, если сигнал B равен нулю, то энкодер вращается против часовой стрелки. Таким образом, с помощью микроконтроллера Arduino можно определить направление поворота ручки.

Как подключить энкодер к Arduino Uno

Как подключить энкодер к Ардуино

Для работы необходимо установить библиотеку RotaryEncoder.h. Начнем с примера для управления энкодером от Arduino Uno, где вся черновая работа по определению вращения ручки энкодера выполняется с помощью библиотеки RotaryEncoder.h. Мы только выводим данные на монитор порта Arduino IDE. Соберите схему с энкодером, как показано на рисунке выше и загрузите в микроконтроллер Ардуино следующую программу.

Скетч для подключения энкодера к Arduino


#include "RotaryEncoder.h"
RotaryEncoder encoder(A2, A3); // (DT, CLK)

static int pos = 0;
int newPos;

void setup() {
  Serial.begin(9600);
  Serial.println(pos);
}

void loop() {
  encoder.tick();
  newPos = encoder.getPosition();

  if (pos != newPos) {
    Serial.println(newPos);
    pos = newPos; 
  }
}

Подключение энкодера к Ардуино и светодиодов

Подключение энкодера к Ардуино и светодиодов

Следующий пример позволяет управлять яркостью светодиода с помощью ШИМ-сигнала, включать и выключать второй светодиод нажатием кнопки энкодера. Для этого соберите схему, показанную на картинке выше. Обратите внимание, что порт SW модуля энкодера подключен к контакту 2 микроконтроллера Ардуино. После сборки схемы загрузите следующий код для управления светодиодами с помощью поворотного энкодера.

Скетч для управления светодиодами от энкодера

#include "RotaryEncoder.h"
RotaryEncoder encoder(A2, A3); // (DT, CLK)

#define STEPS  5
#define POSMIN 0
#define POSMAX 255

int lastPos, newPos;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);

  Serial.begin(9600);
  encoder.setPosition(10 / STEPS);
}

void loop() {
  encoder.tick();
  newPos = encoder.getPosition() * STEPS;

  if (newPos < POSMIN) {
    encoder.setPosition(POSMIN / STEPS); newPos = POSMIN;
  }

  else if (newPos > POSMAX) { 
    encoder.setPosition(POSMAX / STEPS); 
    newPos = POSMAX; 
  }

  if (lastPos != newPos) {
    Serial.println(newPos);
    lastPos = newPos;
  }

  analogWrite(11, lastPos);

  if (digitalRead(2) == HIGH) { digitalWrite(12, LOW);  }
  if (digitalRead(2) == LOW)  { digitalWrite(12, HIGH); }
}

Управление серво мотором от энкодера Ардуино

Управление серво мотором от энкодера Ардуино

На рисунке показано подключение сервопривода и энкодера к Ардуино. Логический провод сервомотора (желтый или оранжевый) подключается к порту 11 микроконтроллера. Программа устанавливает угол поворота сервопривода поворотом ручки модуля ky-040. Работа программы аналогична управлению от потенциометра (переменного резистора), но в случае с энкодером угол micro servo может быть установлен максимально точно.

Скетч для управления сервомотором от энкодера

#include "RotaryEncoder.h"
RotaryEncoder encoder(A2, A3);  // (DT, CLK)

#include "Servo.h"
Servo servo;

#define STEPS  10
#define POSMIN 0
#define POSMAX 180

int lastPos, newPos;

void setup() {
  servo.attach(11);
  Serial.begin(9600);
  encoder.setPosition(10 / STEPS);
}

void loop() {
  encoder.tick();
  newPos = encoder.getPosition() * STEPS;

  if (newPos < POSMIN) {
    encoder.setPosition(POSMIN / STEPS); newPos = POSMIN;
  }

  else if (newPos > POSMAX) { 
    encoder.setPosition(POSMAX / STEPS); 
    newPos = POSMAX; 
  }

  if (lastPos != newPos) {
    Serial.println(newPos);
    lastPos = newPos;
  }

  servo.write(lastPos);
}

Заключение. Мы рассмотрели распиновку энкодера и несколько вариантов подключения модуля ky-040 к Arduino. Пример с управлением светодиода Ардуино и управлением сервомотором с помощью rotary encoder. Модуль можно использовать для создания меню на lcd 1602 и в других проектах. В скетчах использована библиотека RotaryEncoder.h, но есть еще несколько библиотек, которые просто не помещаются в один обзор.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜