- Nødvendig materiale
- Hvordan fungerer en Rotary Encoder?
- Typer av roterende koder
- KY-040 Rotary Encoder Pinout og beskrivelse
- Arduino Rotary Encoder kretsdiagram
- Programmering av Arduino for Rotary Encoder
- Arbeider med Rotary Encoder med Arduino
En Rotary encoder er en inngangsenhet som hjelper brukeren til å samhandle med et system. Det ser mer ut som et radiopotensiometer, men det sender ut et pulstog som gjør applikasjonen unik. Når knappen til koderen roteres, roterer den i form av små trinn som hjelper den til å brukes til trinn- / servomotorstyring, navigerer gjennom en menysekvens og øker / reduserer verdien til et tall og mye mer.
I denne artikkelen vil vi lære om de forskjellige typene av roterende kodere og hvordan det fungerer. Vi vil også grensesnitt det med Arduino og kontrollere verdien av et heltall ved å rotere koderen og vise verdien på en 16 * 2 LCD-skjerm. På slutten av denne opplæringen vil du være komfortabel med å bruke en Rotary Encoder for prosjektene dine. Så la oss komme i gang…
Nødvendig materiale
- Roterende koder (KY-040)
- Arduino UNO
- 16 * 2 Alfanumerisk LCD
- Potensiometer 10k
- Brettbrett
- Koble ledninger
Hvordan fungerer en Rotary Encoder?
En Rotary Encoder er en elektromekanisk svinger, som betyr at den konverterer mekaniske bevegelser til elektroniske pulser. Den består av en knott som når den roterer vil bevege seg trinn for trinn og produsere en sekvens av pulstog med forhåndsdefinert bredde for hvert trinn. Det er mange typer kodere hver med sin egen arbeidsmekanisme, vi vil lære om typene senere, men la oss for øyeblikket bare konsentrere oss om KY040 Incremental Encoder siden vi bruker den til vår opplæring.
Den interne mekaniske strukturen for koderen er vist nedenfor. Den består i utgangspunktet av en sirkulær plate (grå farge) med ledende elektroder (kobberfarge) plassert på toppen av denne sirkulære platen. Disse ledende putene er plassert på samme avstand som vist nedenfor. Utgangspinnene er festet på toppen av denne sirkulære platen, på en slik måte at når de dreier på knotten, kommer de ledende putene i kontakt med utgangspinnene. Her er det to utgangspinner, utgang A og utgang B som vist i figuren nedenfor.
Utgangsbølgeformen produsert av utgangsstift A og utgang B vises i henholdsvis blå og grønn farge. Når den ledende puten er rett under pinnen, blir den høy og resulterer i rett tid, og når den ledende puten beveger seg, blir pinnen lav, noe som resulterer i avbruddstid for bølgeformen vist ovenfor. Nå, hvis vi teller antall pulser, vil vi kunne bestemme hvor mange trinn koderen har blitt flyttet.
Nå kan spørsmålet oppstå at hvorfor trenger vi to pulssignaler når det ene er nok til å telle antall trinn som er tatt mens du dreier på knotten. Dette er fordi vi må identifisere i hvilken retning knotten er rotert. Hvis du tar en titt på de to pulser, kan du merke at de begge er 90 ° utenfor fasen. Derfor når knappen dreies med klokken, vil utgang A først gå høyt, og når knappen dreies mot klokken, vil utgang B først gå høyt.
Typer av roterende koder
Det er mange typer roterende kodere i markedet, designeren kan velge en i henhold til applikasjonen. De vanligste typene er oppført nedenfor
- Incremental Encoder
- Absolutt koder
- Magnetisk koder
- Optisk koder
- Laserkoder
Disse koderne er klassifisert basert på utgangssignalet og sensing-teknologien, Incremental Encoder og Absolute Encoders er klassifisert basert på Output-signalet, og den magnetiske, optiske og laserkoderen er klassifisert basert på Sensing Technology. Den Encoder brukt her er en trinnvis typen Encoder.
KY-040 Rotary Encoder Pinout og beskrivelse
Pinoutene til KY-040 roterende koderen for inkrementell type er vist nedenfor
De to første pinnene (bakken og Vcc) brukes til å drive koderen, vanligvis brukes + 5V forsyning. Bortsett fra å dreie knotten i retning mot og mot klokka, har koderen også en bryter (Aktiv lav) som kan trykkes ved å trykke på knappen inn. Signalet fra denne bryteren oppnås gjennom pinnen 3 (bryter). Endelig har den de to utgangspinnene som produserer bølgeformene som allerede diskutert ovenfor. La oss nå lære å koble det til Arduino.
Arduino Rotary Encoder kretsdiagram
Det komplette kretsskjemaet for grensesnitt Rotary Encoder med Arduino er vist på bildet nedenfor
Rotary Encoder har 5 pinner i den rekkefølgen som er vist på etiketten over. De to første pinnene er Ground og Vcc som er koblet til bakken og + 5V pin på Arduino. Bryteren til koderen er koblet til digital pin D10 og er også trukket høyt gjennom en 1k motstand. De to utgangspinnene er koblet til henholdsvis D9 og D8.
For å vise verdien av variabelen som vil økes eller reduseres ved å rotere Rotary encoder, trenger vi en displaymodul. Den som brukes her er vanligvis tilgjengelig 16 * 2 alfanumerisk LCD-skjerm. Vi har koblet skjermen til å betjenes i 4-biters modus og har drevet den ved hjelp av + 5V-pinnen til Arduino. Potensiometeret brukes til å justere kontrasten på LCD-skjermen. Hvis du vil vite mer om Grensesnitt LCD-skjerm med Arduino, følg lenken. Hele kretsen kan bygges på toppen av et brødbrett, jeg så noe slikt ut nedenfor når alle tilkoblingene var gjort.
Programmering av Arduino for Rotary Encoder
Det er ganske enkelt og rett frem å programmere Arduino-kortet for å koble til en Rotary Encoder med den hvis du hadde forstått arbeidsprinsippet til en Rotary Encoder. Vi må bare lese antall pulser for å bestemme hvor mange svinger koderen har gjort, og sjekke hvilken puls som gikk høyt først for å finne i hvilken retning koderen ble rotert. I denne opplæringen viser vi nummeret som økes eller reduseres på første rad på LCD-skjermen og retningen til koderen i den andre linjen. Det komplette programmet for å gjøre det samme finner du nederst på denne siden med en demonstrasjonsvideo, det krever ikke noe bibliotek. La oss nå dele programmet i små biter for å forstå hvordan det fungerer.
Siden vi har brukt en LCD-skjerm, inkluderer vi biblioteket med flytende krystaller som er standard til stede i Arduino IDE. Deretter definerer vi pinner for å koble LCD med Arduino. Til slutt initialiserer vi LCD-skjermen på disse pinnene.
#inkludere
Neste inne i oppsettfunksjonen viser vi en innledende melding på LCD-skjermen, og venter deretter i 2 sekunder slik at den meldingen er lesbar. Dette for å sikre at LCD-skjermen fungerer som den skal.
lcd.print ("Rotary Encoder"); // Intro Meldingslinje 1 lcd.setCursor (0, 1); lcd.print ("With Arduino"); // Intro Message line 2 delay (2000); lcd.clear ();
Rotary-koderen har tre utgangspinner som vil være en INPUT-pinner for Arduino. Disse tre pinnene er henholdsvis bryter, utgang A og utgang B. Disse er erklært som Input ved hjelp av pinMode- funksjonen som vist nedenfor.
// pin Mode-erklæring pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Inne i tomt oppsettfunksjon , leser vi statusen til utgangen A-pin for å sjekke den siste statusen for pin. Vi vil deretter bruke denne informasjonen til å sammenligne med den nye verdien for å sjekke hvilken pin (utgang A eller utgang B) som har gått høyt.
Previous_Output = digitalRead (Encoder_OuputA); // Les den innledende verdien av utgang A
Til slutt inne i hovedsløyfefunksjonen , må vi sammenligne verdien av utgang A og utgang B med forrige utgang for å sjekke hvilken som går høy først. Dette kan gjøres ved å bare sammenligne verdien av strømutgangen til A og B med forrige utgang 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 klokken"); }
I den ovennevnte koden blir den andre hvis tilstanden blir utført hvis utgang B har endret seg fra forrige utgang. I så fall økes verdien av kodervariabelen, og LCD-skjermen viser at koderen roteres med urviseren . Tilsvarende hvis det hvis tilstanden mislykkes, i den påfølgende ellers tilstanden reduserer vi variabelen og viser at koderen roteres mot urviseren . Koden for det samme er vist nedenfor.
annet { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Anti-Clockwise"); } }
Til slutt, på slutten av hovedsløyfen, må vi oppdatere den forrige utgangsverdien med gjeldende utgangsverdi slik at sløyfen kan gjentas med samme logikk. Følgende kode gjør det samme
Previous_Output = digitalRead (Encoder_OuputA);
En annen valgfri ting er å sjekke om bryteren på koderen trykkes. Dette kan overvåkes ved å sjekke bryteren på rotasjonskoderen. Denne pinnen er en aktiv lavpinne, noe som betyr at den vil gå lavt når du trykker på knappen. Hvis den ikke trykkes, holder pinnen seg høy, har vi også brukt en opptrekksmotstand for å sikre at den forblir høy når bryteren ikke trykkes, og dermed unngår vi flytende punkt.
hvis (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Bryter presset"); }
Arbeider med Rotary Encoder med Arduino
Når maskinvaren og koden er klar, er det bare å laste opp koden til Arduino-kortet og slå på Arduino Board. Du kan enten drive den via USB-kabelen eller bruke en 12V adapter. Når strømmen er på, skal LCD-skjermen vise intro-meldingen og deretter bli tom. Drei nå rotasjonsgiveren, og du bør se at verdien begynner å øke eller reduseres basert på retningen du roterer. Den andre linjen vil vise deg om koderen roteres med eller mot urviseren. Bildet nedenfor viser det samme
Også når du trykker på knappen, vil den andre linjen vise at knappen er trykket. Komplett arbeid finner du i videoen nedenfor. Dette er bare et eksempelprogram for å grensesnitt Encoder med Arduino og sjekke om det fungerer som forventet. Når du kommer hit, bør du kunne bruke koderen til alle prosjektene dine og programmere deretter.
Håper du har forstått veiledningen og ting fungerte slik den skal. Hvis du har problemer, bruk kommentarseksjonen eller forumene for teknisk hjelp.