Отправляем напрямую из Москвы за 3-4 дня

WhatsApp, Telegram, Viber
пн - пт: 10:00 – 20.00

Энкодер Keyes KY-040

Общая информация
Модуль энкодера Keyes KY-040

Механический датчик, преобразует угол поворота в электрические сигналы. Говоря простым языком — вал в данном датчике можно крутить в любом направлении (по часовой и против часовой стрелки) любое колич... Перейти к полному описанию

3 руб.

 

Артикул: 23869542

 

нет

 

Общая информация

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

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

У датчика 5 выходов: электрические импульсы от вращения появляются на ногах CLK и DT, за кнопку отвечает выход SW, а на + и на GND подается питание (5V) и земля соответственно.

Принцип определения направления вращения следующий: при изменении сигнала CLK с высокого уровня (HIGH) на низкий (LOW), считывается состояние сигнала DT. Значение этого сигнала даст нам информацию по направлению движения.

Способ подключения

Рассмотрим пример подключения модуля к плате Arduino UNO. По аналогии можно подключить модуль и к другим платам.

  • + с датчика подключим к +5V от Arduino
  • GND к GND
  • SW ко 2 выходу UNO
  • DT к 3 выходу UNO
  • CLK к 4 выходу

Пример скетча

int pinDT = 3;
int pinCLK = 4;


int pinSW = 2;


// переменные для хранения текущего и предыдущего состояния CLK
int CLKCurrent, CLKLast;
int DTCurrent;
int SWCurrent;


void setup() 
{
    Serial.begin(9600);


    pinMode(pinDT, INPUT);
    pinMode(pinCLK, INPUT);
    pinMode(pinSW, INPUT);
}


void loop() 
{
    CLKCurrent = digitalRead(pinCLK);
    DTCurrent = digitalRead(pinDT);


    //Serial.println(CLKCurrent);
    
    // произошло вращение
    if (CLKCurrent != CLKLast) {
        // чтобы узнать направления вращения, будем считывать значение DT


        if (DTCurrent == CLKCurrent) {
            // на пине DT HIGH, значит вращение произошло по часовой стрелке (CW)
            Serial.println("Rotated clockwise");
        } else {
            // на пине DT LOW, значит вращение произошло по часовой стрелке (CCW)
            Serial.println("Rotated counterclockwise");
        }
    }
  
    CLKLast = CLKCurrent;
}