INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Rotary encoder is 'n elektroniese komponent wat beweging en posisie kan monitor tydens rotasie. Die draaikodeerder gebruik optiese sensors wat pulse kan genereer wanneer die roterende enkodeerder draai. Die toepassing van die draaikodeerder, gewoonlik as 'n meganiese of robotiese bewegingsmonitor, kan ook gebruik word vir die keuse van spyskaarte op die skerm. Rotary encoder het twee uitsette sodat dit kan onderskei tussen negatiewe (CW) en positiewe (CCW) rotasie en het ook 'n enkele knoppie.
Stap 1: Polsvloei van roterende enkodeerder
Die polsvloei wat deur die volgende roterende enkodeerder gegenereer word, is soos op die foto hierbo.
Stap 2: Pinout van Rotary Encoder
Verduideliking:
- GND GND
- + + 5V
- SW -knoppie van die roterende encoder wanneer dit ingedruk word
- DT -data
- CLK -data 2
Een van die DT- of CLK -penne moet aan die onderbrekingvoet van Arduino Uno gekoppel wees, of albei die DT en CLK is met die onderbrekingspen verbind.
Stap 3: Skematiese
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
Stap 4: Kode
In die volgende tutoriaal word PIN 2 van Arduino Uno as onderbreking gebruik, terwyl PIN 3 slegs as 'n gereelde invoer gebruik word.
#define encoder0PinA 2 #definieer encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; ongeldige opstelling () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; leemte -lus () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } as (valRotary {
Serial.print ("CCW");
} lastValRotary = valRotary; Serial.println (""); vertraging (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } anders {encoder0Pos--; } valRotary = encoder0Pos/2.5; }
In reël 10 van die skets hierbo word gebruik om die onderbreking van pen 2 Arduino Uno moontlik te maak. In die "doEncoder" funksie word bereken uit die roterende encoder. As die waarde van DT en CLK (penonderbreking van Arduino Uno) dieselfde is, word die veranderlike "encoder0Pos" verhoog / toegevoeg, benewens die toestand, word die veranderlike "encoder0Pos" verminder.
Stap 5: Verduideliking
ValRotary -waarde is die waarde van die aantal stappe wat uitgevoer is. ValRotêre waarde word verkry uit die leeswaarde van die roterende sensor encoder gedeel deur 2.5. 'N Waarde van 2,5 word verkry uit die toets, aangesien een stap van die draaikodeerder 1 kan oorskry, dus deel met 2,5 vir die waarde daarvan volgens die stap en ook die byvoeging van die leesvertraging.
Terwyl dit op lyn 19 - 25 is, is 'n program om vas te stel of roterende draaikodeerder CW of CCW is. Die verduideliking van reëls 19 - 25 is wanneer die huidige uitlees van die roterende enkoder groter is as die vorige roterende data wat dan uitgedruk is as CW. Terwyl die huidige lesing kleiner is as die vorige lesing, word dit as CCW aangedui.
Stap 6: Uitset
1 = die beginknoppie van die draaiknop as dit nie ingedruk is nie