- Vereiste materialen
- Hoe werkt een roterende encoder?
- Soorten roterende encoder
- KY-040 Rotary Encoder Pinout en beschrijving
- Arduino Rotary Encoder schakelschema
- Programmeer uw Arduino voor Rotary Encoder
- Werken met Rotary Encoder met Arduino
Een roterende encoder is een invoerapparaat dat de gebruiker helpt om met een systeem te communiceren. Het lijkt meer op een radiopotentiometer, maar het geeft een reeks pulsen af, wat de toepassing uniek maakt. Wanneer de knop van de encoder wordt gedraaid, draait deze in de vorm van kleine stapjes, waardoor deze kan worden gebruikt voor het regelen van de stappenmotor / servomotor, het navigeren door een reeks menu's en het verhogen / verlagen van de waarde van een getal en nog veel meer.
In dit artikel zullen we leren over de verschillende soorten roterende encoders en hoe deze werken. We zullen het ook verbinden met Arduino en de waarde van een geheel getal regelen door de encoder te draaien en de waarde ervan weer te geven op een 16 * 2 LCD-scherm. Aan het einde van deze tutorial zult u vertrouwd zijn met het gebruik van een Rotary Encoder voor uw projecten. Dus laten we beginnen…
Vereiste materialen
- Roterende encoder (KY-040)
- Arduino UNO
- 16 * 2 Alfanumeriek LCD
- Potentiometer 10k
- Breadboard
- Draden aansluiten
Hoe werkt een roterende encoder?
Een Rotary Encoder is een elektromechanische transducer, wat betekent dat het mechanische bewegingen omzet in elektronische pulsen. Het bestaat uit een knop die, wanneer hij draait, stap voor stap beweegt en een reeks pulstreinen produceert met een vooraf gedefinieerde breedte voor elke stap. Er zijn veel soorten encoders, elk met hun eigen werkingsmechanisme, we zullen later over de typen leren, maar laten we ons voorlopig alleen concentreren op de KY040 incrementele encoder, aangezien we deze voor onze zelfstudie gebruiken.
De interne mechanische structuur van de encoder wordt hieronder weergegeven. Het bestaat in feite uit een ronde schijf (grijze kleur) met geleidende pads (koperkleur) bovenop deze ronde schijf. Deze geleidende kussentjes worden op gelijke afstand geplaatst, zoals hieronder weergegeven. De output pinnen zijn bovenop deze ronde schijf bevestigd, zodanig dat wanneer de knop draait, de geleidende pads in contact komen met de output pinnen. Hier zijn er twee uitgangspennen, uitgang A en uitgang B, zoals weergegeven in de onderstaande afbeelding.
De uitgangsgolfvorm die wordt geproduceerd door de uitgangspen A en uitgang B wordt respectievelijk in blauwe en groene kleur weergegeven. Wanneer het geleidende kussen zich direct onder de pin bevindt, gaat het hoog, wat het op tijd oplevert en wanneer het geleidende kussen weg beweegt, gaat de pin laag, wat resulteert in een uit-tijd van de hierboven getoonde golfvorm. Als we nu het aantal pulsen tellen, kunnen we bepalen hoeveel stappen de encoder is verplaatst.
Nu kan de vraag rijzen: waarom hebben we twee pulssignalen nodig als één voldoende is om het aantal stappen te tellen dat wordt genomen tijdens het draaien van de knop. Dit komt omdat we moeten bepalen in welke richting de knop is gedraaid. Als je naar de twee pulsen kijkt, zie je dat ze allebei 90 ° uit fase zijn. Dus als de knop met de klok mee wordt gedraaid, zal uitgang A eerst hoog worden en als de knop tegen de klok in wordt gedraaid, zal uitgang B eerst hoog worden.
Soorten roterende encoder
Er zijn veel soorten roterende encoders op de markt, de ontwerper kan er een kiezen op basis van zijn toepassing. De meest voorkomende soorten staan hieronder vermeld
- Incrementele encoder
- Absolute encoder
- Magnetische encoder
- Optische encoder
- Laser-encoder
Deze encoders zijn geclassificeerd op basis van het uitgangssignaal en sensortechnologie, de incrementele encoder en absolute encoders zijn geclassificeerd op basis van het uitgangssignaal en de magnetische, optische en laserencoder zijn geclassificeerd op basis van sensortechnologie. De hier gebruikte encoder is een incrementele encoder.
KY-040 Rotary Encoder Pinout en beschrijving
De pinouts van de KY-040 incrementele roterende encoder worden hieronder weergegeven
De eerste twee pinnen (aarde en Vcc) worden gebruikt om de encoder van stroom te voorzien, meestal wordt + 5V-voeding gebruikt. Behalve het draaien van de knop met de klok mee en tegen de klok in, heeft de encoder ook een schakelaar (actief laag) die kan worden ingedrukt door op de knop aan de binnenkant te drukken. Het signaal van deze schakelaar wordt verkregen via de pin 3 (schakelaar). Ten slotte heeft het de twee uitgangspennen die de golfvormen produceren zoals hierboven al besproken. Laten we nu leren hoe we het met Arduino kunnen verbinden.
Arduino Rotary Encoder schakelschema
Het volledige schakelschema voor de interface van de Rotary Encoder met Arduino wordt weergegeven in de onderstaande afbeelding
De Rotary Encoder heeft 5 pinnen in de volgorde zoals aangegeven in het label hierboven. De eerste twee pinnen zijn aarde en Vcc die is verbonden met de aarde en + 5V-pin van de Arduino. De schakelaar van de encoder is verbonden met digitale pin D10 en wordt ook hoog getrokken door een weerstand van 1k. De twee uitgangspennen zijn respectievelijk verbonden met D9 en D8.
Om de waarde van de variabele weer te geven die zal worden verhoogd of verlaagd door de Rotary encoder te draaien, hebben we een weergavemodule nodig. De hier gebruikte is een algemeen verkrijgbaar 16 * 2 alfanumeriek LCD-scherm. We hebben het display aangesloten om in 4-bit-modus te werken en hebben het gevoed met de + 5V-pin van Arduino. De Potentiometer wordt gebruikt om het contrast van het LCD-scherm aan te passen. Als je meer wilt weten over Interfacing LCD-display met Arduino, volg dan de link. Het complete circuit kan bovenop een breadboard worden gebouwd, ik zag er hieronder ongeveer zo uit toen alle aansluitingen waren gemaakt.
Programmeer uw Arduino voor Rotary Encoder
Het is vrij eenvoudig en ongecompliceerd om het Arduino-bord te programmeren om er een Rotary Encoder mee te koppelen als je het werkingsprincipe van een Rotary Encoder had begrepen. We hoeven alleen maar het aantal pulsen af te lezen om te bepalen hoeveel beurten de encoder heeft gemaakt en om te kijken welke puls eerst hoog ging om te zien in welke richting de encoder werd gedraaid. In deze tutorial zullen we het aantal dat wordt verhoogd of verlaagd weergeven op de eerste rij van het LCD-scherm en de richting van de encoder op de tweede regel. Het volledige programma om hetzelfde te doen is te vinden onderaan deze pagina met een demonstratievideo, het vereist geen bibliotheek. Laten we het programma nu in kleine stukjes splitsen om de werking te begrijpen.
Omdat we een LCD-scherm hebben gebruikt, nemen we de Liquid Crystal-bibliotheek op die standaard aanwezig is in de Arduino IDE. Vervolgens definiëren we pinnen voor het verbinden van LCD met Arduino. Ten slotte initialiseren we het LCD-scherm op die pinnen.
# omvatten
Vervolgens geven we in de setup- functie een inleidend bericht weer op het LCD-scherm en wachten vervolgens 2 seconden zodat dat bericht door de gebruiker kan worden gelezen. Dit is om ervoor te zorgen dat het LCD-scherm correct werkt.
lcd.print ("Rotary Encoder"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("Met Arduino"); // Intro Message line 2 delay (2000); lcd.clear ();
De Rotary encoder heeft drie outputpinnen die een INPUT-pinnen voor de Arduino zullen zijn. Deze drie pinnen zijn respectievelijk de schakelaar, uitgang A en uitgang B. Deze worden gedeclareerd als invoer met behulp van de pinMode- functie, zoals hieronder weergegeven.
// pin Mode declaratie pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Binnen de ongeldige setup- functie lezen we de status van de output A-pin om de laatste status van de pin te controleren. We zullen deze informatie vervolgens gebruiken om te vergelijken met de nieuwe waarde om te controleren welke pin (uitgang A of uitgang B) hoog is geworden.
Previous_Output = digitalRead (Encoder_OuputA); // Lees de beginwaarde van output A
Uiteindelijk in de belangrijkste lus functie moeten we de waarde van de uitgang A en uitgang B vergelijken met de vorige uitgang te controleren welke hoog wordt als eerste. Dit kan gedaan worden door simpelweg de waarde van de huidige output van A en B te vergelijken met de vorige output, zoals hieronder getoond.
if (digitalRead (Encoder_OuputA)! = Vorige_Output) { if (digitalRead (Encoder_OuputB)! = Vorige_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Clockwise"); }
In de bovenstaande code wordt de tweede if- voorwaarde uitgevoerd als Output B is gewijzigd ten opzichte van de vorige uitvoer. In dat geval wordt de waarde van de encodervariabele verhoogd en geeft het LCD-scherm weer dat de encoder met de klok mee wordt gedraaid. Evenzo, als dat als voorwaarde faalt, verlagen we in de volgende else- voorwaarde de variabele en geven we weer dat de encoder tegen de klok in wordt gedraaid. De code voor hetzelfde wordt hieronder weergegeven.
anders { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("tegen de klok in"); } }
Ten slotte moeten we aan het einde van de hoofdlus de vorige uitvoerwaarde bijwerken met de huidige uitvoerwaarde zodat de lus met dezelfde logica kan worden herhaald. De volgende code doet hetzelfde
Previous_Output = digitalRead (Encoder_OuputA);
Een ander optioneel ding is om te controleren of de schakelaar op de encoder is ingedrukt. Dit kan worden gecontroleerd door de schakelpen op de roterende codeur te controleren. Deze pin is een actieve lage pin, wat betekent dat deze naar beneden gaat als de knop wordt ingedrukt. Als de pin niet wordt ingedrukt, blijft de pin hoog, we hebben ook een pull-up-weerstand gebruikt om ervoor te zorgen dat de knop hoog blijft als de schakelaar niet wordt ingedrukt, waardoor de conditie met zwevende komma wordt vermeden.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Schakelaar ingedrukt"); }
Werken met Rotary Encoder met Arduino
Zodra de hardware en code klaar zijn, upload je de code naar het Arduino-bord en schakel je het Arduino-bord in. U kunt hem via de USB-kabel van stroom voorzien of een 12V-adapter gebruiken. Wanneer het wordt ingeschakeld, moet het LCD-scherm het intro-bericht weergeven en vervolgens blanco worden. Draai nu aan de roterende encoder en u zou moeten zien dat de waarde begint te verhogen of te verlagen op basis van de richting waarin u draait. De tweede regel laat zien of de encoder met de klok mee of tegen de klok in wordt gedraaid. De onderstaande afbeelding laat hetzelfde zien
Ook wanneer de knop wordt ingedrukt, zal de tweede regel aangeven dat de knop is ingedrukt. De volledige werking is te vinden in de onderstaande video. Dit is slechts een voorbeeldprogramma om de encoder met Arduino te verbinden en te controleren of het werkt zoals verwacht. Als je hier eenmaal bent, zou je de encoder voor al je projecten moeten kunnen gebruiken en dienovereenkomstig kunnen programmeren.
Ik hoop dat je de tutorial hebt begrepen en dat alles werkte zoals het hoort. Als je problemen hebt, gebruik dan het commentaargedeelte of de forums voor technische hulp.