Ардуино. Используем механический энкодер

08.04.2020, 18:49
Источник: автор: admin


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

ЗадачаArduino. Используем механический энкодер

При помощи механического энкодера менять яркость свечения светодиода.

Для реализации потребуется

  1. Arduino;
  2. Отладочная плата;
  3. Механический энкодер;
  4. Соединительные провода;
  5. Резистор 220 Ом;
  6. 2 резистора 10 КОм;
  7. Светодиод.

Реализация

Подробно описывать принцип действия энкодера не буду, все есть в wikipwdia, ссылочка была выше)

Для определения направления вращения энкодера будем использовать функцию преобразования кода Грея в двоичный код, функция взята прямо из wikipedia без изменений.

Подключаем провода:

  1. Правую и левую ножку энкодера подключаем D11 и D12 и через резисторы 10 КОм к 5V;
  2. Средний контакт энкодера подключаем к GND;
  3. К выходу D9 подключить резистор 220 Ом, к резистору подключаем анод светодиода, катод подключаем к выходу GND.

Код:

Примеров кода в интернетах очень много, читаем их, еще читаем их и пишем свой кусок кода)

enum {LED_PIN = 9, ENC_PIN1 = 11, ENC_PIN2 = 12};

int brightness  = 120;  // Яркость
int change      = 10;   // Изменение яркости

void setup() {
  pinMode(ENC_PIN1,  INPUT);
  pinMode(ENC_PIN2,  INPUT);
  pinMode(LED_PIN,   OUTPUT);
}

// Преобразование значения Грея в двоичный код
// без изменений прямиком из wilipedia
unsigned graydecode(unsigned gray) {
  unsigned bin;

  for (bin = 0; gray; gray >>= 1)
    bin ^= gray;

  return bin;
}

//  grayValue - Значение Грея
//  value     - Преобразованное значение Грея
//  oldValue  - Старое преобразованное значение Грея
void loop() {

  static uint8_t oldValue = 0;

  uint8_t grayValue = digitalRead(ENC_PIN1) | (digitalRead(ENC_PIN2) << 1), value = graydecode(grayValue);

  if (value == 0) // Энкодер вращается
  {
    if (oldValue == 3) { // Вправо
      if (brightness + change <= 255) brightness += change;
    }
    else if (oldValue == 1) { // Влево
      if (brightness - change >= 0) brightness -= change;
    }
  }

  analogWrite(LED_PIN, brightness); // Задаем яркость светодиода

  oldValue = value;

  delay(1);
}

Заливаем скетч на arduino и радуемся результату


Ключевые слова:
Arduino
Ардуино
механический энкодер
робот


Ардуино. Демонстрация работы аналогового входа Ардуино. Демонстрация работы аналогового входа
Демонстрация работы аналогового ...
Вернуться в рубрику:

Проекты на платформе Ардуино


Хотите видеть на нашем сайте больше статей? Кликните Поделиться в социальных сетях! Спасибо!


Обратите внимание полезная информация.
Робототехника для каждого. 2024г.