Indholdsfortegnelse:

Tutorial om Rotary Encoder With Arduino: 6 trin
Tutorial om Rotary Encoder With Arduino: 6 trin

Video: Tutorial om Rotary Encoder With Arduino: 6 trin

Video: Tutorial om Rotary Encoder With Arduino: 6 trin
Video: KY-040 :rotary encoder sensor arduino uno | Rotary Encoder Arduino Tutorial | Rotary Encoder Wiring 2024, November
Anonim
Tutorial om Rotary Encoder Med Arduino
Tutorial om Rotary Encoder Med Arduino

Rotary encoder er en elektronisk komponent, der er i stand til at overvåge bevægelse og position, når den roterer. Rotary encoder anvender optiske sensorer, der kan generere pulser, når den roterende encoder roterer. Anvendelse af den roterende encoder normalt som en mekanisk eller robotisk bevægelsesmonitor kan også bruges til menuvalg på displayet. Rotary encoder har to udgange, så den kan skelne mellem negativ (CW) og positiv (CCW) rotation og har også en enkelt knap.

Trin 1: Pulsflow af roterende encoder

Pulsflow af roterende encoder
Pulsflow af roterende encoder

Pulsstrømmen genereret af den følgende roterende encoder er som billedet ovenfor.

Trin 2: Pinout af Rotary Encoder

Pinout af Rotary Encoder
Pinout af Rotary Encoder

Forklaring:

  • GND GND
  • + + 5V
  • SW -knap på roterende encoder, når der trykkes på den
  • DT Data
  • CLK -data 2

En af DT- eller CLK -benene skal forbindes til afbrydelsesfoden på Arduino Uno, eller begge DT og CLK er forbundet til afbryderstiften.

Trin 3: Skematisk

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

Trin 4: Kode

Kode
Kode

I den følgende vejledning, som vil blive brugt som afbrydelse, er PIN 2 for Arduino Uno, mens PIN 3 kun bruges som en almindelig indtastning.

#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; ugyldig opsætning () {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"); } hvis (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); forsinkelse (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } andet {encoder0Pos--; } valRotary = encoder0Pos/2.5; }

I linje 10 i skitsen ovenfor bruges til at muliggøre afbrydelse af pin 2 Arduino Uno. I "doEncoder" -funktionen beregnes ud fra den roterende encoder. Hvis værdien af DT og CLK (pin -afbrydelse af Arduino Uno) er den samme, vil varianten "encoder0Pos" blive øget / tilføjet, ud over denne betingelse, reduceres varianten "encoder0Pos".

Trin 5: Forklaring

ValRotary -værdi er værdien af antallet af trin, der har været kørt. ValRotær værdi hentes fra den roterende sensor encoders læsningsværdi divideret med 2,5. En værdi på 2,5 opnås ved testen, da et trin i den roterende encoder kan overstige 1, så divider med 2,5 for dens værdi i henhold til trin og tilføjelse af læseforsinkelsen.

Mens på linje 19 - 25 er et program til at bestemme, om roterende roterende encoder CW eller CCW. Forklaringen på linjerne 19 - 25 er, når den aktuelle roterende encoder -aflæsning er større end de tidligere rotationsdata derefter udtrykt som CW. Hvorimod hvis den aktuelle aflæsning er mindre end den foregående læsning, angives den som CCW.

Trin 6: Output

Produktion
Produktion

1 = startknappens værdi på drejeknappen, når der ikke er trykket på den

Anbefalede: