Inhoudsopgave:

Rotary Encoder - Begrijp en gebruik het (Arduino/andere Controller): 3 stappen
Rotary Encoder - Begrijp en gebruik het (Arduino/andere Controller): 3 stappen

Video: Rotary Encoder - Begrijp en gebruik het (Arduino/andere Controller): 3 stappen

Video: Rotary Encoder - Begrijp en gebruik het (Arduino/andere Controller): 3 stappen
Video: Rotary Encoder op Arduino (zonder extra library) 2024, November
Anonim
Rotary Encoder - Begrijp en gebruik het (Arduino/andere ΜController)
Rotary Encoder - Begrijp en gebruik het (Arduino/andere ΜController)

Een roterende encoder is een elektromechanisch apparaat dat roterende beweging omzet in digitale of analoge informatie. Het kan met de klok mee of tegen de klok in draaien. Er zijn twee soorten roterende encoders: absolute en relatieve (incrementele) encoders.

Terwijl een absolute encoder een waarde afgeeft die evenredig is met de huidige ashoek, voert een incrementele encoder de stap van de as en zijn richting uit. (In dit geval hebben we een incrementele encoder)

Roterende encoders worden steeds populairder omdat u twee functies in één elektrische module kunt gebruiken: een eenvoudige schakelaar voor het bevestigen van bewerkingen en de roterende encoder om b.v. via een menukaart.

Een incrementele roterende encoder genereert twee uitgangssignalen terwijl de as draait. Afhankelijk van de richting leidt het ene signaal naar het andere. (zie onder)

Stap 1: De uitvoergegevens begrijpen

De uitvoergegevens begrijpen
De uitvoergegevens begrijpen

Zoals u kunt zien wanneer de encoderas met de klok mee begint te draaien, valt uitgang A eerst naar LAAG en volgt uitgang B. Tegen de klok in draait de werking tegengesteld.

Nu hoeven we dit alleen nog maar te implementeren op onze µController (ik gebruikte een Arduino Nano).

Stap 2: Bouw het circuit

Bouw het circuit
Bouw het circuit
Bouw het circuit
Bouw het circuit

Zoals ik eerder heb beschreven, creëren de uitgangen een HOGE en een LAGE flank. Om een schone HIGH te krijgen op de datapin A en B van de µController, moeten we Pull-Up-weerstanden toevoegen. De gemeenschappelijke Pin C gaat rechtstreeks naar de grond voor de LAGE flank.

Om informatie te krijgen over de interne schakelaar (drukknop) zullen we de andere twee pinnen gebruiken. Een daarvan gaat naar VCC en de andere naar een datapin van de µController. We moeten ook een pull-down-weerstand aan de datapin toevoegen om een schone LOW te krijgen.

Het is ook mogelijk om interne Pull-Up en Pull-Down weerstanden van uw µController te gebruiken!

In mijn geval ziet de pinout er als volgt uit:

  • +3, 3V => +3, 3V (Arduino)(ook +5V mogelijk)
  • GND => GND (Arduino)
  • EEN => Pin10
  • B =>

    Pin

    11

  • C => GND
  • ZW =>

    Pin

    12

Stap 3: De code schrijven

int pinA = 10; // interne schakelaar A int pinB = 11; // interne schakelaar B int pinSW = 12; //switch (ingedrukt Encoder) int encoderPosCount = 0; // begint bij nul, verander als je wilt

int positiewaarde;

bool schakelwaarde; int mrotateLaatste; int mrotaat;

ongeldige setup() {

int mrotateLast = digitalRead (pinA); Serieel.begin (9600); vertraging (50); }

void loop() { readencoder(); if(readswitch() == 1){ Serial.println("Switch = 1"); } }

int-lezer (){

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// knop draait if (digitalRead (pinB)! = mrotate) {// schakelaar A eerst gewijzigd -> met de klok mee draaien encoderPosCount ++; Serial.println ("met de klok mee gedraaid"); } else {// schakelaar B eerst gewijzigd -> draaien tegen de klok in encoderPosCount--; Serial.println ("tegen de klok in gedraaid"); }

Serial.print("Encoder Positie: "); Serial.println(encoderPosCount); Serieel.println(""); } mrotateLast = mrotate; retourneer encoderPosCount; } bool leesschakelaar(){

if (digitalRead (pinSW)! = 0) {// schakelaar is ingedrukt

while(digitalRead(pinSW)!=0){} //switch is momenteel ingedrukt switchval = 1; } else{switchval = 0;} //switch is niet ingedrukt return switchval; }

Nu kun je aan de encoder draaien en de variabele encoderPosCount telt op als je met de klok mee draait en af als je tegen de klok in draait.

Dat is het! Simpel en handig.

Voel je vrij om de code te wijzigen en uit te voeren. U kunt het implementeren in uw project.

Ik zal ook een LED-project uploaden waarbij ik de encoder heb gebruikt om de helderheid van mijn LED's in te stellen.

Aanbevolen: