Puoi controllare molti progetti utilizzando componenti come pulsanti o input con slider. Cosa succede però se la tua struttura richiede una manopola? Se il tuo progetto richiede un ingresso rotativo, hai due scelte: un potenziometro o un encoder rotativo.
I potenziometri, che variano la resistenza in base alla posizione della manopola, sono più semplici e spesso rappresentato un'ottima scelta, tuttavia (ad ora) possono essere ruotati solo in senso orario o antiorario. Se ti occorre una soluzione in grado di ruotare continuamente in entrambe le direzioni, un encoder rotativo è l'ideale. Se sei in dubbio nella scelta tra queste due soluzioni, il nostro confronto tra encoder e potenziometro potrebbe aiutarti a trovare la risposta.
Gli encoder sono disponibili in due stili di base:
1. Gli encoder incrementali utilizzano una serie di impulsi in quadratura per indicare la distanza e la direzione di rotazione dell'albero.
2. Gli encoder assoluti rilevano in modo intrinseco la propria posizione angolare.
Questo articolo verte principalmente sugli encoder incrementali, ovvero il tipo di encoder più largamente utilizzato. Sono disponibili anche encoder a singola uscita (tachimetri AKA), tuttavia sono molto meno utili in quanto indicano solo la distanza di spostamento di un albero, non la relativa direzione. Per saperne di più, puoi consultare il nostro articolo sui tipi di encoder; oggi, invece, esamineremo le basi del funzionamento di un encoder incrementale e illustreremo come interfacciarlo con una scheda Arduino.
Descrizione degli encoder in quadratura
Didascalia: diagramma di quadratura per i segnali dell'encoder A e B. Un fronte di salita per B e un segnale basso per A indicano lo spostamento a destra su questo schema, mentre un fronte di rilascio per A con B alto indica lo spostamento a sinistra.
Al centro della maggior parte degli encoder vi sono le uscite "A" e "B", che generano impulsi in modo costante e incrementale. Queste uscite si combinano con la potenza e la messa a terra, a seconda delle necessità. Le uscite A e B sono codificate in quadratura, il che significa che ogni segnale ha un ciclo di lavoro del 50% (attivo per metà del tempo e inattivo per l'altra metà). 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 microcontroller collegato o una scheda dedicata traduce questi impulsi in un incremento di rotazione, e la sequenza di impulsi indica la direzione di rotazione dell'albero.
Come mostrato nel diagramma precedente, se il segnale B aumenta mentre A è in uno stato basso, la posizione su questo schema avanza a destra. Se, tuttavia, il segnale B aumenta quando A è già in uno stato alto, uno dei due segnali avanza a sinistra. In combinazione con l'aumento e la diminuzione del segnale A, si ottengono quattro stati distinti per ogni linea:
Lo stesso schema di segnale è disponibile per il segnale A, fornendo otto possibili transizioni distinte e quattro in ogni direzione. Con questo schema pronto e ripetuto in un cerchio, ora disponi delle basi per un encoder rotativo in quadratura.
1. B in aumento, A basso
2. B in diminuzione, A alto
3. B in aumento, A alto
4. B in diminuzione, A basso
Uso dell'encoder con Arduino
Abbineremo due tipi di encoder con Arduino:
- Encoder a contatto: più piccolo, generalmente utilizzato come dispositivo di interfaccia.
- Encoder ottico (LPD3806-600BM-G5-24C): tipo più grande con un supporto del cuscinetto, generalmente utilizzato per la misurazione della velocità del motore.
Se utilizzi un encoder più piccolo, procedi come segue:
1. Collega la linea centrale a terra.
2. Collega una connessione esterna a D2 e l'altra a D3; non è necessaria una tensione positiva.
Per l'encoder più grande, attieniti alla seguente procedura:
1. Collegare la linea di alimentazione rossa a +5 V e il filo nero a terra.
2. Collega le linee A e B (verde e bianca) ad Arduino D2 e D3.
3. I collegamenti, i requisiti di tensione e gli schemi di colore possono variare a seconda dell'implementazione.
Codice encoder Arduino
Immagine: Jeremy S. Cook
Una volta compreso come le linee A e B di un encoder generano impulsi con la rotazione, ottenere un risultato utile è solo questione di tradurre questo ingresso in codice. Questo passaggio è semplice in teoria, ma può essere difficile in pratica. Puoi trovare il codice di esempio qui (insieme ad un piano stampabile in 3D per facilitare i test). Anche se il piano non è perfetto, è preciso nella direzione e illustra il funzionamento di un encoder. Quando il microcontroller Arduino rileva una transizione tra alto e basso su una delle due linee, confronta entrambi gli stati delle linee e aggiunge o sottrae un incremento a seconda dei casi.
Assicurati di selezionare D2 e D3 perché sono gli unici due ingressi per ATmega328 in molte schede Arduino in grado di generare un interrupt. Questo significa che quando viene rilevata una transizione qui, la ruotine di lettura viene attivata immediatamente, senza aspettare che la logica del programma la chiami.
Tieni a mente anche il codice antirimbalzo millis(), che si adatta a un ingresso che passa rapidamente da uno stato all'altro durante una transizione e che può collegarsi e scollegarsi rapidamente per un breve periodo di tempo. Sebbene questo codice funzioni bene in alcune applicazioni e può aiutare a comprendere come funzionano gli encoder, non è facile ottenere letture accurate al 100%.
Metodo semplice: libreria di encoder
Il codice encoder Arduino ti aiuterà a comprendere come funzionano gli encoder, tuttavia se te ne occorre solo uno per il tuo progetto, approfitta della libreria già pronta di Paul Stoffregen. Ecco come iniziare:
1. Scarica la libreria di encoder da GitHub.
2. Sull'IDE di Arduino, passa a Sketch ==> Include Library ==> Add .ZIP Library e aggiungi in "Encoder-master.zip.
3. Una volta installata, in File ==> Examples ==> Examples ==> Encoder potrai visualizzare quattro programmi elencati. Carica l'esempio "Basic" e trasferisci la tua scheda Arduino.
4. Collega l'encoder con le linee positiva e il negativa come in precedenza, ma questa volta instrada i fili dei segnali A e B verso D5 e D6.
5. Aprite il monitor seriale a 9600 baud per vedere con precisione l'incremento e il decremento della posizione.
Come per l'encoder ottico, la posizione dovrebbe cambiare senza alcun problema. Per sperimentare ulteriormente, apri il plotter seriale dell'IDE di Arduino alla stessa velocità di baud. Anziché limitarsi a comunicare i numeri di posizione, crea automaticamente un grafico dei valori.
Sia che li usi come interfaccia personalizzata o per misurare velocità e distanza, gli encoder forniscono un eccellente metodo di ingresso rotativo per il tuo progetto Arduino. L'installazione richiede un po' più di lavoro rispetto a molti altri tipi di dispositivi, tuttavia i risultati possono valere la pena.