Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Rotary encoder er en elektronisk komponent som er i stand til å overvåke bevegelse og posisjon når den roterer. Rotary encoder benytter optiske sensorer som kan generere pulser når den roterende encoderen roterer. Bruk av roterende encoder vanligvis som en mekanisk eller robotisk bevegelsesmonitor kan også brukes til menyvalg på displayet. Rotary encoder har to utganger slik at den kan skille mellom negativ (CW) og positiv (CCW) rotation og har også en enkelt knapp.
Trinn 1: Pulsstrøm til roterende encoder
Pulsstrømmen generert av den følgende roterende omkoderen er som bildet ovenfor.
Trinn 2: Pinout av Rotary Encoder
Forklaring:
- GND GND
- + + 5V
- SW -knapp på roterende encoder når den trykkes
- DT -data
- CLK -data 2
En av DT- eller CLK -pinnene må være koblet til avbruddsfoten til Arduino Uno, eller begge DT og CLK er koblet til avbruddspinnen.
Trinn 3: Skjematisk
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
Trinn 4: Kode
I den følgende opplæringen, som vil bli brukt som avbrudd, er PIN 2 til Arduino Uno, mens PIN 3 bare brukes som en vanlig inngang.
#define encoder0PinA 2 #definere encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; ugyldig oppsett () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {
Serial.print ("CCW");
} lastValRotary = valRotary; Serial.println (""); forsinkelse (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } annet {encoder0Pos--; } valRotary = encoder0Pos/2.5; }
I linje 10 i skissen ovenfor brukes for å muliggjøre avbrudd av pin 2 Arduino Uno. I "doEncoder" -funksjonen beregnes fra den roterende omkoderen. Hvis verdien av DT og CLK (pin interrupt av Arduino Uno) er den samme, vil variabelen "encoder0Pos" økes / legges til, i tillegg til den tilstanden, blir "encoder0Pos" variabelen redusert.
Trinn 5: Forklaring
ValRotary verdi er verdien av antall trinn som har vært kjørt. ValRotær verdi er hentet fra leserverdien for roterende sensorkoder delt på 2,5. En verdi på 2,5 oppnås fra testen, siden ett trinn i den roterende omkoderen kan overstige 1, så del med 2,5 for verdien i henhold til trinnet og tillegg av leseforsinkelsen.
Mens på linje 19 - 25 er et program for å avgjøre om roterende rotorkoder CW eller CCW. Forklaringen på linjene 19 - 25 er når den nåværende avlesningen til den roterende koderen er større enn de tidligere rotasjonsdataene deretter uttrykt som CW. Mens hvis den nåværende avlesningen er mindre enn den forrige lesningen, er den oppgitt som CCW.
Trinn 6: Utgang
1 = startknappens verdi på dreieknappen når den ikke er trykket på