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.
PIN | Descrizione |
---|---|
CLK | Pin che utilizzeremo per conteggiare le variazioni di stato |
DT | Pin che utilizzeremo per calcolare la direzione |
SW | Switch interno attivabile alla pressione del pomello |
+ | 5V di Arduino |
GND | GND di Arduino |
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.
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.
Commentati Recentemente