Sommario:

Encoder rotativo - Comprendilo e usalo (Arduino/altro Controller): 3 passaggi
Encoder rotativo - Comprendilo e usalo (Arduino/altro Controller): 3 passaggi

Video: Encoder rotativo - Comprendilo e usalo (Arduino/altro Controller): 3 passaggi

Video: Encoder rotativo - Comprendilo e usalo (Arduino/altro Controller): 3 passaggi
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Novembre
Anonim
Encoder rotativo - Comprendilo e usalo (Arduino/altro ΜController)
Encoder rotativo - Comprendilo e usalo (Arduino/altro ΜController)

Un encoder rotativo è un dispositivo elettromeccanico che converte il movimento rotatorio in informazioni digitali o analogiche. Può girare in senso orario o antiorario. Esistono due tipi di encoder rotativi: encoder assoluti e relativi (incrementali).

Mentre un encoder assoluto emette un valore proporzionale all'angolo dell'albero corrente, un encoder incrementale emette il passo dell'albero e la sua direzione. (In questo caso abbiamo un encoder incrementale)

Gli encoder rotativi stanno diventando più popolari perché è possibile utilizzare due funzioni in un modulo elettrico: un semplice interruttore per confermare le operazioni e l'encoder rotante per navigare, ad es. attraverso un menù.

Un encoder rotativo incrementale genera due segnali di uscita mentre il suo albero ruota. A seconda della direzione, uno dei segnali conduce l'altro. (vedi sotto)

Passaggio 1: comprensione dei dati di output

Comprensione dei dati di output
Comprensione dei dati di output

Come puoi vedere quando l'albero dell'encoder inizia a ruotare in senso orario, l'uscita A scende per prima su LOW e l'uscita B la segue. In senso antiorario l'operazione gira in senso opposto.

Ora non ci resta che implementarlo sul nostro µController (ho usato un Arduino Nano).

Passaggio 2: costruisci il circuito

Costruisci il circuito
Costruisci il circuito
Costruisci il circuito
Costruisci il circuito

Come ho descritto prima, le uscite creano un fianco ALTO e uno BASSO. Per ottenere un HIGH pulito ai pin dati A e B del µController dobbiamo aggiungere resistori Pull-Up. Il Pin comune C va dritto a massa per il fianco BASSO.

Per avere informazioni sull'interruttore interno (pulsante) utilizzeremo gli altri due pin. Uno di questi va a VCC e l'altro a un Pin dati del µController. Dobbiamo anche aggiungere un resistore pull-down al pin dati per ottenere un LOW pulito.

È anche possibile utilizzare resistori interni di Pull-Up e Pull-Down del tuo µController!

Nel mio caso il pinout è simile a:

  • +3, 3V => +3, 3V (Arduino)(possibile anche +5V)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Spillo

    11

  • C => GND
  • SW =>

    Spillo

    12

Passaggio 3: scrittura del codice

int pinA = 10; //interruttore interno A int pinB = 11; //interruttore interno B int pinSW = 12; //switch (premuto Encoder) int encoderPosCount = 0; // inizia da zero, cambia se vuoi

int positionval;

valore bool; int mrotateLast; int mrotate;

void setup() {

int mrotateLast = digitalRead(pinA); Inizio seriale (9600); ritardo(50); }

void loop() { readencoder(); if(readswitch() == 1){ Serial.println("Switch = 1"); } }

int readencoder (){

mrotate = digitalRead(pinA); if (mrotate != mrotateLast){ //la manopola sta ruotando if (digitalRead(pinB) != mrotate) { //switch A modificato per primo -> rotazione in senso orario encoderPosCount ++; Serial.println ("ruotato in senso orario"); } else {// switch B modificato per primo -> rotazione in senso antiorario encoderPosCount--; Serial.println ("ruotato in senso antiorario"); }

Serial.print("Posizione codificatore: "); Serial.println(encoderPosCount); Serial.println(""); } mrotateLast = mrotate; restituire encoderPosCount; } bool readswitch(){

if(digitalRead(pinSW)!=0){ // l'interruttore è premuto

while(digitalRead(pinSW)!=0){} //l'interruttore è attualmente premuto switchval = 1; } else{switchval = 0;} //l'interruttore non è premuto return switchval; }

Ora puoi ruotare l'encoder e la variabile encoderPosCount conterà in aumento se ruoti in senso orario e conto alla rovescia se ruoti in senso antiorario.

Questo è tutto! Semplice e utile.

Sentiti libero di modificare ed eseguire il codice. Puoi implementarlo nel tuo progetto.

Caricherò anche un progetto LED in cui ho utilizzato l'encoder per impostare la luminosità dei miei LED.

Consigliato: