Sadržaj:

Vodič za rotacijski koder s Arduinom: 6 koraka
Vodič za rotacijski koder s Arduinom: 6 koraka

Video: Vodič za rotacijski koder s Arduinom: 6 koraka

Video: Vodič za rotacijski koder s Arduinom: 6 koraka
Video: Измерьте ток до 500A с помощью шунтирующего резистора с помощью Arduino 2024, Juli
Anonim
Vodič za rotacijski koder s Arduinom
Vodič za rotacijski koder s Arduinom

Rotacijski koder je elektronička komponenta koja može pratiti kretanje i položaj pri rotiranju. Rotacijski davač koristi optičke senzore koji mogu generirati impulse kada se rotacijski davač okreće. Primjena rotacijskog davača obično kao mehanički ili robotski monitor kretanja može se koristiti i za izbor menija na ekranu. Rotacijski davač ima dva izlaza tako da može razlikovati negativnu (CW) i pozitivnu (CCW) rotaciju te također ima jedno dugme.

Korak 1: Impulsni tok rotacijskog davača

Impulsni tok rotacijskog davača
Impulsni tok rotacijskog davača

Pulsni tok koji generira sljedeći rotacijski davač sličan je gornjoj slici.

Korak 2: Ispis rotacionog davača

Isključivanje rotacijskog kodera
Isključivanje rotacijskog kodera

Objašnjenje:

  • GND GND
  • + + 5V
  • SW tipka rotacijskog davača kada se pritisne
  • DT podaci
  • CLK podaci 2

Jedan od DT ili CLK pinova mora biti spojen na prekidnu nogu Arduino Uno, ili su oba DT i CLK spojena na prekidni pin.

Korak 3: Shema

Shematski
Shematski
  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW za PIN 4 Arduino Uno
  • DT na PIN 3 Arduino Uno
  • CLK za PIN2 Arduino Uno

Korak 4: Kodirajte

Kod
Kod

U sljedećem vodiču koji će se koristiti kao prekid je PIN 2 za Arduino Uno, dok se PIN 3 koristi samo kao običan ulaz.

#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (enkoder0Btn, 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 (""); kašnjenje (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos/2.5; }

U retku 10 gornje skice koristi se za omogućavanje prekida pina 2 Arduino Uno. U "doEncoder" funkcija se računa iz rotacijskog davača. Ako je vrijednost DT i CLK (prekid pinova Arduino Uno -a) ista, tada će se varijabla "encoder0Pos" povećati / dodati, osim tog uvjeta, varijabla "encoder0Pos" se smanjuje.

Korak 5: Objašnjenje

ValRotary value je vrijednost broja koraka koji su pokrenuti. ValRotary vrijednost dobiva se iz očitane vrijednosti davača rotacijskog senzora podijeljene sa 2,5. Testiranjem se dobiva vrijednost 2,5, budući da jedan korak rotacijskog davača može premašiti 1, pa ga podijelite s 2,5 za njegovu vrijednost u skladu s korakom i sabiranjem kašnjenja čitanja.

Dok je na linijama 19 - 25 program za utvrđivanje je li rotacijski rotacijski davač CW ili CCW. Objašnjenje redova 19 - 25 je kada je trenutno očitanje rotacijskog davača veće od prethodnih podataka rotacije koji su tada izraženi kao CW. Dok je trenutno očitanje manje od prethodnog očitanja, onda se navodi kao CCW.

Korak 6: Izlaz

Output
Output

1 = vrednost dugmeta za pokretanje rotacionog tastera kada nije pritisnut

Preporučuje se: