Модуль энкодер Ардуино

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1611
Зарегистрирован: 5 апреля 2013
С нами: 11 лет

#1 Дим » 14 ноября 2020, 19:23

Энкодер Ардуино, а точнее модуль KY-040 очень часто используется в проектах для управления различными устройствами от платы Arduino. В этом обзоре мы рассмотрим схему подключения модуля к микроконтроллеру, а также представим сразу несколько примеров с использованием датчика для включения и управления яркостью светодиодов, вращение сервопривода с помощью энкодера и платы Arduino.

Модуль энкодер Ардуино: схема, распиновка

Энкодер служит для преобразования угла поворота в электрический сигнал. При вращении ручки модуля мы получаем два сигнала (A и B), которые противоположны по фазе. Сигналы A и B зависят друг от друга при вращении энкодера Ардуино по часовой или против часовой стрелки. Для считывания сигнала A и B с энкодера можно использовать, как цифровые, так и аналоговые порты микроконтроллера.
Распиновка и принципиальная схема модуля энкодера.jpg
Распиновка и принципиальная схема модуля энкодера
Распиновка и принципиальная схема модуля энкодера.jpg (47.21 КБ) 1901 просмотр

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

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

Для занятия нам понадобятся следующие детали:

плата Arduino Uno / Arduino Nano / Arduino Mega;
модуль энкодер ky-040;
беспаечная макетная плата;
светодиоды и резисторы;
микро сервопривод;
провода «папа-папа», «папа-мама».

Для работы с энкодером потребуется установить библиотеку RotaryEncoder.h. Если у вас возникли трудности с установкой библиотеки для энкодера, то рекомендуем ознакомиться с информацией, как установить библиотеку в Arduino IDE. Для подключения KY-040 к Arduino можно использовать цифровые и аналоговые пины микроконтроллера, в наших примерах используются пины A1-A3.

Пример Ардуино энкодер прерывание

Схема подключения энкодера к Ардуино (модуль KY-040).jpg
Схема подключения энкодера к Ардуино (модуль KY-040)
Схема подключения энкодера к Ардуино (модуль KY-040).jpg (69.34 КБ) 1901 просмотр

Разберем для начала самый простой пример управления энкодером от Ардуино с помощью прерываний, где вся черновая работа по определению положения ручки энкодера выполняется с помощью библиотеки 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; 
   
}
}

Пояснения к коду:
начальное положение ручки равно нулю static int pos = 0; и это значение выводится на мониторе порта в процедуре void setup в начале программы;
в примере программы для энкодера нет ограничения по положению рукоятки датчика KY-040, положение может быть положительным и отрицательным.
Управление энкодером Ардуино светодиодом

Как подключить энкодер для управления светодиодами.jpg
Как подключить энкодер для управления светодиодами
Как подключить энкодер для управления светодиодами.jpg (85.59 КБ) 1901 просмотр

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

Код: Выделить всё

#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);  // пин подключения кнопки энкодера (SW)
   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); }
}

Пояснения к коду:
для пина 2 используется конфигурация INPUT_PULLUP, так как кнопка энкодера подключена к GND и при ее нажатии на цифровом входе будет сигнал LOW;
в программе можно изменить максимальное и минимальное значение поворота энкодера, а также шаг вращения ручки датчика ky-040.
Управление серво мотором от энкодера

Управление микро серво от энкодера Ардуино Уно.jpg
Управление микро серво от энкодера Ардуино Уно
Управление микро серво от энкодера Ардуино Уно.jpg (75.01 КБ) 1901 просмотр

Следующий скетч демонстрирует подключение серво с энкодером. Логический провод микросерво (желтый или оранжевый цвет) подключается к ШИМ порту 11 микроконтроллера. В программе задается угол поворота серво с помощью поворота ручки модуля ky-040. Работа программы похожа на управление потенциометром серво, но в случае с энкодером, можно задавать максимально точный угол поворота.

Код: Выделить всё

#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);
}

Пояснения к коду:
шаг поворота качалки серво Ардуино составляет 10 градусов. Шаг поворота и максимальный угол поворота можно изменить в программе.
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Аппаратная часть»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость