Innholdsfortegnelse:

Opplæring av Rotary Encoder With Arduino: 6 trinn
Opplæring av Rotary Encoder With Arduino: 6 trinn

Video: Opplæring av Rotary Encoder With Arduino: 6 trinn

Video: Opplæring av Rotary Encoder With Arduino: 6 trinn
Video: Как построить ПЛК Arduino с модулем часов реального времени и поворотным энкодером 2024, November
Anonim
Opplæring av Rotary Encoder With Arduino
Opplæring av Rotary Encoder With Arduino

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øm fra roterende encoder
Pulsstrøm fra roterende encoder

Pulsstrømmen generert av den følgende roterende omkoderen er som bildet ovenfor.

Trinn 2: Pinout av Rotary Encoder

Pinout av Rotary Encoder
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

Skjematisk
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

Kode
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

Produksjon
Produksjon

1 = startknappens verdi på dreieknappen når den ikke er trykket på

Anbefalt: