- Nepieciešamie materiāli
- Kā darbojas rotējošais kodētājs?
- Rotējošā kodētāja veidi
- KY-040 rotējošā kodētāja tapas un apraksts
- Arduino rotācijas kodētāja shēmas shēma
- Arduino programmēšana Rotary Encoder
- Rotējošā kodētāja darbība ar Arduino
Rotary encoder ir ievades ierīci, kas palīdz lietotājam mijiedarboties ar sistēmu. Tas drīzāk izskatās kā radio potenciometrs, bet tas izstaro impulsu vilcienu, kas padara tā lietošanu unikālu. Kad kodētāja poga tiek pagriezta, tā griežas nelielu pakāpienu veidā, kas palīdz to izmantot soļu / servomotoru kontrolei, pārvietošanās pa izvēlnes secību un skaitļa vērtības palielināšana / samazināšana un daudz kas cits.
Šajā rakstā mēs uzzināsim par dažādiem rotējošo kodētāju veidiem un to darbību. Mēs to saskarsimies arī ar Arduino un kontrolēsim vesela skaitļa vērtību, pagriežot kodētāju, un parādīsim tā vērtību 16 * 2 LCD ekrānā. Šīs apmācības beigās jums būs ērti izmantot Rotary Encoder projektiem. Tātad sāksim…
Nepieciešamie materiāli
- Rotējošais kodētājs (KY-040)
- Arduino UNO
- 16 * 2 burtciparu LCD
- Potenciometrs 10k
- Maizes dēlis
- Savienojošie vadi
Kā darbojas rotējošais kodētājs?
Rotējošais kodētājs ir elektromehāniskais devējs, tas nozīmē, ka tas pārveido mehāniskās kustības elektroniskos impulsos. Tas sastāv no pogas, kas, pagriežoties, pārvietosies soli pa solim un katram solim izveidos impulsu vilcienu secību ar iepriekš noteiktu platumu. Ir daudz veidu kodētāju, katram no kuriem ir savs darba mehānisms. Mēs par tiem uzzināsim vēlāk, bet tagad pievērsīsimies tikai KY040 papildkodētājam, jo to izmantojam apmācībai.
Kodētāja iekšējā mehāniskā struktūra ir parādīta zemāk. Tas pamatā sastāv no apļveida diska (pelēkā krāsā) ar vadošiem spilventiņiem (vara krāsa), kas novietoti šī apļveida diska augšpusē. Šīs vadošās spilventiņi ir novietoti vienādā attālumā, kā parādīts zemāk. Izejas tapas ir nostiprinātas šī apļveida diska augšpusē tā, ka, pagriežot pogu, vadošie spilventiņi nonāk saskarē ar izejas tapām. Šeit ir divas izejas tapas, izeja A un izeja B, kā parādīts attēlā zemāk.
Izejas viļņu forma, ko rada izejas tapas A un izeja B, tiek parādīta attiecīgi zilā un zaļā krāsā. Kad vadošais spilventiņš atrodas tieši zem tapas, tas iet uz augšu, izraisot to laikā, un, kad vadošais spilventiņš attālinās, tapa nokrītas zemu, izraisot iepriekš parādīto viļņu formas izslēgšanās laiku. Tagad, ja mēs saskaitīsim impulsu skaitu, mēs varēsim noteikt, cik soļu kodētājs ir pārvietots.
Tagad var rasties jautājums, kāpēc mums ir vajadzīgi divi impulsu signāli, ja pietiek ar vienu, lai uzskaitītu veikto darbību skaitu, pagriežot pogu. Tas ir tāpēc, ka mums jāidentificē, kurā virzienā ir pagriezta poga. Apskatot abus impulsus, jūs varat pamanīt, ka tie abi ir par 90 ° ārpus fāzes. Tādējādi, pagriežot pogu pulksteņrādītāja kustības virzienā, izeja A vispirms iet uz augšu un, kad pogu pagriež pretēji pulksteņrādītāja kustības virzienam, izeja B vispirms paaugstināsies.
Rotējošā kodētāja veidi
Tirgū ir daudz veidu rotējošo kodētāju, kurus dizainers var izvēlēties vienu atbilstoši savam pielietojumam. Visizplatītākie veidi ir uzskaitīti zemāk
- Inkrementālais kodētājs
- Absolūtais kodētājs
- Magnētiskais kodētājs
- Optiskais kodētājs
- Lāzera kodētājs
Šie kodētāji tiek klasificēti, pamatojoties uz izejas signālu un uztveršanas tehnoloģiju, inkrementālais kodētājs un absolūtais kodētājs tiek klasificēts, pamatojoties uz izejas signālu, un magnētiskais, optiskais un lāzera kodētājs ir klasificēts, pamatojoties uz sensoru tehnoloģiju. Šeit izmantotais kodētājs ir inkrementālā tipa kodētājs.
KY-040 rotējošā kodētāja tapas un apraksts
KY-040 inkrementālā tipa rotējošā kodētāja tapas ir parādītas zemāk
Pirmās divas tapas (Ground un Vcc) tiek izmantotas kodētāja darbināšanai, parasti tiek izmantota + 5 V barošana. Papildus pogas pagriešanai pulksteņa rādītāja virzienā un pretēji pulksteņrādītāja kustības virzienam, kodētājā ir arī slēdzis (Active low), kuru var nospiest, nospiežot pogu iekšpusē. Signāls no šī slēdža tiek iegūts caur tapu 3 (slēdzis). Visbeidzot, tam ir divas izejas tapas, kas rada viļņu formas, kā jau minēts iepriekš. Tagad ļaujiet mums uzzināt, kā to sasaistīt ar Arduino.
Arduino rotācijas kodētāja shēmas shēma
Pilna rotācijas kodētāja un Arduino saskarnes shēma ir parādīta zemāk redzamajā attēlā
Rotējošajam kodētājam ir 5 tapas secībā, kas parādīta iepriekš redzamajā etiķetē. Pirmie divi tapas ir Ground un Vcc, kas ir savienoti ar Arduino Ground un + 5V tapu. Kodētāja slēdzis ir savienots ar digitālo tapu D10, un to arī velk augstu, izmantojot 1k rezistoru. Abas izejas tapas ir attiecīgi savienotas ar D9 un D8.
Lai parādītu mainīgā vērtību, kas tiks palielināta vai samazināta, pagriežot rotējošo kodētāju, mums ir nepieciešams displeja modulis. Šeit izmantotais ir parasti pieejams 16 * 2 burtu ciparu LCD displejs. Mēs esam pievienojuši displeju darbībai 4 bitu režīmā un darbinājuši to ar Arduino + 5 V tapu. Potenciometru izmanto, lai pielāgotu LCD displeja kontrastu. Ja vēlaties uzzināt vairāk par LCD displeja saskarni ar Arduino, sekojiet saitei. Visu ķēdi var uzbūvēt uz maizes dēļa, es izskatījos kaut ko līdzīgu zemāk, kad visi savienojumi tika veikti.
Arduino programmēšana Rotary Encoder
Ir diezgan viegli un tieši ieprogrammēt Arduino dēli tā saskarnei, ja esat sapratis Rotary Encoder darbības principu. Mums vienkārši ir jāizlasa impulsa skaits, lai noteiktu, cik daudz pagriezienu ir izdarījis kodētājs, un jāpārbauda, kurš impulss vispirms bija augsts, lai atrastu, kurā virzienā kodētājs tika pagriezts. Šajā apmācībā mēs parādīsim skaitli, kas tiek palielināts vai samazināts LCD pirmajā rindā, un kodētāja virzienu otrajā rindā. Pabeigta programma, lai dara to pašu var atrast pie šīs lapas apakšā, ar demonstrācijas video, tas neprasa bibliotēka. Tagad sadalīsim programmu mazos gabalos, lai saprastu darbu.
Tā kā mēs esam izmantojuši LCD displeju, mēs iekļaujam šķidro kristālu bibliotēku, kas pēc noklusējuma atrodas Arduino IDE. Tad mēs definējam tapas LCD savienošanai ar Arduino. Visbeidzot, mēs inicializējam LCD displeju uz šīm tapām.
# iekļaut
Pēc tam iestatīšanas funkcijas iekšpusē LCD ekrānā tiek parādīts ievadziņojums un pēc tam jāgaida 2 sekundes, lai šis ziņojums būtu lietotāja nolasāms. Tas ir paredzēts, lai nodrošinātu LCD pareizu darbību.
lcd.print ("Rotējošais kodētājs"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("Ar Arduino"); // Intro Message line 2. aizkave (2000); lcd.clear ();
Rotējošajam kodētājam ir trīs izejas tapas, kas būs Arduino INPUT tapas. Šīs trīs tapas ir attiecīgi slēdzis, izeja A un izeja B. Tie tiek deklarēti kā ievade, izmantojot pinMode funkciju, kā parādīts zemāk.
// pin Mode deklarācija pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Tukšuma iestatīšanas funkcijas iekšpusē mēs nolasām izejas A tapas statusu, lai pārbaudītu tapas pēdējo statusu. Pēc tam mēs izmantosim šo informāciju, lai salīdzinātu ar jauno vērtību, lai pārbaudītu, kura tapa (A izeja vai B izeja) ir sasniegusi augstu līmeni.
Previous_Output = digitalRead (Encoder_OuputA); // Izlasiet A produkta sākotnējo vērtību
Visbeidzot, galvenās cilpas funkcijas ietvaros mums jāsalīdzina izejas A un izejas B vērtība ar iepriekšējo izeju, lai pārbaudītu, kurš no tiem vispirms ir augsts. To var izdarīt, vienkārši salīdzinot A un B pašreizējās izejas vērtību ar iepriekšējo izeju, kā parādīts zemāk.
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 ("pulksteņrādītāja virzienā"); }
Iepriekš minētajā kodā tiek izpildīts otrais, ja nosacījums, ja B izeja ir mainījusies no iepriekšējās izejas. Tādā gadījumā kodētāja mainīgā vērtība tiek palielināta, un LCD displejā redzams, ka kodētājs ir pagriezts pulksteņrādītāja virzienā. Līdzīgi, ja nosacījums neizdodas, turpmākajā citā stāvoklī mēs samazinām mainīgo un parādām, ka kodētājs tiek pagriezts pretēji pulksteņrādītāja virzienam. Tālāk ir parādīts tā paša kods.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("pretēji pulksteņrādītāja virzienam"); } }
Visbeidzot, galvenās cilpas beigās mums jāatjaunina iepriekšējā izejas vērtība ar pašreizējo izejas vērtību, lai cilpu varētu atkārtot ar tādu pašu loģiku. Šāds kods dara to pašu
Previous_Output = digitalRead (Encoder_OuputA);
Vēl viena izvēles iespēja ir pārbaudīt, vai kodētāja slēdzis ir nospiests. To var kontrolēt, pārbaudot pagriežamā kodētāja slēdža tapu. Šī tapa ir aktīva zemā tapa, kas nozīmē, ka, nospiežot pogu, tā pazemināsies. Ja piespiedējs nav nospiests, tas paliek augsts, mēs arī esam izmantojuši pievilkšanas rezistoru, lai pārliecinātos, ka tas paliek augsts, ja slēdzis netiek nospiests, tādējādi izvairoties no peldošā komata stāvokļa.
ja (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Slēdzis nospiests"); }
Rotējošā kodētāja darbība ar Arduino
Kad aparatūra un kods ir gatavs, vienkārši augšupielādējiet kodu Arduino dēlī un ieslēdziet Arduino Board. To var vai nu barot, izmantojot USB kabeli, vai arī izmantot 12 V adapteri. Kad barošana notiek, LCD vajadzētu parādīt ievadziņu un pēc tam palikt tukšai. Tagad pagrieziet rotējošo kodētāju, un jums vajadzētu redzēt, ka vērtība sākas ar pieaugumu vai samazinājumu, pamatojoties uz pagrieziena virzienu. Otrajā rindiņā tiks parādīts, vai kodētājs tiek pagriezts pulksteņrādītāja kustības virzienā vai pretēji pulksteņrādītāja virzienam. Zemāk redzamajā attēlā redzams tas pats
Arī tad, kad tiek nospiesta poga, otrajā rindiņā parādīsies, ka poga ir nospiesta. Pilnīgu darbu var atrast zemāk esošajā videoklipā. Šī ir tikai parauga programma, kas nodrošina kodētāja saskarni ar Arduino un pārbauda, vai tas darbojas kā paredzēts. Kad esat ieradies šeit, jums vajadzētu būt iespējai izmantot kodētāju jebkuram projektam un attiecīgi programmēt.
Ceru, ka esat sapratis apmācību un lietas darbojās tā, kā paredzēts. Ja jums ir kādas problēmas, izmantojiet komentāru sadaļu vai forumus, lai saņemtu tehnisku palīdzību.