Модуль датчика вращения (валкодер) rotary encoder module KY-040
Характеристики энкодера KY-040
Наибольшее напряжение 5В;
Наибольший ток 10 мА;
Формат выходного сигнала: квадратурный код 2 бит;
Температура эксплуатации от -30°C до 70°C;
Число оборотов вращения энкодера при эксплуатации не менее 30 тысяч раз, нажатий на кнопку не менее 20 тысяч раз;
Сопротивление контактов 100 мОм;
Один оборот равен 24 импульсам.
Распиновка энкодера KY-040

CLK импульсы отсчета;
DT импульсы направления;
SW кнопка нажатия;
+ питание 5 V;
GND земля.
Распиновка энкодера WAVGAT Rotary Encoder Module

+5 питание;
KEY кнопка нажатия;
S1 установка значений против часовой стрелки;
S2 установка значений по часовой стрелки;
GND земля.
Принципиальная схема модуля энкодера KY-040

Схема подключения модуля энкодера KY-040 к Arduino UNO

Скетч для энкодера KY-040 подключенного к Arduino UNO
const int pin_digital_outputCLK=9;
const int pin_digital_outputDT=8;
const int pin_digital_outputSW=7;
int counter = 0;
int currentCLK;
int lastCLK;
String currentEnc ="";
unsigned long ButtonPress = 0;
void setup() {
pinMode (pin_digital_outputCLK,INPUT);
pinMode (pin_digital_outputDT,INPUT);
pinMode (pin_digital_outputSW,INPUT);
Serial.begin (9600);
lastCLK = digitalRead(pin_digital_outputCLK);
}
void loop() {
currentCLK = digitalRead(pin_digital_outputCLK);
if (currentCLK != lastCLK && currentCLK == 1){
if (digitalRead(pin_digital_outputDT) != currentCLK) {
counter --;
currentEnc ="DE ";
} else {
counter ++;
currentEnc ="IN ";
}
Serial.print(currentEnc);
Serial.println(counter);
}
lastCLK = currentCLK;
int ButtonState = digitalRead(pin_digital_outputSW);
if (ButtonState == HIGH) {
if (millis() - ButtonPress > 50) {
Serial.println("Нажатие на кнопку");
}
ButtonPress = millis();
}
delay(1);
}
Результат работы скетча:

