KY-040 · модуль поворотного энкодера

Joy-IT · KY-040

Относительное вращение и нажатие для меню и ручных регуляторов.

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьЛегко
Проекты с компонентом

О МОДУЛЕ

Что делает KY-040

Joy-IT KY-040 — плата механического инкрементального энкодера с кнопкой нажатия. Два контактных канала дают последовательность переходов, по которой программа определяет направление и относительное перемещение. Абсолютного положения после включения модуль не сообщает.

Это модуль с разъёмом и подтягивающими резисторами, поэтому он отличается от отдельного EC11. Механические контакты дребезжат; полезны декодирование допустимых состояний, фильтрация и контроль скорости опроса. Число переходов на оборот и отношение переходов к щелчку не считаются одинаковыми у всех KY-040.

Пример выводит счётчик переходов квадратуры, не угол в градусах. Кнопка сбрасывает отсчёт.

Характеристики

Тип
Механический инкрементальный энкодер
Каналы
CLK, DT и SW
Абсолютное положение
Нет
Питание модуля
В примере Joy-IT/UNO R3 питание +V = 5 В; подтяжки задают уровни CLK/DT. На ESP32 нельзя оставлять подтяжки к 5 В: нужна подтверждённая схема на 3,3 В либо согласование каждого сигнала. Механический тип энкодера сам по себе не доказывает безопасность всей платы при 5 В.

ПРАКТИКА

Подключение

Схема подключения
Контакт модуляКонтакт платыНазначение
CLKD2Канал A Arduino UNO R3.
DTD3Канал B.
SWD4Кнопка; INPUT_PULLUP, нажатие LOW.
+5VПитание подтяжек в примере UNO.
GNDGNDОбщая земля.

Подходит для Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги подключить KY-040 · модуль поворотного энкодера к моему проекту. Сначала уточни точную плату, её напряжение логики, среду разработки, задачу и исполнение модуля по фотографии. Базовый пример карточки рассчитан на Arduino UNO R3 с Arduino AVR Boards 1.8.6. Не переноси номера D на ESP32. Подготовь подключение, зависимости, минимальный пример, обработку входных состояний или безопасное выключение выхода и шаги проверки. Сверь каждый контакт по маркировке конкретной платы. Проверка: медленно поверните в обе стороны и нажмите вал. Направление знака зависит от подключения CLK/DT. Если нужны шаги на щелчок или угол, измерьте переходы на один оборот своего экземпляра; быстрые повороты при опросе могут пропускаться.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Плата и ядро
Arduino UNO R3; Arduino AVR Boards 1.8.6

Выберите Arduino Uno в Arduino IDE. В .ino стандартный Arduino.h подключается автоматически.

Входы
CLK = 2; DT = 3; SW = 4

UNO R3; программа опрашивает выводы без delay.

Serial Monitor
115200

Выводится относительный счётчик переходов, не число оборотов.

Фильтр кнопки
30 мс

Измените при реальном дребезге; это настройка примера, не паспортная характеристика.

Зависимости
Не требуются

Декодер состояний включён в скетч.

Arduino UNO R3 · полный скетч

cpp
const byte CLK = 2, DT = 3, SW = 4;
const int8_t transition[16] = {
  0, -1, 1, 0, 1, 0, 0, -1,
  -1, 0, 0, 1, 0, 1, -1, 0
};
byte previousAB;
long count = 0;
int lastRawButton = HIGH, stableButton = HIGH;
unsigned long buttonChangedAt = 0, lastReport = 0;
long lastReported = 0;
void setup() {
  Serial.begin(115200);
  pinMode(CLK, INPUT_PULLUP); pinMode(DT, INPUT_PULLUP);
  pinMode(SW, INPUT_PULLUP);
  previousAB = (digitalRead(CLK) << 1) | digitalRead(DT);
}
void loop() {
  const unsigned long now = millis();
  const byte ab = (digitalRead(CLK) << 1) | digitalRead(DT);
  count += transition[(previousAB << 2) | ab];
  previousAB = ab;
  const int raw = digitalRead(SW);
  if (raw != lastRawButton) {
    lastRawButton = raw;
    buttonChangedAt = now;
  }
  if (now - buttonChangedAt >= 30 && raw != stableButton) {
    stableButton = raw;
    if (stableButton == LOW) count = 0;
  }
  if (now - lastReport >= 100 && count != lastReported) {
    lastReport = now;
    lastReported = count;
    Serial.print("Quadrature transitions = ");
    Serial.println(count);
  }
}

Полный пример для Arduino UNO R3 и API Arduino AVR Boards 1.8.6. Аппаратно не испытан. Проверка: медленно поверните в обе стороны и нажмите вал. Направление знака зависит от подключения CLK/DT. Если нужны шаги на щелчок или угол, измерьте переходы на один оборот своего экземпляра; быстрые повороты при опросе могут пропускаться.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты