- Nødvendige materialer
- Hvordan fungerer en Rotary Encoder?
- Typer af Rotary Encoder
- KY-040 Rotary Encoder Pinout og beskrivelse
- Arduino Rotary Encoder Circuit Diagram
- Programmering af din Arduino til Rotary Encoder
- Arbejde med Rotary Encoder med Arduino
En Rotary encoder er en inputenhed, der hjælper brugeren til at interagere med et system. Det ligner mere et radiopotentiometer, men det udsender et pulstog, der gør applikationen unik. Når knappen til koderen drejes, drejer den i form af små trin, som hjælper den til at blive brugt til stepper / servomotorstyring, navigering gennem en sekvens af menu og øgning / formindskelse af et tal og meget mere.
I denne artikel lærer vi om de forskellige typer Rotary Encoders, og hvordan det fungerer. Vi vil også interface det med Arduino og styre værdien af et heltal ved at dreje koderen og vise dens værdi på en 16 * 2 LCD-skærm. I slutningen af denne tutorial vil du være fortrolig med at bruge en Rotary Encoder til dine projekter. Så lad os komme i gang…
Nødvendige materialer
- Rotary Encoder (KY-040)
- Arduino UNO
- 16 * 2 Alfanumerisk LCD
- Potentiometer 10k
- Brødbræt
- Tilslutning af ledninger
Hvordan fungerer en Rotary Encoder?
En Rotary Encoder er en elektromekanisk transducer, hvilket betyder at den konverterer mekaniske bevægelser til elektroniske impulser. Den består af en knap, der, når den drejer, bevæger sig trin for trin og producerer en sekvens af pulstog med foruddefineret bredde for hvert trin. Der er mange typer kodere hver med sin egen arbejdsmekanisme, vi vil lære om typerne senere, men lad os nu koncentrere os kun om KY040 Incremental Encoder, da vi bruger den til vores tutorial.
Den interne mekaniske struktur for koderen er vist nedenfor. Den består grundlæggende af en cirkulær skive (grå farve) med ledende elektroder (kobberfarve) placeret oven på denne cirkulære skive. Disse ledende elektroder er placeret i samme afstand som vist nedenfor. Outputstifterne er fastgjort oven på denne cirkulære skive på en sådan måde, at når de drejes på knappen, kommer de ledende elektroder i kontakt med outputstifterne. Her er der to udgangsstift, Output A og Output B som vist i nedenstående figur.
Outputbølgeformen produceret af output pin A og Output B vises i henholdsvis blå og grøn farve. Når den ledende pude er direkte under stiften, bliver den høj, hvilket resulterer i tide, og når den ledende pude bevæger sig væk, går stiften lavt, hvilket resulterer i slukketiden for bølgeformen vist ovenfor. Hvis vi nu tæller antallet af impulser, vil vi være i stand til at bestemme, hvor mange trin koderen er blevet flyttet.
Nu kan spørgsmålet opstå, at hvorfor har vi brug for to pulssignaler, når det ene er nok til at tælle antallet af trin, der er taget, mens du drejer knappen. Dette skyldes, at vi skal identificere i hvilken retning knappen drejes. Hvis du kigger på de to impulser, kan du bemærke, at de begge er 90 ° ude af fase. Derfor, når knappen drejes med uret, vil output A først gå højt, og når knappen drejes mod uret, vil output B først gå højt.
Typer af Rotary Encoder
Der er mange typer drejekodere på markedet, som designeren kan vælge en ifølge hans applikation. De mest almindelige typer er anført nedenfor
- Incremental Encoder
- Absolut kode
- Magnetisk koder
- Optisk koder
- Laserkoder
Disse kodere klassificeres baseret på udgangssignalet og sensorteknologien, Incremental Encoder og Absolute Encoders er klassificeret baseret på Output signal, og den magnetiske, optiske og laserkoderen er klassificeret ud fra Sensing Technology. Den Encoder bruges her er en trinvis typen Encoder.
KY-040 Rotary Encoder Pinout og beskrivelse
Pinouterne på KY-040 roterende encoder af inkrementel type er vist nedenfor
De første to ben (Jord og Vcc) bruges til at drive encoderen, typisk bruges + 5V forsyning. Bortset fra at dreje knappen i retning med uret og mod uret, har koderen også en kontakt (Aktiv lav), som kan trykkes ved at trykke på knappen inde. Signalet fra denne switch opnås gennem pin 3 (Switch). Endelig har den de to outputstifter, der producerer bølgeformer som allerede diskuteret ovenfor. Lad os nu lære at interface det med Arduino.
Arduino Rotary Encoder Circuit Diagram
Det komplette kredsløbsdiagram for Interfacing Rotary Encoder med Arduino er vist på billedet nedenfor
Rotary Encoder har 5 ben i den rækkefølge, der er vist på etiketten ovenfor. De første to ben er Ground og Vcc, der er forbundet til jorden og + 5V pin på Arduino. Omskifteren til indkoderen er forbundet til den digitale pin D10 og trækkes også højt gennem en 1k modstand. De to outputstifter er tilsluttet henholdsvis D9 og D8.
For at få vist værdien af variablen, som øges eller formindskes ved at dreje Rotary encoder, har vi brug for et displaymodul. Den, der bruges her, er almindeligt tilgængelig 16 * 2 alfanumerisk LCD-skærm. Vi har tilsluttet skærmen, der skal betjenes i 4-bit-tilstand, og har drevet den ved hjælp af + 5V-stiften på Arduino. Potentiometeret bruges til at justere LCD-displayets kontrast. Hvis du vil vide mere om Interfacing LCD-skærm med Arduino, skal du følge linket. Det komplette kredsløb kan bygges oven på et brødbræt, min kiggede noget som dette nedenfor, når alle forbindelserne var udført.
Programmering af din Arduino til Rotary Encoder
Det er ret let og ligetil at programmere Arduino-kortet til grænseflade mellem en Rotary Encoder og det, hvis du havde forstået arbejdsprincippet for en Rotary Encoder. Vi er simpelthen nødt til at læse antallet af puls for at bestemme, hvor mange drejninger koderen har foretaget og kontrollere, hvilken puls der først gik højt for at finde i hvilken retning koderen blev drejet. I denne vejledning viser vi det nummer, der øges eller mindskes på den første række på LCD'et og retningen af koderen i den anden linje. Det komplette program til at gøre det samme kan findes nederst på denne side med en demonstrationsvideo, det kræver ikke noget bibliotek. Lad os nu opdele programmet i små bidder for at forstå arbejdet.
Da vi har brugt en LCD-skærm, inkluderer vi biblioteket med flydende krystaller, der som standard er til stede i Arduino IDE. Derefter definerer vi ben til tilslutning af LCD med Arduino. Endelig initialiserer vi LCD-skærmen på disse ben.
#omfatte
Dernæst inde i installationsfunktionen viser vi en introduktionsmeddelelse på LCD-skærmen og venter derefter i 2 sekunder, så den besked er brugerlæsbar. Dette er for at sikre, at LCD-skærmen fungerer korrekt.
lcd.print ("Rotary Encoder"); // Intro meddelelseslinje 1 lcd.setCursor (0, 1); lcd.print ("Med Arduino"); // Intro Message line 2 delay (2000); lcd.clear ();
Rotary-koderen har tre outputstifter, som vil være en INPUT-stifter til Arduino. Disse tre ben er henholdsvis Switch, Output A og Output B. Disse erklæres som input ved hjælp af pinMode- funktionen som vist nedenfor.
// pin Mode-erklæring pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Inde i tomrumsopsætningsfunktionen læser vi status for output A-pin for at kontrollere den sidste status for pin. Vi bruger derefter disse oplysninger til at sammenligne med den nye værdi for at kontrollere, hvilken pin (Output A eller Output B) der er gået højt.
Previous_Output = digitalRead (Encoder_OuputA); // Læs den indledende værdi af output A
Endelig inden for hovedsløjfefunktionen skal vi sammenligne værdien af Output A og Output B med den tidligere Output for at kontrollere, hvilken der først går højt. Dette kan gøres ved blot at sammenligne værdien af den aktuelle output af A og B med den tidligere output som vist nedenfor.
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 ("med uret"); }
I ovenstående kode bliver det andet if- tilstand eksekveret, hvis output B er ændret fra det foregående output. I så fald øges værdien af encodervariablen, og LCD'et viser, at encoderen drejes med uret . Tilsvarende, hvis det, hvis betingelsen mislykkes, i den efterfølgende ellers tilstand reducerer vi variablen og viser, at koderen drejes mod urets retning. Koden for det samme er vist nedenfor.
ellers { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("mod uret"); } }
Endelig skal vi i slutningen af hovedsløjfen opdatere den tidligere outputværdi med den aktuelle outputværdi, så sløjfen kan gentages med samme logik. Den følgende kode gør det samme
Previous_Output = digitalRead (Encoder_OuputA);
En anden valgfri ting er at kontrollere, om der trykkes på kontakten på koderen. Dette kan overvåges ved at kontrollere afbryderstiften på drejekoderen. Denne pin er en aktiv lav pin, hvilket betyder at den vil gå lavt, når der trykkes på knappen. Hvis den ikke trykkes, forbliver stiften høj, har vi også brugt en pull-up-modstand til at sikre, at de forbliver høje, når der ikke trykkes på kontakten, hvilket undgår flydende punkttilstand.
hvis (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Switch presset"); }
Arbejde med Rotary Encoder med Arduino
Når hardware og kode er klar, skal du bare uploade koden til Arduino-kortet og tænde Arduino Board. Du kan enten tænde det via USB-kablet eller bruge en 12V adapter. Når den er tændt, skal LCD-skærmen vise introbeskeden og derefter blive tom. Drej nu drejekoderen, og du skal se, at værdien begynder stigende eller dekrementeret baseret på den retning, du roterer. Den anden linje viser dig, om koderen drejes med eller mod uret. Billedet nedenfor viser det samme
Også når der trykkes på knappen, viser den anden linje, at der trykkes på knappen. Det komplette arbejde kan findes i videoen nedenfor. Dette er kun et eksempel på et program til at interface Encoder med Arduino og kontrollere, om det fungerer som forventet. Når du er kommet her, skal du kunne bruge koderen til ethvert af dine projekter og programmere i overensstemmelse hermed.
Håber du har forstået vejledningen og tingene fungerede som det skulle. Hvis du har problemer, skal du bruge kommentarsektionen eller foraerne til teknisk hjælp.