Съдържание:

Ротационен енкодер - Разберете и го използвайте (Arduino/друг ΜКонтролер): 3 стъпки
Ротационен енкодер - Разберете и го използвайте (Arduino/друг ΜКонтролер): 3 стъпки

Видео: Ротационен енкодер - Разберете и го използвайте (Arduino/друг ΜКонтролер): 3 стъпки

Видео: Ротационен енкодер - Разберете и го използвайте (Arduino/друг ΜКонтролер): 3 стъпки
Видео: Лучший из ЛУЧШИХ???. Радиоприемник TECSUN PL680 ПОЛНЫЙ ОБЗОР!!! #tecsun 2024, Ноември
Anonim
Ротационен енкодер - Разберете и го използвайте (Arduino/друг ntroКонтролер)
Ротационен енкодер - Разберете и го използвайте (Arduino/друг ntroКонтролер)

Ротационен енкодер е електромеханично устройство, което преобразува въртеливото движение в цифрова или аналогова информация. Може да се върти по часовниковата стрелка или обратно. Има два вида ротационни енкодери: абсолютни и относителни (инкрементални) енкодери.

Докато абсолютният енкодер извежда стойност, пропорционална на текущия ъгъл на вала, инкрементният енкодер извежда стъпката на вала и неговата посока. (В този случай имаме инкрементален енкодер)

Ротационните енкодери стават все по -популярни, защото можете да използвате две функции в един електрически модул: Прост превключвател за потвърждаване на работа и въртящ се енкодер за навигация, напр. чрез меню.

Инкрементален въртящ се енкодер генерира два изходни сигнала, докато валът му се върти. В зависимост от посоката, един от сигналите води другия. (виж отдолу)

Стъпка 1: Разбиране на изходните данни

Разбиране на изходните данни
Разбиране на изходните данни

Както можете да видите, когато валът на енкодера започне да се върти по посока на часовниковата стрелка, изход A пада първо на LOW и изход B го следва. В посока обратна на часовниковата стрелка операцията се обръща обратно.

Сега просто трябва да приложим това на нашия µController (използвах Arduino Nano).

Стъпка 2: Изградете веригата

Изградете веригата
Изградете веригата
Изградете веригата
Изградете веригата

Както описах преди изходите създават HIGH и LOW фланг. За да получим чиста HIGH на данните за изводи A и B на µController, трябва да добавим Pull-Up резистори. Общият щифт C отива направо към земята за НИСКИЯ фланг.

За да получим информация за вътрешния превключвател (бутон) ще използваме другите два щифта. Един от тях отива към VCC, а другият към пин за данни на µController. Трябва също да добавим издърпващ се резистор към щифта за данни, за да получим чисто LOW.

Възможно е също така да използвате вътрешни издърпващи и издърпващи резистори на вашия µКонтролер!

В моя случай разпечатката изглежда така:

  • +3, 3V => +3, 3V (Arduino) (също възможно +5V)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    ПИН

    11

  • C => GND
  • SW =>

    ПИН

    12

Стъпка 3: Написване на кода

int pinA = 10; // вътрешен превключвател A int pinB = 11; // вътрешен превключвател B int pinSW = 12; // превключвател (натиснат енкодер) int encoderPosCount = 0; // започва от нула, променя се, ако искате

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); забавяне (50); }

void loop () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// копчето се върти if (digitalRead (pinB)! = mrotate) {// превключвател A се променя първо -> въртящ се енкодер по часовниковата стрелкаPosCount ++; Serial.println ("завъртян по часовниковата стрелка"); } else {// превключвателят B се промени първо-> въртящ се обратно на часовниковата стрелка encoderPosCount--; Serial.println ("завъртян обратно на часовниковата стрелка"); }

Serial.print ("Позиция на енкодера:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; return encoderPosCount; } bool readwitch () {

if (digitalRead (pinSW)! = 0) {// бутонът е натиснат

while (digitalRead (pinSW)! = 0) {} // превключвателят в момента е натиснат switchval = 1; } else {switchval = 0;} // превключвателят е без натиск връщане switchval; }

Сега можете да завъртите енкодера и променливият енкодерPosCount ще брои нагоре, ако завъртите по посока на часовниковата стрелка и отброявате, ако се завъртите обратно на часовниковата стрелка.

Това е! Просто и полезно.

Чувствайте се свободни да променяте и изпълнявате кода. Можете да го внедрите във вашия проект.

Ще кача и светодиоден проект, в който използвах енкодера, за да задам яркостта на моите светодиоди.

Препоръчано: