Innehållsförteckning:

Handledning för roterande kodare med Arduino: 6 steg
Handledning för roterande kodare med Arduino: 6 steg

Video: Handledning för roterande kodare med Arduino: 6 steg

Video: Handledning för roterande kodare med Arduino: 6 steg
Video: LDmicro 19: Rotary Encoder Menu Navigation (Microcontroller PLC Ladder Programming with LDmicro) 2024, November
Anonim
Handledning för roterande kodare med Arduino
Handledning för roterande kodare med Arduino

Rotary encoder är en elektronisk komponent som kan övervaka rörelse och position när den roterar. Rotary encoder använder optiska sensorer som kan generera pulser när roterande encoder roterar. Användning av den roterande kodaren vanligtvis som en mekanisk eller robotisk rörelseövervakare kan också användas för menyval på displayen. Rotary encoder har två utgångar så att den kan skilja mellan negativ (CW) och positiv (CCW) rotation och har också en enda knapp.

Steg 1: Pulsflöde för roterande kodare

Pulsflöde för roterande kodare
Pulsflöde för roterande kodare

Pulsflödet som genereras av följande roterande kodare är som bilden ovan.

Steg 2: Pinout av Rotary Encoder

Pinout av Rotary Encoder
Pinout av Rotary Encoder

Förklaring:

  • GND GND
  • + + 5V
  • SW -knapp på roterande pulsgivare när den trycks in
  • DT -data
  • CLK -data 2

En av DT- eller CLK -stiften måste vara ansluten till avbrottsfoten på Arduino Uno, eller så är både DT och CLK anslutna till avbrottsstiftet.

Steg 3: Schematisk

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

Steg 4: Kod

Koda
Koda

I följande handledning, som kommer att användas som avbrott är PIN 2 för Arduino Uno, medan PIN 3 endast används som en vanlig inmatning.

#define encoder0PinA 2 #definiera 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, 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 (""); fördröjning (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } annat {encoder0Pos--; } valRotary = encoder0Pos/2.5; }

I rad 10 i skissen ovan används för att möjliggöra avbrott av stift 2 Arduino Uno. I "doEncoder" -funktionen beräknas från den roterande givaren. Om värdet på DT och CLK (stiftavbrott för Arduino Uno) är samma, kommer variabeln "encoder0Pos" att ökas / läggas till, utöver det villkoret, reduceras variabeln "encoder0Pos".

Steg 5: Förklaring

ValRotary value är värdet på antalet steg som har körts. ValRotärt värde erhålls från avläsningsvärdet för roterande sensorgivare dividerat med 2,5. Ett värde på 2,5 erhålls från testet, eftersom ett steg i den roterande kodaren kan överstiga 1, så dividera med 2,5 för dess värde enligt steget och även tillägget av läsfördröjningen.

Medan på linje 19 - 25 är ett program för att avgöra om roterande roterande givare CW eller CCW. Förklaringen av raderna 19 - 25 är när den aktuella avläsningen av roterande kodare är större än de tidigare rotationsdata som sedan uttrycks som CW. Om den aktuella avläsningen är mindre än den föregående avläsningen anges den som CCW.

Steg 6: Utmatning

Produktion
Produktion

1 = startknappens värde för rotatorn när den inte har tryckts in

Rekommenderad: