Utilizzando gli encoder rotativi con le schede Arduino
Puoi controllare molti progetti utilizzando componenti come pulsanti o ingressi a cursore, ma cosa succede se la tua costruzione richiede una manopola? Se il tuo progetto necessita di un input rotativo, hai due opzioni: un potenziometro o un encoder rotativo.
I potenziometri, che variano la resistenza in base alla posizione della manopola, sono più semplici e spesso una scelta solida, ma si possono ruotare solo in senso orario o antiorario (finora). Se hai bisogno di qualcosa che possa ruotare continuamente in entrambe le direzioni, la scelta migliore è un encoder rotativo. Se hai bisogno di aiuto per decidere tra i due, la nostra discussione tra encoder e potenziometro potrebbe aiutarti a trovare la risposta.
Gli encoder esistono in due stili di base:
1. Encoder incrementali utilizzano una serie di impulsi in una disposizione quadratura per indicare quanto e in quale direzione ruota un albero.
2. Encoder assoluti sanno intrinsicamente la loro posizione angolare.
Questo articolo si concentrerà principalmente sugli encoder incrementali, il tipo di encoder che vedrai più comunemente. Gli encoder con uscita singola (alias tachimetri) sono anche disponibili, ma sono molto meno utili poiché indicano solo quanto si è mosso un albero, non la direzione. Puoi consultare il nostro articolo sui tipi di encoder per una discussione più dettagliata, ma oggi copriremo i principi di base su come funziona un encoder incrementale e come interfacciarlo con una scheda Arduino.
Encoder Incrementali: Tutorial e Panoramica
Diagramma di quadratura per i segnali dell'encoder A e B. Un fronte di salita per B e un segnale basso per A indica il movimento verso destra su questo schema, mentre un fronte di discesa per A con B alto indica il movimento verso sinistra.
Al centro della maggior parte dei encoder ci sono le uscite "A" e "B", che pulsano costantemente e incrementali. Queste uscite si combinano con alimentazione e massa, secondo necessità. Le uscite A e B sono "codificate in quadratura", il che significa che ciascun segnale ha un ciclo di lavoro del 50% (metà del tempo acceso e metà del tempo spento). Ecco come funziona:
- Ogni ciclo di lavoro è sfasato di 90° rispetto all'altro; un'uscita cambia quando l'altra è a metà del tempo necessario per cambiare stato.
- Un microcontrollore collegato o una scheda dedicata traduce questi impulsi in un incremento di rotazione, e la sequenza di impulsi indicherà in quale direzione è girato l'albero.
Come mostrato nel diagramma sopra, se il segnale B sale mentre A è in uno stato basso, allora la posizione in questo schema è avanzata verso destra. Se, tuttavia, il segnale B sale quando A è già in uno stato alto, allora si avanzerebbe verso sinistra. Combinato con la salita e la discesa del segnale A, questo dà quattro stati distinti per ogni linea:
Lo stesso schema di segnale è disponibile per il segnale A, dando otto possibili transizioni distinte e quattro in ciascuna direzione. Con questo schema avvolto e ripetuto in un cerchio, ora hai la base per un encoder rotativo in quadratura.
1. B crescente, A basso
2. B decrescente, A alto
3. B crescente, A alto
4. B decrescente, A basso
Utilizzo di un encoder rotativo con Arduino
Abbineremo due tipi di encoder con l'Arduino:
- Encoder a contatto: più piccolo, generalmente utilizzato come dispositivo di interfaccia.
- Encoder ottico (LPD3806-600BM-G5-24C): stile più grande con supporto a cuscinetto, generalmente utilizzato per la misurazione della velocità dei motori.
Se stai utilizzando l'encoder più piccolo, segui i seguenti passaggi:
1. Collega la linea centrale a terra.
2. Collega una connessione esterna a D2 e l'altra a D3; non è richiesta tensione positiva.
Per l'encoder più grande, segui questi passaggi:
1. Collega la linea di alimentazione rossa a +5V e il filo nero a terra.
2. Collega le linee A e B (verde e bianca) ad Arduino D2 e D3.
3. Nota che le connessioni, i requisiti di tensione e gli schemi di colori possono variare a seconda della tua implementazione.
Codice Encoder Arduino
Image: Jeremy S. Cook
Una volta che comprendi come le linee A e B di un encoder pulsano con la rotazione, ottenere un output utile è una questione di traduzione di questo input in codice. Questo passaggio è semplice in teoria ma può essere complicato in pratica. Puoi trovare il codice di esempio qui (insieme a un top stampabile in 3D per assistere nei test). Anche se il top non è perfetto, è direzionalmente accurato e illustra come funziona un encoder. Quando il microcontrollore di Arduino rileva una transizione tra alto e basso su una delle linee, confronta gli stati di entrambe le linee e aggiunge o sottrae un incremento come appropriato.
Assicurati di selezionare D2 e D3 perché sono gli unici due ingressi per l'ATmega328 in molti board Arduino che sono capaci di generare un interrupt. Questo significa che quando si osserva una transizione qui, entra immediatamente in una routine di lettura, senza aspettare che la logica del programma la richiami.
Ricorda anche il codice di debounce millis(), che si adatta a un input che cambia rapidamente tra stati durante una transizione e può connettersi e disconnettersi rapidamente per un breve periodo. Anche se questo codice funziona accettabilmente in alcune applicazioni e può aiutarti a comprendere come funzionano gli encoder, ottenere letture con una precisione del 100% non è facile.
Uso della Arduino Encoder Library
Il codice dell'encoder Arduino ti aiuterà a capire come funzionano gli encoder, ma se vuoi semplicemente usarne uno nel tuo progetto, approfitta della libreria pronta all'uso di Paul Stoffregen. Ecco come iniziare:
1. Scarica la libreria encoder da GitHub.
2. Nell'IDE di Arduino, vai su Sketch ==> Include Library ==> Add .ZIP Library, e aggiungi "Encoder-master.zip".
3. Una volta installata, vedrai sotto File ==> Examples ==> Encoder, che ha quattro programmi elencati. Carica l'esempio "Basic" e trasferiscilo sulla tua scheda Arduino.
4. Collega il tuo encoder con positivo e negativo connessi come prima, ma questa volta instrada i fili dei segnali A e B su D5 e D6.
5. Apri il monitor seriale a 9600 baud e vedrai la posizione incrementare e decrementare accuratamente.
Come con l'encoder ottico, la posizione dovrebbe cambiare senza alcun tipo di intervento. Per un divertimento extra, apri il plotter seriale dell'IDE di Arduino alla stessa velocità di baud. Invece di limitarti a indicarti i numeri di posizione, creerà automaticamente un grafico dei valori.
Sia che li utilizzi come interfaccia personalizzata o per misurare velocità e distanza, gli encoder offrono un eccellente metodo di input rotativo per il tuo progetto Arduino. Richiedono un po' più di lavoro per essere configurati rispetto a molti altri tipi di dispositivi, ma i risultati possono essere molto soddisfacenti.
Tag articolo