- Materiali richiesti
- Come funziona un codificatore rotante?
- Tipi di encoder rotativo
- Pinout e descrizione dell'encoder rotativo KY-040
- Schema del circuito dell'encoder rotativo Arduino
- Programmazione del tuo Arduino per encoder rotativo
- Funzionamento dell'encoder rotativo con Arduino
Un codificatore a rotazione è un dispositivo di input che aiuta l'utente a interagire con un sistema. Sembra più un potenziometro radio ma emette un treno di impulsi che rende la sua applicazione unica. Quando la manopola dell'Encoder viene ruotata, ruota sotto forma di piccoli passi che ne facilitano l'utilizzo per il controllo dello stepper / servomotore, navigando attraverso una sequenza di menu e aumentando / diminuendo il valore di un numero e molto altro ancora.
In questo articolo impareremo i diversi tipi di encoder rotativi e come funzionano. Lo interfacciamo anche con Arduino e controlleremo il valore di un numero intero ruotando l'Encoder e visualizzeremo il suo valore su uno schermo LCD 16 * 2. Alla fine di questo tutorial ti sentirai a tuo agio nell'usare un codificatore rotante per i tuoi progetti. Quindi iniziamo…
Materiali richiesti
- Encoder rotativo (KY-040)
- Arduino UNO
- LCD alfanumerico 16 * 2
- Potenziometro 10k
- Breadboard
- Cavi di collegamento
Come funziona un codificatore rotante?
Un encoder rotativo è un trasduttore elettromeccanico, il che significa che converte i movimenti meccanici in impulsi elettronici. Consiste in una manopola che ruotando si muoverà passo passo e produrrà una sequenza di treni di impulsi con ampiezza predefinita per ogni passo. Esistono molti tipi di encoder, ciascuno con il proprio meccanismo di funzionamento, impareremo a conoscere i tipi in seguito, ma per ora concentriamoci solo sull'encoder incrementale KY040 poiché lo stiamo utilizzando per il nostro tutorial.
Di seguito è illustrata la struttura meccanica interna dell'Encoder. Fondamentalmente è costituito da un disco circolare (colore grigio) con cuscinetti conduttivi (colore rame) posti sopra questo disco circolare. Questi pad conduttivi sono posizionati a una distanza uguale come mostrato di seguito. I pin di uscita sono fissati sulla parte superiore di questo disco circolare, in modo tale che quando la manopola viene ruotata i pad conduttivi entrano in contatto con i pin di uscita. Qui ci sono due pin di uscita, Uscita A e Uscita B come mostrato nella figura sotto.
La forma d'onda di uscita prodotta dal pin di uscita A e dall'uscita B viene mostrata rispettivamente in blu e verde. Quando il pad conduttivo si trova direttamente sotto il pin, diventa alto risultando in tempo e quando il pad conduttivo si allontana il pin si abbassa con il conseguente tempo di spegnimento della forma d'onda mostrata sopra. Ora, se contiamo il numero di impulsi, saremo in grado di determinare di quanti passi è stato spostato l'Encoder.
Ora può sorgere la domanda: perché abbiamo bisogno di due segnali di impulso quando uno è sufficiente per contare il numero di passi effettuati durante la rotazione della manopola. Questo perché dobbiamo identificare in quale direzione è stata ruotata la manopola. Se guardi i due impulsi puoi notare che entrambi sono sfasati di 90 °. Quindi, quando la manopola viene ruotata in senso orario, l'uscita A andrà prima alta e quando la manopola viene ruotata in senso antiorario l'uscita B andrà alta per prima.
Tipi di encoder rotativo
Esistono molti tipi di encoder rotativi sul mercato, il progettista può sceglierne uno in base alla sua applicazione. I tipi più comuni sono elencati di seguito
- Encoder incrementale
- Encoder assoluto
- Encoder magnetico
- Encoder ottico
- Encoder laser
Questi encoder sono classificati in base al segnale di uscita e alla tecnologia di rilevamento, l'encoder incrementale e gli encoder assoluti sono classificati in base al segnale di uscita e gli encoder magnetico, ottico e laser sono classificati in base alla tecnologia di rilevamento. L' encoder utilizzato qui è un encoder di tipo incrementale.
Pinout e descrizione dell'encoder rotativo KY-040
Di seguito sono illustrate le piedinature dell'encoder rotativo di tipo incrementale KY-040
I primi due pin (Ground e Vcc) vengono utilizzati per alimentare l'Encoder, in genere viene utilizzata l'alimentazione + 5V. Oltre a ruotare la manopola in senso orario e antiorario, l'encoder dispone anche di un interruttore (Active low) che può essere premuto premendo la manopola all'interno. Il segnale da questo interruttore è ottenuto tramite il pin 3 (Switch). Infine ha i due pin di uscita che producono le forme d'onda come già discusso sopra. Ora impariamo come interfacciarlo con Arduino.
Schema del circuito dell'encoder rotativo Arduino
Lo schema elettrico completo per l' interfacciamento dell'encoder rotativo con Arduino è mostrato nella figura sotto
L'encoder rotativo ha 5 pin nell'ordine mostrato nell'etichetta sopra. I primi due pin sono Ground e Vcc che è collegato al pin Ground e + 5V di Arduino. L'interruttore dell'encoder è collegato al pin digitale D10 ed è anche tirato in alto tramite una resistenza da 1k. I due pin di uscita sono collegati rispettivamente a D9 e D8.
Per visualizzare il valore della variabile che verrà aumentata o diminuita ruotando il codificatore rotante è necessario un modulo display. Quello utilizzato qui è comunemente disponibile display LCD alfanumerico 16 * 2. Abbiamo collegato il display per funzionare in modalità 4 bit e lo abbiamo alimentato utilizzando il pin + 5V di Arduino. Il potenziometro viene utilizzato per regolare il contrasto del display LCD. Se vuoi saperne di più sull'interfacciamento del display LCD con Arduino segui il link. Il circuito completo può essere costruito sopra una breadboard, il mio sembrava qualcosa di simile sotto una volta che tutti i collegamenti sono stati effettuati.
Programmazione del tuo Arduino per encoder rotativo
È abbastanza facile e diretto programmare la scheda Arduino per interfacciare un codificatore rotante con esso se si avesse compreso il principio di funzionamento di un codificatore rotante. Dobbiamo semplicemente leggere il numero di impulsi per determinare quanti giri ha fatto l'encoder e controllare quale impulso è andato alto per primo per trovare in quale direzione è stato ruotato l'encoder. In questo tutorial visualizzeremo il numero che viene incrementato o decrementato sulla prima riga del display LCD e la direzione dell'Encoder nella seconda riga. Il programma completo per fare lo stesso si trova in fondo a questa pagina con un video dimostrativo, non necessita di alcuna libreria. Ora, dividiamo il programma in piccoli pezzi per capire il funzionamento.
Poiché abbiamo utilizzato un display LCD, includiamo la libreria a cristalli liquidi che è presente di default nell'IDE di Arduino. Quindi definiamo i pin per il collegamento dell'LCD con Arduino. Infine inizializziamo il display LCD su quei pin.
#includere
Successivamente, all'interno della funzione di configurazione , viene visualizzato un messaggio introduttivo sullo schermo LCD, quindi attendere 2 secondi in modo che il messaggio sia leggibile dall'utente. Questo per garantire che l'LCD funzioni correttamente.
lcd.print ("Encoder rotativo"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("Con Arduino"); // Ritardo riga 2 messaggio introduttivo (2000); lcd.clear ();
Il codificatore a rotazione ha tre pin di uscita che saranno i pin INPUT per Arduino. Questi tre pin sono rispettivamente Switch, Output A e Output B. Questi sono dichiarati come Input utilizzando la funzione pinMode come mostrato di seguito.
// dichiarazione della modalità pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
All'interno della funzione di configurazione del vuoto , leggiamo lo stato del pin di uscita A per verificare l'ultimo stato del pin. Useremo quindi queste informazioni per confrontare con il nuovo valore per verificare quale pin (uscita A o uscita B) è andato in alto.
Previous_Output = digitalRead (Encoder_OuputA); // Legge il valore iniziale dell'output A
Infine, all'interno della funzione loop principale, dobbiamo confrontare il valore dell'uscita A e dell'uscita B con l'uscita precedente per verificare quale va in alto per primo. Questo può essere fatto semplicemente confrontando il valore dell'uscita corrente di A e B con l'uscita precedente come mostrato di seguito.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Clockwise"); }
Nel codice precedente la seconda condizione if viene eseguita se l'output B è cambiato dall'output precedente. In questo caso il valore della variabile dell'encoder viene incrementato e il display LCD mostra che l'encoder è ruotato in senso orario . Allo stesso modo se la condizione if fallisce, nella successiva condizione else decrementiamo la variabile e mostriamo che l'encoder è ruotato in senso antiorario . Il codice per lo stesso è mostrato di seguito.
altro { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Anti - Clockwise"); } }
Infine, alla fine del loop principale dobbiamo aggiornare il valore dell'uscita precedente con il valore dell'uscita corrente in modo che il loop possa essere ripetuto con la stessa logica. Il codice seguente fa lo stesso
Previous_Output = digitalRead (Encoder_OuputA);
Un'altra cosa facoltativa è controllare se l'interruttore sull'Encoder è premuto. Questo può essere monitorato controllando il perno dell'interruttore sul codificatore rotante. Questo pin è un pin basso attivo, il che significa che andrà basso quando si preme il pulsante. Se non premuto il perno rimane alto, abbiamo anche usato una resistenza di pull up per assicurarci che rimanga alto quando l'interruttore non è premuto, evitando così la condizione di virgola mobile.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Interruttore premuto"); }
Funzionamento dell'encoder rotativo con Arduino
Una volta che l'hardware e il codice sono pronti, carica il codice sulla scheda Arduino e accendi la scheda Arduino. Puoi alimentarlo tramite il cavo USB o utilizzare un adattatore 12V. Quando è alimentato, il display LCD dovrebbe visualizzare il messaggio di introduzione e quindi rimanere vuoto. Ora ruota l'encoder rotativo e dovresti vedere il valore iniziare incrementato o decrementato in base alla direzione in cui ruoti. La seconda riga mostra se l'encoder viene ruotato in senso orario o antiorario. L'immagine sotto mostra lo stesso
Inoltre, quando si preme il pulsante, la seconda riga visualizzerà che il pulsante è stato premuto. La lavorazione completa la trovate nel video qui sotto. Questo è solo un programma di esempio per interfacciare l'Encoder con Arduino e verificare se funziona come previsto. Una volta arrivato qui dovresti essere in grado di utilizzare l'encoder per qualsiasi tuo progetto e programmare di conseguenza.
Spero che tu abbia capito il tutorial e che le cose abbiano funzionato come dovrebbe. In caso di problemi, utilizzare la sezione commenti o i forum per assistenza tecnica.