Cuprins:

Tutorial codificator rotativ cu Arduino: 6 pași
Tutorial codificator rotativ cu Arduino: 6 pași

Video: Tutorial codificator rotativ cu Arduino: 6 pași

Video: Tutorial codificator rotativ cu Arduino: 6 pași
Video: Codificator rotativ #6 FLProg și LCD I2C | ESP32 NodeMCU | Programare încorporată vizuală Arduino 2024, Iulie
Anonim
Tutorial codificator rotativ cu Arduino
Tutorial codificator rotativ cu Arduino

Codificatorul rotativ este o componentă electronică capabilă să monitorizeze mișcarea și poziția la rotire. Codificatorul rotativ utilizează senzori optici care pot genera impulsuri atunci când codificatorul rotativ se rotește. Aplicarea codificatorului rotativ, de obicei ca monitor de mișcare mecanică sau robotică, poate fi utilizată și pentru selectarea meniului pe afișaj. Codificatorul rotativ are două ieșiri, astfel încât să poată distinge între rotația negativă (CW) și pozitivă (CCW) și are, de asemenea, un singur buton.

Pasul 1: Fluxul de impuls al codificatorului rotativ

Flux de impuls al codificatorului rotativ
Flux de impuls al codificatorului rotativ

Fluxul de impuls generat de următorul codificator rotativ este ca imaginea de mai sus.

Pasul 2: fixarea codificatorului rotativ

Pinout codificator rotativ
Pinout codificator rotativ

Explicaţie:

  • GND GND
  • + + 5V
  • Butonul SW al codificatorului rotativ la apăsare
  • Date DT
  • Date CLK 2

Unul dintre pinii DT sau CLK trebuie conectat la piciorul de întrerupere al Arduino Uno sau ambii DT și CLK sunt conectați la pinul de întrerupere.

Pasul 3: Schematic

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

Pasul 4: Cod

Cod
Cod

În următorul tutorial, care va fi folosit ca întrerupere, este PIN-ul 2 al Arduino Uno, în timp ce PIN-ul 3 este utilizat doar ca intrare obișnuită.

#define encoder0PinA 2 # define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (codificator0PinA, INPUT_PULLUP); pinMode (codificator0PinB, INPUT_PULLUP); pinMode (codificator0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; bucla void () {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 (""); întârziere (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos / 2.5; }

În linia 10 a schiței de mai sus este utilizată pentru a activa întreruperea pinului 2 Arduino Uno. În funcția "doEncoder" se calculează din codificatorul rotativ. Dacă valoarea DT și CLK (întrerupere pin a Arduino Uno) este aceeași, atunci variabila "encoder0Pos" va fi incrementată / adăugată, pe lângă această condiție, variabila "encoder0Pos" este decrementată.

Pasul 5: Explicație

Valoarea ValRotary este valoarea numărului de pași care s-au executat. Valoarea ValRotary este obținută din valoarea de citire a codificatorului senzorului rotativ împărțită la 2,5. Din test se obține o valoare de 2,5, deoarece o etapă a codificatorului rotativ poate depăși 1, deci împărțiți la 2,5 pentru valoarea sa în funcție de perstep și, de asemenea, adăugarea întârzierii de citire.

În timp ce pe linia 19-25 este un program pentru a determina dacă codificatorul rotativ rotativ CW sau CCW. Explicația liniilor 19 - 25 este atunci când citirea curentă a codificatorului rotativ este mai mare decât datele rotative anterioare exprimate atunci ca CW. În timp ce, dacă citirea curentă este mai mică decât citirea anterioară, atunci este menționată ca CCW.

Pasul 6: ieșire

Ieșire
Ieșire

1 = valoarea butonului de pornire a rotativului când nu a fost apăsat

Recomandat: