- Material som krävs
- Hur fungerar en roterande kodare?
- Typer av roterande kodare
- KY-040 Rotary Encoder Pinout och beskrivning
- Arduino Rotary Encoder Circuit Diagram
- Programmering av din Arduino för Rotary Encoder
- Arbeta med Rotary Encoder med Arduino
En roterande kodare är en inmatningsenhet som hjälper användaren att interagera med ett system. Det ser mer ut som en radiopotentiometer men den matar ut ett pulståg som gör dess applikation unik. När ratten på kodaren vrids roterar den i form av små steg som hjälper den att användas för steg- / servomotorstyrning, navigering genom en menysekvens och ökning / minskning av värdet på ett nummer och mycket mer.
I den här artikeln lär vi oss om de olika typerna av roterande kodare och hur de fungerar. Vi kommer också att ansluta det till Arduino och styra värdet på ett heltal genom att vrida kodaren och visa dess värde på en 16 * 2 LCD-skärm. I slutet av denna handledning kommer du att vara bekväm med att använda en Rotary Encoder för dina projekt. Så låt oss komma igång…
Material som krävs
- Roterande kodare (KY-040)
- Arduino UNO
- 16 * 2 Alfanumerisk LCD
- Potentiometer 10k
- Bakbord
- Anslutande ledningar
Hur fungerar en roterande kodare?
En Rotary Encoder är en elektromekanisk givare, vilket innebär att den omvandlar mekaniska rörelser till elektroniska pulser. Den består av en ratt som när den roterar rör sig steg för steg och producerar en sekvens av pulståg med fördefinierad bredd för varje steg. Det finns många typer av kodare, var och en med sin egen arbetsmekanism, vi kommer att lära oss om typerna senare, men låt oss för närvarande bara koncentrera oss på KY040 Incremental Encoder eftersom vi använder den för vår handledning.
Den interna mekaniska strukturen för kodaren visas nedan. Den består i grunden av en cirkulär skiva (grå färg) med ledande dynor (kopparfärg) placerade ovanpå denna cirkulära skiva. Dessa ledande dynor är placerade på samma avstånd som visas nedan. Utgångsstiften är fästa ovanpå denna cirkulära skiva, på ett sådant sätt att när vredet roterar kommer de ledande dynorna i kontakt med utgångsstiften. Här finns två utgångsstift, utgång A och utgång B enligt bilden nedan.
Utgångsvågformen som produceras av utgångsstift A och utgång B visas i blå respektive grön färg. När den ledande dynan är direkt under stiftet blir den hög vilket resulterar i tid och när den ledande dynan rör sig bort blir stiftet låg vilket resulterar i avstängningstiden för vågformen som visas ovan. Om vi nu räknar antalet pulser kommer vi att kunna avgöra hur många steg kodaren har flyttats.
Nu kan frågan uppstå att, varför behöver vi två pulssignaler när en räcker för att räkna antalet steg som tagits när du vrider på ratten. Detta beror på att vi måste identifiera i vilken riktning ratten har vridits. Om du tittar på de två pulserna kan du märka att de båda är 90 ° ur fas. Följaktligen när ratten vrids medurs kommer utgång A att gå högt först och när ratten vrids moturs kommer utgång B att gå högt först.
Typer av roterande kodare
Det finns många typer av roterande kodare på marknaden som designern kan välja en enligt sin applikation. De vanligaste typerna listas nedan
- Inkrementell kodare
- Absolut kodare
- Magnetisk kodare
- Optisk kodare
- Laserkodare
Dessa kodare klassificeras baserat på utsignalen och avkänningstekniken, Incremental Encoder och Absolute Encoders klassificeras baserat på utgångssignalen och magnetisk, optisk och laserkodare klassificeras baserat på Sensing Technology. Den Encoder används här är en typ Encoder inkrementell.
KY-040 Rotary Encoder Pinout och beskrivning
Uttag för KY-040 roterande kodare av inkrementell typ visas nedan
De första två stiften (jord och Vcc) används för att driva kodaren, vanligtvis används + 5V-matning. Förutom att vrida ratten medurs och moturs har kodaren också en brytare (Aktiv låg) som kan tryckas genom att trycka på ratten inuti. Signalen från denna omkopplare erhålls via stift 3 (omkopplare). Slutligen har den två utgångsstift som producerar vågformerna som redan diskuterats ovan. Låt oss nu lära oss hur man gränssnitt det med Arduino.
Arduino Rotary Encoder Circuit Diagram
Det fullständiga kretsschemat för gränssnitt Rotary Encoder med Arduino visas på bilden nedan
Rotary Encoder har 5 stift i den ordning som visas på etiketten ovan. De två första stiften är Ground och Vcc som är ansluten till Ground och + 5V pin på Arduino. Givarens omkopplare är ansluten till den digitala stiftet D10 och dras också högt genom ett 1k-motstånd. De två utgångsstiften är anslutna till D9 respektive D8.
För att visa värdet på variabeln som kommer att ökas eller minskas genom att rotera Rotary-kodaren behöver vi en displaymodul. Den som används här är allmänt tillgänglig 16 * 2 alfanumerisk LCD-display. Vi har anslutit skärmen för att användas i 4-bitars läge och har drivit den med Arduino + 5V-stift. Potentiometern används för att justera kontrasten på LCD-skärmen. Om du vill veta mer om Gränssnitts LCD-skärm med Arduino, följ länken. Hela kretsen kan byggas ovanpå en bräda, jag såg ut så här nedan när alla anslutningar var klara.
Programmering av din Arduino för Rotary Encoder
Det är ganska enkelt och rakt fram att programmera Arduino-kortet för att ansluta en Rotary Encoder till den om du hade förstått arbetsprincipen för en Rotary Encoder. Vi måste helt enkelt läsa av pulsen för att bestämma hur många varv kodaren har gjort och kontrollera vilken puls som gick högt först för att hitta i vilken riktning kodaren roterades. I denna handledning visar vi numret som ökar eller minskar på den första raden på LCD-skärmen och riktningen för kodaren i den andra raden. Det fullständiga programmet för att göra detsamma finns längst ner på denna sida med en demonstrationsvideo, det kräver inget bibliotek. Låt oss nu dela upp programmet i små bitar för att förstå hur det fungerar.
Eftersom vi har använt en LCD-skärm inkluderar vi det flytande kristallbiblioteket som standard finns i Arduino IDE. Sedan definierar vi stift för att ansluta LCD med Arduino. Slutligen initialiserar vi LCD-skärmen på dessa stift.
#omfatta
Nästa inuti installationsfunktionen visar vi ett inledande meddelande på LCD-skärmen och väntar sedan i 2 sekunder så att meddelandet är användarläsbart. Detta för att säkerställa att LCD-skärmen fungerar som den ska.
lcd.print ("Rotary Encoder"); // Intro Meddelandelinje 1 lcd.setCursor (0, 1); lcd.print ("With Arduino"); // Intro Message Line 2 delay (2000); lcd.clear ();
Rotary-kodaren har tre utgångsstift som är INGÅNG-stift för Arduino. Dessa tre stift är Switch, Output A respektive Output B. Dessa deklareras som Input med pinMode- funktionen enligt nedan.
// PIN Mode Mode pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Inne i tomrumsinställningsfunktionen läser vi statusen för utgången A-stift för att kontrollera den sista statusen för stiftet. Vi kommer sedan att använda denna information för att jämföra med det nya värdet för att kontrollera vilken stift (utgång A eller utgång B) som har gått högt.
Previous_Output = digitalRead (Encoder_OuputA); // Läs utgångsvärdet för utgång A
Slutligen inom huvudslingfunktionen måste vi jämföra värdet på utgång A och utgång B med den tidigare utgången för att kontrollera vilken som går högst först. Detta kan göras genom att helt enkelt jämföra värdet på strömutgången för A och B med den tidigare utgången som visas nedan.
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 ("Medurs"); }
I ovanstående kod kommer det andra if- villkoret att utföras om utgång B har ändrats från föregående utgång. I så fall ökas värdet på kodarvariabeln och LCD-skärmen visar att kodaren roteras medurs . På samma sätt, om det om villkoret misslyckas, minskar vi i det andra tillståndet variabeln och visar att kodaren roteras moturs . Koden för detsamma visas nedan.
annars { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Moturs"); } }
Slutligen måste vi i slutet av huvudslingan uppdatera det tidigare utgångsvärdet med det aktuella utgångsvärdet så att slingan kan upprepas med samma logik. Följande kod gör detsamma
Previous_Output = digitalRead (Encoder_OuputA);
En annan valfri sak är att kontrollera om omkopplaren på kodaren trycks in. Detta kan övervakas genom att kontrollera omkopplaren på vridkodaren. Denna stift är en aktiv låg stift, vilket innebär att den blir låg när knappen trycks in. Om du inte trycker på stiftet förblir högt, har vi också använt ett uppdragsmotstånd för att se till att stagarna förblir höga när strömbrytaren inte trycks in och därmed undviker vi att flyta pekar.
om (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Strömbrytare tryckt"); }
Arbeta med Rotary Encoder med Arduino
När hårdvaran och koden är redo laddar du bara upp koden till Arduino-kortet och slår på Arduino-kortet. Du kan antingen driva den via USB-kabeln eller använda en 12V-adapter. När den är påslagen ska LCD-skärmen visa introduktionsmeddelandet och sedan bli tomt. Rotera nu den roterande kodaren och du bör se att värdet börjar ökas eller minskas baserat på den riktning du roterar. Den andra raden visar om kodaren roteras medurs eller moturs. Bilden nedan visar detsamma
Även när du trycker på knappen kommer den andra raden att visa att knappen trycks in. Hela arbetet finns i videon nedan. Detta är bara ett exempelprogram för att koppla in kodaren med Arduino och kontrollera om den fungerar som förväntat. När du väl har kommit hit bör du kunna använda kodaren för något av dina projekt och programmera därefter.
Hoppas att du har förstått handledningen och saker fungerade som det ska. Om du har några problem, använd kommentarsektionen eller forumen för teknisk hjälp.