- Необходими материали
- Как работи ротационен енкодер?
- Видове ротационен енкодер
- KY-040 Ротационен енкодер Pinout и описание
- Схема на въртящ се енкодер на Arduino
- Програмиране на вашия Arduino за ротационен енкодер
- Работа на ротационен енкодер с Arduino
А Ротари енкодер е входно устройство, което помага на потребителя да взаимодейства със системата. По-скоро прилича на радио потенциометър, но извежда последователност от импулси, което прави приложението му уникално. Когато копчето на енкодера се завърти, той се върти под формата на малки стъпки, което му помага да се използва за управление на стъпков / серво мотор, навигация през последователност от менюта и увеличаване / намаляване на стойността на число и много други.
В тази статия ще научим за различните видове ротационни енкодери и как тя работи. Също така ще го свържем с Arduino и ще контролираме стойността на цяло число, като завъртим енкодера и ще покажем неговата стойност на LCD екран 16 * 2. В края на този урок ще ви е удобно да използвате ротационен кодер за вашите проекти. Така че нека да започнем…
Необходими материали
- Ротационен енкодер (KY-040)
- Arduino UNO
- 16 * 2 буквено-цифров LCD
- Потенциометър 10k
- Макет
- Свързващи проводници
Как работи ротационен енкодер?
Ротационният енкодер е електромеханичен преобразувател, което означава, че преобразува механичните движения в електронни импулси. Състои се от копче, което при завъртане ще се движи стъпка по стъпка и ще създаде последователност от импулсни влакове с предварително определена ширина за всяка стъпка. Има много видове енкодери, всеки със собствен работен механизъм, за типовете ще научим по-късно, но засега нека се концентрираме само върху инкременталния енкодер KY040, тъй като го използваме за нашия урок.
Вътрешната механична структура за енкодера е показана по-долу. По принцип се състои от кръгъл диск (сив цвят) с проводящи подложки (меден цвят), поставен върху този кръгъл диск. Тези проводящи подложки са поставени на еднакво разстояние, както е показано по-долу. Изходните щифтове са фиксирани в горната част на този кръгъл диск, по такъв начин, че когато копчето се завърти, проводимите накладки да влязат в контакт с изходните щифтове. Тук има два изходни щифта, изход A и изход B, както е показано на фигурата по-долу.
Изходната форма на вълната, произведена от изходния щифт A и изход B, е показана съответно в син и зелен цвят. Когато проводящата подложка е директно под щифта, тя отива високо, което я прави навреме и когато проводящата подложка се отдалечава, щифтът отива ниско, което води до изключване на формата на вълната, показана по-горе. Сега, ако преброим броя импулси, ще можем да определим колко стъпки е преместен кодерът.
Сега може да възникне въпросът, защо се нуждаем от два импулсни сигнала, когато един е достатъчен, за да преброим броя на стъпките, извършени по време на въртене на копчето. Това е така, защото трябва да определим в коя посока е завъртяно копчето. Ако погледнете двата импулса, можете да забележите, че и двата са на 90 ° извън фазата. Следователно, когато копчето се завърти по посока на часовниковата стрелка, изходът A ще се покачи първо първо, а когато копчето се завърти обратно на часовниковата стрелка, изходът B ще се покачи първо.
Видове ротационен енкодер
На пазара има много видове ротационни енкодери, които дизайнерът може да избере според приложението си. Най-често срещаните видове са изброени по-долу
- Инкрементален енкодер
- Абсолютен кодер
- Магнитен енкодер
- Оптичен енкодер
- Лазерен кодер
Тези енкодери са класифицирани въз основа на изходния сигнал и сензорната технология, инкременталният енкодер и абсолютните енкодери са класифицирани въз основа на изходния сигнал, а магнитният, оптичният и лазерният енкодер са класифицирани въз основа на сензорната технология. Най- кодер използва тук е тип инкрементален енкодер.
KY-040 Ротационен енкодер Pinout и описание
Пиновете на ротационния енкодер KY-040 Incremental са показани по-долу
Първите два щифта (Ground и Vcc) се използват за захранване на енкодера, обикновено се използва захранване + 5V. Освен че върти копчето по посока на часовниковата стрелка и обратно на часовниковата стрелка, енкодерът има и превключвател (Active low), който може да се натисне чрез натискане на копчето вътре. Сигналът от този превключвател се получава през щифта 3 (превключвател). И накрая, има двата изходни щифта, които произвеждат вълновите форми, както вече беше обсъдено по-горе. Сега нека се научим как да го свързваме с Arduino.
Схема на въртящ се енкодер на Arduino
Пълната схема на схемата за свързване на въртящ се енкодер с Arduino е показана на снимката по-долу
Ротационният енкодер има 5 щифта в реда, показан на етикета по-горе. Първите два щифта са Ground и Vcc, който е свързан към Ground и + 5V щифт на Arduino. Превключвателят на енкодера е свързан към цифров щифт D10 и също така е издърпан високо чрез 1k резистор. Двата изходни щифта са свързани съответно към D9 и D8.
За да покажем стойността на променливата, която ще бъде увеличена или намалена чрез завъртане на въртящия се енкодер, ни е необходим дисплеен модул. Използваният тук е често достъпен 16 * 2 буквен цифров LCD дисплей. Свързахме дисплея, за да работи в 4-битов режим, и го захранвахме с помощта на + 5V щифт на Arduino. Потенциометърът се използва за регулиране на контраста на LCD дисплея. Ако искате да научите повече за взаимодействието на LCD дисплея с Arduino, следвайте връзката. Пълната схема може да бъде изградена на върха на макет, аз изглеждах по подобен начин по-долу, след като всички връзки бяха направени.
Програмиране на вашия Arduino за ротационен енкодер
Доста лесно и директно е да програмирате дъската Arduino за свързване на ротационен енкодер с нея, ако сте разбрали принципа на работа на ротационен енкодер. Просто трябва да прочетем броя на импулсите, за да определим колко оборота е направил енкодерът и да проверим кой импулс е отишъл първо, за да намерим в коя посока е завъртян енкодера. В този урок ще покажем числото, което се увеличава или намалява на първия ред на LCD и посоката на кодера на втория ред. Най- пълната програма за правене на същото може да се намира в долната част на тази страница с видео демонстрация, тя не се нуждае от библиотека. Сега, нека разделим програмата на малки парчета, за да разберем работата.
Тъй като използвахме LCD дисплей, включваме библиотеката с течни кристали, която по подразбиране присъства в IDE на Arduino. След това дефинираме щифтове за свързване на LCD с Arduino. Накрая инициализираме LCD дисплея на тези щифтове.
#include
Следваща във вътрешността на настройка функция, ние се покаже въвеждаща съобщение на LCD екрана, и след това изчакайте за 2 секунди, така че това съобщение е за употреба за четене. Това е, за да се гарантира, че LCD дисплеят работи правилно.
lcd.print ("Ротационен енкодер"); // Входен ред за съобщение 1 lcd.setCursor (0, 1); lcd.print ("С Arduino"); // Забавяне на встъпителния ред 2 (2000); lcd.clear ();
Ротационният енкодер има три изходни щифта, които ще бъдат INPUT щифтове за Arduino. Тези три щифта са съответно превключвател, изход A и изход B. Те се декларират като Input с помощта на функцията pinMode, както е показано по-долу.
// декларация на ПИН режим pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Вътре във функцията за настройка на празнотата четем състоянието на изхода A pin, за да проверим последното състояние на щифта. След това ще използваме тази информация, за да сравним с новата стойност, за да проверим кой щифт (изход A или изход B) е отишъл високо.
Предишен_изход = цифрово четене (Encoder_OuputA); // Прочетете първоначалната стойност на изход A
И накрая във функцията на главния цикъл , трябва да сравним стойността на изход А и изход Б с предходния изход, за да проверим кой от тях първо е висок. Това може да стане чрез просто сравняване на стойността на текущия изход на A и B с предишния изход, както е показано по-долу.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("По часовниковата стрелка"); }
В горния код второто условие if се изпълнява, ако изходът B се промени от предишния изход. В този случай стойността на променливата на кодера се увеличава и LCD показва, че кодерът е завъртян по посока на часовниковата стрелка . По същия начин, ако това, ако условието се провали, в следващото условие else декрементираме променливата и показваме, че кодерът е завъртян в посока, обратна на часовниковата стрелка . Кодът за същото е показан по-долу.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("В посока, обратна на часовниковата стрелка"); } }
И накрая, в края на основния цикъл трябва да актуализираме предишната изходна стойност с текущата изходна стойност, така че цикълът да може да се повтори със същата логика. Следният код прави същото
Предишен_изход = цифрово четене (Encoder_OuputA);
Друго незадължително нещо е да проверите дали превключвателят на енкодера е натиснат. Това може да се следи чрез проверка на превключващия щифт на въртящия се кодер. Този щифт е активен нисък щифт, което означава, че ще се понижи при натискане на бутона. Ако не бъде натиснат, щифтът остава висок, ние също така използвахме издърпващ резистор, за да се уверим, че остава висок, когато превключвателят не е натиснат, като по този начин се избягва състоянието на плаваща запетая.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Превключвателят е натиснат"); }
Работа на ротационен енкодер с Arduino
След като хардуерът и кодът са готови, просто качете кода на платката Arduino и включете Arduino Board. Можете да го захранвате чрез USB кабела или да използвате 12V адаптер. Когато се захранва, LCD дисплеят трябва да покаже въвеждащото съобщение и след това да се изпразни. Сега завъртете въртящия се енкодер и трябва да видите как стойността започва да се увеличава или намалява в зависимост от посоката, в която се въртите. Вторият ред ще ви покаже дали енкодерът се върти по посока на часовниковата стрелка или обратно на часовниковата стрелка. На снимката по-долу се вижда същото
Също така, когато бутонът е натиснат, вторият ред ще покаже, че бутонът е натиснат. Цялата работа може да бъде намерена във видеото по-долу. Това е само примерна програма за свързване на енкодера с Arduino и проверка дали работи както се очаква. След като стигнете тук, трябва да можете да използвате кодера за всеки от вашите проекти и съответно да програмирате.
Надявам се, че сте разбрали урока и нещата са работили както трябва. Ако имате някакви проблеми, използвайте раздела за коментари или форумите за техническа помощ.