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


»сточник: автор: 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
јрдуино
механический энкодер
робот
робототехника


јрдуино. ƒемонстраци€ работы аналогового входа
  • ƒемонстраци€ работы аналогового ...
  • ¬ернутьс€ в рубрику:

    ѕроекты на платформе јрдуино
    јрдуино. »спользуем фотопрерыватель
  • јрдуино. »спользуем ...


  • ≈сли вы хотите видеть на нашем сайте больше статей то кликните ѕоделитьс€ в социальных сет€х! —пасибо!

    ќбратите внимание полезна€ информаци€.