Модуль энкодера KY-040

Описание

Энкодер (или датчик угла поворота) - устройство, которое нужно для преобразования угла поворота в электрический сигнал. Таким образом можно определить угол его поворота. Энкодеры очень широко применяются в различных видах устройств. Они применяются в сервоприводах, робототехнике, электронике, машиностроении. Энкодеры бывают двух типов: абсолютные и накапливающие:

  • Абсолютные - позволяют определить угол поворота непосредственно по положению вала датчика. Основным отличием данного типа датчиков является то, что что уже при включении они могут определить угол поворота.
  • Накапливающие - формируют импульсы, по числу которых можно определить положение вала. Сразу же после включения положение вала такого типа датчиков неизвестно.

Рассматриваемый энкодер относится к датчикам накапливающего типа.

Физические размеры

  • Модуль (Д х Ш х В): 31 х 19 х 31 мм

Плюсы использования

  • Удобен для использования в проектах с определением угла поворота
  • В энкодер встроена кнопка

Минусы использования

  • В датчиках данного типа невозможно определить угол поворота сразу же после включения

Библиотека для работы с модулем

Внимание! При использовании данных модулей в том числе и для определения нажатия кнопки, необходимо дополнительное использование резистора на 10 кОм.

Примеры подключения и использования

Пример 1: В примере иллюстрируется подключение модуля энкодера к контроллеру, и определение текущего значения поворота. Значение поворота выводится в монитор Serial - порта. (Примеры тестировались на контроллере Smart UNO)

Схема подключения:

Скетч для загрузки:

//Подключение библиотеки для энкодера
#include <Encoder.h>

//пины
const int CLK_PIN = 10;
const int DT_PIN = 9;


long position  = -999; //установка значения переменной для хранения текущей позиции 

//создание объекта типа Экнеодер
Encoder myEnc(DT_PIN, CLK_PIN);

void setup() {
  Serial.begin(9600); //инициализация Serial-порта
}



void loop() {
  long newPosition = myEnc.read(); //считать новую позицию
  if (newPosition != position) { //если значение отличается от старого
    position = newPosition; //установить новое текущее значение
    Serial.println(position); //вывести значение в Serial - порт
  }
  // Если в код добавить существенную задержку,
  // Энкодер сможет отследить только очень медленное движение.
  // Для проверки, можно расскоментировать нижнюю строчку:

  //delay(50);
}

Пример 2: В примере иллюстрируется подключение модуля энкодера к контроллеру, и определение текущего значения поворота. Также проверяется нажатие кнопки энкодера. Значения поворота и нажатия кнопки выводятся в монитор Serial - порта. (Примеры тестировались на контроллере Smart UNO)

Схема подключения:

Скетч для загрузки:

//Подключение библиотеки для энкодера
#include <Encoder.h>

//пины
const int CLK_PIN = 10;
const int DT_PIN = 9;
const int SW_PIN = 8;

long position  = -999; //установка значения переменной для хранения текущей позиции 

//создание объекта типа Экнеодер
Encoder myEnc(DT_PIN, CLK_PIN);

void setup() {
  Serial.begin(9600); //инициализация Serial-порта
}



void loop() {
  long newPosition = myEnc.read(); //считать новую позицию
  if (newPosition != position) { //если значение отличается от старого
    position = newPosition; //установить новое текущее значение
    Serial.println(position); //вывести значение в Serial - порт
  }
  
  // Если в код добавить существенную задержку,
  // Энкодер сможет отследить только очень медленное движение.
  // Для проверки, можно расскоментировать нижнюю строчку:

  //delay(50);

  if (digitalRead(SW_PIN) == LOW) { //проверка нажатия на кнопку
    Serial.println("Pressed"); //вывод сообщения
  }
  
}