Utilizzare un encoder rotativo con Arduino

Utilizzare un encoder rotativo con Arduino
Utilizzare un encoder rotativo con Arduino

In questo articolo ti mostro come è possibile utilizzare un encoder rotativo con Arduino.

DigitSpace

Prima di passare al contenuto è doveroso ringraziare il sito DigitSpace per avermi fornito parte del materiale di questo progetto.

Che cos’è un encoder rotativo?

Un encoder rotativo è un dispositivo dalla forma simile a quella di un potenziometro, ma che a differenza del primo non ha una posizione di minimo o di massimo, ma può ruotare liberamene sul suo asse.

Durante la rotazione, dipende dai modelli, è possibile percepire una sorta di “click” ad ogni step percorso.
L’encoder quindi è in grado di fornire indicazioni in merito al “quanto” e al “come” è stato ruotato il pomello.

Esistono varie tipologie di encoder con numeri di step variabili e meccanismi interni differenti.
I più comuni ed economici reperibili in giro, come quello che ho io ad esempio, basano il loro funzionamento su due switch interni che mutano il loro stato sulla base di una ruota dentata.
L’ordine con il quale questi switch vengono interessati, quindi chi si apre prima o dopo rispetto a chi dei due, determina il senso di rotazione.

Un esempio di encoder rotativo potrebbe essere la rotellina del mouse, o la manopola del volume di alcuni impianti HiFi digitali.

Pinout HW-040 / KY-040

Il modello che mi è stato regalato dal sito DigitSpace è un HW-040 che in sostanza è lo stesso del KY-040 e presenta cinque pin di connessione. Per compiere un giro completo esegue trenta step e la disposizione in linea dei “piedini” rende comodo l’innesto sulla breadboard.
Inoltre questo modello incorpora un ulteriore switch utilizzabile con la pressione del pomello. Un po come il pulsante che abbiamo visto nei moduli joystick in qualche articolo precedente.

HW-040
HW-040
HW-040
HW-040
PINDescrizione
CLKPin che utilizzeremo per conteggiare le variazioni di stato
DTPin che utilizzeremo per calcolare la direzione
SWSwitch interno attivabile alla pressione del pomello
+5V di Arduino
GNDGND di Arduino
Pinout HW-040

Codice esempio HW-040

Il codice come sempre è ampiamente commentato, ma per qualsiasi dubbio puoi fare riferimento alla sezione commenti a fondo pagina.
L’esempio in questione non farà altro che incrementare o decrementare una variabile ed inviare il valore al Serial Monitor.

/*
   Utilizzare un encoder rotativo con Arduino

   Autore  : Andrea Lombardo
   Web     : http://www.lombardoandrea.com
   Post    : https://wp.me/p27dYH-PP
*/

//Definizione pin
const unsigned int pinClk = 3;
const unsigned int pinDt = 4;

// Conserva stato ultima posizione encoder
int prevClk;
int prevDt;

// Variabile per mantenere il valore del contatore di esempio
int contatore;

void setup() {

  /*
    Rallentamenti dovuti alla lentezza del monitor seriale
    potrebbero generare false letture, per questo usiamo
    una velocità di scambio dati abbastanza elevata
  */
  Serial.begin(250000);

  pinMode(pinClk, INPUT);
  pinMode(pinDt, INPUT);

  // Esegui prima lettura dei valori sui pin
  prevClk = digitalRead(pinClk);
  prevDt = digitalRead(pinDt);

  //Inizializzo variabile contatore
  contatore = 0;
}


void loop() {
  // Leggi valori dai pin dell'encoder
  int currClk = digitalRead(pinClk);
  int currDt = digitalRead(pinDt);

  // Se la lettura corrente è diversa dall'ultima memorizzata
  if (currClk != prevClk) {

    Serial.print("[prevClk, prevDt | currClk, currDt] = ");
    Serial.print(prevClk);
    Serial.print(" ");
    Serial.print(prevDt);
    Serial.print(" | ");
    Serial.print(currClk);
    Serial.print(" ");
    Serial.print(currDt);

    //Se il valore di dt è uguale al valore corrente di clk
    if (currDt == currClk) {
      Serial.print(" -");
      contatore --;
    } else {
      Serial.print(" +");
      contatore ++;
    }

    // Mostra lo stato del contatore
    Serial.print(" = ");
    Serial.println(contatore);

    //Aggiorna valori
    prevClk = currClk;
    prevDt = currDt;
  }
}

Schema di collegamento HW-040

Per questo esempio lo switch ausiliario attivabile alla pressione del pomello non è stato preso in considerazione, quindi non sarà collegato.

Collegamento encoder HW-040 ad Arduino
Collegamento encoder HW-040 ad Arduino

Conclusioni

Anche questo articolo è servito a dare delle indicazioni base su come utilizzare il componente in questione. Più avanti vedremo come sfruttarlo in diverse occasioni.

A fine pagina trovi il link per scaricare il pacchetto con codici e schemi di collegamento. Come sempre ti ricordo che acquistando prodotti Amazon passando attraverso i link del mio sito, io percepisco una piccola commissione (parliamo di centesimi) in buoni regalo. Questi buoni sommati alle eventuali donazioni PayPal, servono a mantenere attivo il sito web e ad acquistare nuovi componenti.




Potrebbero interessarti anche...

Available for Amazon Prime