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, Studeni
Anonim
Vodič za rotacijski koder s Arduinom
Vodič za rotacijski koder s Arduinom

Rotacijski davač 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 također se može koristiti za odabir izbornika na zaslonu. Rotacijski davač ima dva izlaza tako da može razlikovati negativnu (CW) i pozitivnu (CCW) rotaciju te također ima jednu tipku.

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 rotacijskog davača

Isključivanje rotacijskog kodera
Isključivanje rotacijskog kodera

Obrazloženje:

  • GND GND
  • + + 5V
  • SW tipka rotacijskog davača kad 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: Shematski prikaz

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

Korak 4: Kodirajte

Kodirati
Kodirati

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 (enkoder0PinA, INPUT_PULLUP); pinMode (enkoder0PinB, INPUT_PULLUP); pinMode (enkoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serijski.ispis (btn); Serial.print (""); Serijski.ispis (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 izračunava iz rotacijskog davača. Ako je vrijednost DT i CLK (prekid pina u Arduino Uno) ista, tada će se varijabla "encoder0Pos" povećati / dodati, osim tog uvjeta, varijabla "encoder0Pos" se smanjuje.

Korak 5: Objašnjenje

ValRotary vrijednost je vrijednost broja koraka koji su pokrenuti. ValRotary vrijednost dobiva se iz očitane vrijednosti davača rotacijskog senzora podijeljene s 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 dodatkom kašnjenja čitanja.

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

Korak 6: Ispis

Izlaz
Izlaz

1 = vrijednost gumba za pokretanje rotacijskog uređaja kada nije pritisnut

Preporučeni: