Inhoudsopgave:

Tutorial van Rotary Encoder met Arduino - Ajarnpa
Tutorial van Rotary Encoder met Arduino - Ajarnpa

Video: Tutorial van Rotary Encoder met Arduino - Ajarnpa

Video: Tutorial van Rotary Encoder met Arduino - Ajarnpa
Video: Rotary Encoder op Arduino (zonder extra library) 2024, Juli-
Anonim
Tutorial van Rotary Encoder met Arduino
Tutorial van Rotary Encoder met Arduino

Roterende encoder is een elektronische component die beweging en positie kan bewaken tijdens het draaien. Rotary encoder maakt gebruik van optische sensoren die pulsen kunnen genereren wanneer de roterende encoder draait. Toepassing van de roterende encoder, meestal als een mechanische of robotachtige bewegingsmonitor, kan ook worden gebruikt voor menuselectie op het display. Rotary encoder heeft twee uitgangen zodat hij onderscheid kan maken tussen negatieve (CW) en positieve (CCW) rotatie en heeft ook een enkele knop.

Stap 1: Pulsstroom van roterende encoder

Pulsstroom van roterende encoder
Pulsstroom van roterende encoder

De pulsstroom die wordt gegenereerd door de volgende roterende encoder is zoals de afbeelding hierboven.

Stap 2: Pinout van roterende encoder

Pinout van roterende encoder
Pinout van roterende encoder

Uitleg:

  • GND GND
  • + +5V
  • SW-knop van roterende encoder wanneer ingedrukt
  • DT-gegevens
  • CLK-gegevens 2

Een van de DT- of CLK-pinnen moet worden aangesloten op de interrupt-voet van Arduino Uno, of zowel de DT als de CLK zijn aangesloten op de interrupt-pin.

Stap 3: Schematisch:

Schematisch
Schematisch
  • GND naar GND Arduino Uno
  • + à +5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK naar PIN2 Arduino Uno

Stap 4: Coderen

Code
Code

In de volgende tutorial, die als interrupt zal worden gebruikt, is PIN 2 van Arduino Uno, terwijl PIN 3 alleen als reguliere invoer wordt gebruikt.

#define encoder0PinA 2#define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup() { Serial.begin(9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt(0, doEncoder, WIJZIGING); } int valRotary, lastValRotary; void loop () { int btn = digitalRead (encoder0Btn); Serial.print(btn); Serieel.print(" "); Serial.print(valRotary); if(valRotary>lastValRotary) { Serial.print("CW"); } if(valRotary {

Serial.print(" CCW");

} lastValRotary = valRotary; Serieel.println(" "); vertraging (250); } void doEncoder() {if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) { encoder0Pos++; } else { encoder0Pos--; } valRotary = encoder0Pos/2.5; }

In regel 10 van de bovenstaande schets wordt de interrupt van pin 2 Arduino Uno ingeschakeld. In de "doEncoder"-functie wordt berekend vanaf de roterende encoder. Als de waarde van DT en CLK (pin-interrupt van Arduino Uno) hetzelfde is, wordt de variabele "encoder0Pos" verhoogd / toegevoegd, naast die voorwaarde wordt de variabele "encoder0Pos" verlaagd.

Stap 5: Uitleg

ValRotary-waarde is de waarde van het aantal stappen dat is uitgevoerd. ValRotary-waarde wordt verkregen uit de afleeswaarde van de roterende sensor-encoder gedeeld door 2,5. Een waarde van 2,5 wordt verkregen uit de test, aangezien één stap van de roterende encoder groter kan zijn dan 1, dus deel door 2,5 voor zijn waarde volgens de perstap en ook de toevoeging van de leesvertraging.

Terwijl op regel 19 - 25 een programma is om te bepalen of roterende roterende encoder CW of CCW. De uitleg van regels 19 - 25 is wanneer de huidige uitlezing van de roterende encoder groter is dan de vorige roterende data dan uitgedrukt als CW. Terwijl als de huidige meting kleiner is dan de vorige meting, deze wordt vermeld als CCW.

Stap 6: Uitgang

Uitgang
Uitgang

1 = de startknopwaarde van de draaiknop wanneer deze niet is ingedrukt

Aanbevolen: