- Потребни материјали
- Како функционише ротациони кодер?
- Врсте ротационог кодера
- КИ-040 Ротирајући кодер Пиноут и опис
- Шема круга ротационог енкодера Ардуино
- Програмирање вашег Ардуина за ротациони кодер
- Рад ротационог кодера са Ардуином
Ротари енкодер је улазни уређај који помаже корисницима да интеракцију са системом. Више личи на радио потенциометар, али емитује низ импулса што његову примену чини јединственом. Када се дугме кодера окрене, окреће се у облику малих корака, што му помаже да се користи за управљање корачним / серво мотором, кретање кроз низ менија и повећање / смањење вредности броја и још много тога.
У овом чланку ћемо научити о различитим врстама ротационих кодера и како то функционише. Такође ћемо га повезати са Ардуином и контролисати вредност целог броја окретањем кодера и приказати његову вредност на ЛЦД екрану 16 * 2. На крају овог водича биће вам угодно да користите ротациони кодер за своје пројекте. Па кренимо…
Потребни материјали
- Ротацијски енкодер (КИ-040)
- Ардуино УНО
- 16 * 2 алфанумерички ЛЦД
- Потенциометар 10к
- Бреадбоард
- Повезивање жица
Како функционише ротациони кодер?
Ротациони енкодер је електромеханички претварач, што значи да претвара механичке покрете у електронске импулсе. Састоји се од дугмета који ће се при окретању кретати корак по корак и стварати низ импулсних склопова унапред дефинисане ширине за сваки корак. Постоји много типова енкодера, сваки са својим радним механизмом, о врстама ћемо сазнати касније, али за сада се концентришимо само на инкрементални кодер КИ040, јер га користимо за наш водич.
Унутрашња механичка структура давача је приказана у наставку. У основи се састоји од кружног диска (сива боја) са проводљивим јастучићима (бакарна боја) постављених на врх овог кружног диска. Ови проводни јастучићи постављени су на једнакој удаљености као што је приказано доле. Излазне иглице су фиксиране на врх овог кружног диска, на такав начин да када се окреће дугме проводне плочице дођу у контакт са излазним иглицама. Овде се налазе два излазна пина, излаз А и излаз Б, као што је приказано на доњој слици.
Излазни таласни облик који производе излазни пин А и излаз Б приказан је плавом, односно зеленом бојом. Када се проводна плочица налази директно испод осовинице, она иде високо, што резултира на време, а када се проводљива плочица одмиче, игла се спушта, што резултира временом искључења таласног облика приказаног горе. Сада, ако избројимо број импулса, моћи ћемо да одредимо колико је корака кодирање премештено.
Сад се може поставити питање зашто су нам потребна два импулсна сигнала када је један довољан да се изброји број корака предузетих током окретања дугмета. То је зато што морамо да препознамо у ком смеру је дугме ротирано. Ако погледате два импулса, приметићете да су оба ван фазе за 90 °. Дакле, када се дугме ротира у смеру казаљке на сату, излаз А ће прво ићи високо, а када се дугме окреће у смеру кретања казаљке на сату, излаз Б прво ће се високо подићи.
Врсте ротационог кодера
На тржишту постоји много врста ротационих кодера које дизајнер може одабрати према својој примени. Најчешћи типови су наведени у наставку
- Инкрементални кодер
- Абсолуте Енцодер
- Магнетиц Енцодер
- Оптички кодер
- Ласерски кодер
Ови енкодери су класификовани на основу излазног сигнала и сензорске технологије, инкрементални енкодер и апсолутни енкодери су класификовани на основу излазног сигнала, а магнетни, оптички и ласерски енкодери су класификовани на основу сензорске технологије. Кодер се овде користи је тип Постепено енкодера.
КИ-040 Ротирајући кодер Пиноут и опис
Изводи пин-окретног кодера КИ-040 инкрементални су приказани доле
Прва два пина (уземљење и Вцц) користе се за напајање кодера, обично се користи напајање од + 5В. Осим што окреће дугме у смеру кретања казаљки на сату и у смеру супротном од кретања казаљке на сату, кодер има и прекидач (Ацтиве лов) који се може притиснути притиском на дугме изнутра. Сигнал са овог прекидача добија се преко пина 3 (прекидач). Коначно, има два излазна пина који производе таласне облике као што је већ горе речено. Сада ћемо научити како да га повежемо са Ардуином.
Шема круга ротационог енкодера Ардуино
Комплетна шема кола за повезивање ротационог кодера са Ардуином приказана је на доњој слици
Ротацијски кодер има 5 пинова по редоследу приказаном на горњој налепници. Прва два пина су Гроунд и Вцц који је повезан са уземљењем и + 5В пином Ардуина. Прекидач кодера повезан је на дигитални пин Д10 и такође је повучен високо кроз 1к отпорник. Два излазна пина су повезана са Д9 односно Д8.
За приказ вредности променљиве која ће се повећати или смањити окретањем ротационог кодера потребан нам је модул приказа. Овде коришћени обично је доступан 16 * 2 алфа нумерички ЛЦД екран. Повезали смо екран да би радио у 4-битном режиму и напајали смо га помоћу + 5В пина Ардуина. Потенциометар се користи за подешавање контраста ЛЦД екрана. Ако желите да сазнате више о повезивању ЛЦД екрана са Ардуином, следите везу. Комплетан круг се може изградити на врху плоче, ја сам изгледао овако некако испод кад су све везе биле готове.
Програмирање вашег Ардуина за ротациони кодер
Прилично је лако и једноставно програмирати Ардуино плочу за повезивање ротационог кодера са њом ако сте разумели принцип рада ротационог кодера. Једноставно морамо очитати број импулса да бисмо утврдили колико окретаја је енкодер направио и проверити који импулс је прешао високо да бисмо пронашли у ком смеру је енкодер ротиран. У овом упутству ћемо приказати број који се увећава или смањује у првом реду ЛЦД-а, а смер кодера у другом реду. Комплетан програм за то исто може наћи на дну ове странице са демонстрација видео, то не захтева никакву библиотеку. Сада, поделимо програм на мале делове да бисмо разумели рад.
Будући да смо користили ЛЦД екран, укључујемо библиотеку течних кристала која је подразумевано присутна у Ардуино ИДЕ-у. Затим дефинишемо игле за повезивање ЛЦД-а са Ардуином. На крају иницијализујемо ЛЦД екран на тим иглама.
#инцлуде
Следећа унутар подешавање функција, можемо приказати уводни поруку на ЛЦД екрану, а затим сачекајте за 2 секунде, тако да та порука је корисник читљив. На овај начин се осигурава да ЛЦД исправно ради.
лцд.принт („ротациони кодер“); // Увод у линију поруке 1 лцд.сетЦурсор (0, 1); лцд.принт („Витх Ардуино“); // Увод у поруци реда за одлагање 2 (2000); лцд.цлеар ();
Ротацијски кодер има три излазна пина који ће бити ИНПУТ пинови за Ардуино. Ова три пина су прекидач, излаз А и излаз Б. Они су проглашени као улаз користећи пинМоде функције као што је приказано у наставку.
// декларација начина пин пинМоде (Енцодер_ОупутА, ИНПУТ); пинМоде (Енцодер_ОупутБ, ИНПУТ); пинМоде (Енцодер_Свитцх, ИНПУТ);
Унутар функције подешавања празнине читамо статус излазног А пина да бисмо проверили последњи статус пина. Затим ћемо те информације користити за упоређивање са новом вредношћу да бисмо проверили који пин (излаз А или излаз Б) је превисок.
Превиоус_Оутпут = дигиталРеад (Енцодер_ОупутА); // Очитавање почетне вредности излаза А
Коначно, унутар функције главне петље , морамо упоредити вредност излаза А и излаза Б са претходним излазом да бисмо проверили који ће прво ићи високо. То се може учинити једноставним упоређивањем вредности тренутног излаза А и Б са претходним излазом, као што је приказано доле.
иф (дигиталРеад (Енцодер_ОупутА)! = Превиоус_Оутпут) { иф (дигиталРеад (Енцодер_ОупутБ)! = Превиоус_Оутпут) { Енцодер_Цоунт ++; лцд.цлеар (); лцд.принт (Енцодер_Цоунт); лцд.сетЦурсор (0, 1); лцд.принт („у смеру казаљке на сату“); }
У горе код друга ако услов буде извршена ако Излаз Б променио у односу на претходну излаза. У том случају се вредност променљиве кодера увећава и ЛЦД приказује да је енкодер ротиран у смеру казаљке на сату . Слично томе, ако то уколико услови не успе, у следећем услову елсе смањујемо променљиву и приказујемо да је кодер ротиран у смеру супротном од кретања казаљке на сату . Код за исти приказан је испод.
елсе { Енцодер_Цоунт--; лцд.цлеар (); лцд.принт (Енцодер_Цоунт); лцд.сетЦурсор (0, 1); лцд.принт ("У супротном смеру казаљке на сату"); } }
Коначно, на крају главне петље морамо да ажурирамо претходну излазну вредност тренутном излазном вредношћу тако да се петља може поновити истом логиком. Следећи код чини исто
Превиоус_Оутпут = дигиталРеад (Енцодер_ОупутА);
Друга необавезна ствар је проверити да ли је притиснут прекидач на кодеру. То се може надзирати провјером прекидача на ротацијском кодеру. Овај пин је активан ниски пин, што значи да ће пасти ниско када се притисне дугме. Ако пин није притиснут, остаје висок, такође смо користили повлачни отпорник како бисмо били сигурни да остаје висок када прекидач није притиснут, чиме се избегава стање са покретном зарезом.
иф (дигиталРеад (Енцодер_Свитцх) == 0) {лцд.цлеар (); лцд.сетЦурсор (0, 1); лцд.принт („Прекидач притиснут“); }
Рад ротационог кодера са Ардуином
Једном када су хардвер и код спремни, само отпремите код на Ардуино плочу и укључите Ардуино плочу. Можете га напајати путем УСБ кабла или користити адаптер од 12В. Када се напаја, ЛЦД би требао приказати уводну поруку, а затим се испразнити. Сада окрените ротациони кодер и требало би да видите како вредност почиње да се увећава или смањује у зависности од смера у ком се окрећете. Други ред ће вам показати да ли се кодер ротира у смеру кретања казаљке на сату или у смеру супротном од казаљке на сату. Слика испод показује исто
Такође када се притисне дугме, у другом реду ће се приказати да је дугме притиснуто. Комплетан рад можете пронаћи у видео снимку испод. Ово је само пример програма за повезивање кодера са Ардуином и проверу да ли ради како се очекује. Када стигнете овде, требали бисте бити у могућности да користите кодирање за било који од својих пројеката и у складу с тим програмирате.
Надам се да сте разумели водич и да су ствари функционисале онако како треба. Ако имате било каквих проблема, користите одељак за коментаре или форуме за техничку помоћ.