![]() KY-023 |
In
questa pagina illustreremo alcuni programmi per un encoder e
un joystick. Può sembrare una scelta un po' strana, quella
di inserirli nella stessa pagina, infatti un encoder è una
periferica digitale, mentre un joystick è un modulo
analogico/digitale. Però hanno due aspetti comuni: entrambi sono periferiche di controllo, e inoltre hanno una piedinatura compatibile, tanto che alloggeranno sullo stesso connettore. |
![]() KY-040 |
| Il
Joystick KY-023 mota due potenziometri, (quindi due controller analogici), rispettivamente per l'asse X e l'asse Y. Facendo pressione sulla manopola , si attiva un pulsante (switch digitale). |
|
L'encoder
KY-040è uno strumento totalmente digitale; ruotando il perno
in senso orario si incrementa un contatore; ruotando i senso
antiorario lo si decrementa, raggiungendo anche valori
negativi. |
Guardandoli dall'alto, si può vedere come li accomuni il fatto di avere una disposizione compatibile dei loro cinque pin: |
![]() |
![]() |
| Il
joystick: 1 - Switch (pulsante, digitale) 2 - VRY (asse Y, analogico) 3 - VRX (asse X, analogico) 4 - +5v (in realtà funziona bene anche a 3,3v) 5 - GND (massa) |
L'encoder: 1 - CLK (clock, digitale) 2 - DT (data, digitale) 3 - SW (pulsante, digitale) 4 - + (alimentazione; bene a 3,3v) 5 - GND (massa) |
| Però il joustick possiede due uscite analogiche e una digitale, mentre l'encoder dispone di tre uscite digitali. Come armonizzare richieste tanto diverse? Lo vedremo nel paragrafo seguente. |
| |
|
|
| |
| Come inserire joystick ed encoder sulla BDS |
![]() |
![]() |
| Come
si vede, il riquadro di AD2 (AD sta per Analogico/Digitale)
è piuttosto affollato. Nel riquadro rosso in basso, si trova
la selezione dell'alimentazione. Poichè entrambi i moduli
funzionano perfettamente a 3,3v non utilizzare i 5v! Ma più interessanti sono i selettori J6 e J7 (riquadri verdi), che selezionano le porte di Raspberry da usare. J7 permette di scegliere tra la porta analogica A3 e qualla digitale GPIO27 sul connettore A/D2; J6 permette di scegliere tra la porta analogica A4 e qualla digitale GPIO22 sul connettore A/D1. Per il Joystick selezionare le porte analogiche A3 e A4; per l'encoder le porte digitali GPIO27 e GPIO22. Il connettore AD2 è piuttosto interessante, perché è molto flessibile, ed eventualmente può essere usato anche per altre perriferiche, infatti permette tre soluzioni diverse: - tre porte digitali: GPIO20, 22 e 27 (come per l'encoder); - due porte digitali: GPIO20, el ascelta tra GOIO 22 e 27 e corrispondentemente una porta analogica: A4 o A3; - una porta digitale GPIO20 e due porte analogiche, A3 e A4 (come per il joystick). |
| |
|
|
| La creazione dell'ambiente virtuale e l'inserimento delle librerie necessarie |
| Ipotizziamo che sul desktop del proprio Raspberry si crei una cartella "Projects" e all'interno una sottocartella "encjoy" in cui creeremo l'ambiente virtuale (che chiameremo "yoy "), le librerie necessarie e i programmi. Nota: naturalmente i nomi dati alle sottocartelle possono essere variati a piacere. Postulando che si siano create le cartelle indicate, si può iniziare con la programmazione. Aprire un terminale (la quarta icona in alto a destra) e digitare quanto segue:cd Desktop/Projects/encjoy per spostarsi nella cartella "encjoy "; python3 -m venv joy per creare l'ambiente virtuale "joy "; source joy/bin/activate per attivare l'ambiente virtuale: apparirà joy) all'inizio della nuova riga; A questo punto, si possono salvare all'interno dell'ampbiente virtuale le due librerie necessario, con i comandi: "pip3 install RPi.GPIO" e "pip3 install GPIOZERO". Ma c'è anche una via alternativa, che vale per tutti gli ambienti virtuali: eseguire il seguente comando per utilizzare le librerie già presenti con l'installazione di Python: digitando il comando "python -m venv --system-site-packages env" (al posto di "env" si può inserire il nome dell'ambiente virtuale preferito. In questo caso sarà poi sufficiente installare solo le librerie specifiche per i vari sensori, guadagnando in semplicità e risparmio di occupazione di scheda SD o di disco. Nota: nel caso siano richieste librerie specifiche, è necessario creare l'ambiente virtuale. Clicca qui per i programmi per encoder. Clicca qui per i programmi per joystick. |
| |
|
|
| |
| Altri
programmi che usano il Joystick e/o l'encoder |
| |
| |
|
|
| |
| Programmi
per l'encoder |
| L'encoder
è uno strumento interessante, perchè con alcuni accorgimenti
sostituisce efficacemente un potenziometro, che ha la
necessità di implementare nel proprio circuito una o più
porte analogiche, non presenti nativamente sul Raspberry. Quindi può facilmente regolare la luminosità di un led, la velocità di un motore elettrico, l'angolo di rotazione di un servomotore, o l'avanzamento di un motore a passi, usando la funzione PWM (Pulse Wave Modulation). Queste possibilità verranno sviluppate nei programmi che seguono. |
| |
| |
| Il primo programma: leggi i valori dell'encoder |
Il primo programma mostra sul terminale il valore dell'encoder; è stato fissato il limite tra -100 e +100 (rispettivamente rotazione in senso antiorario e orario). Premendo il cursore dell'encoder, i valori si azzerano.
|
|
|
| Il secondo programma: accensione di due led |
Utilizzando questo programma, se si gira il cursore in senso orario, arrivati al valore di +11 si accende il led posto su LED1 (GPIO19) e rimane acceso per valori superiori; se i spegne se si scende da +11. Se si ruota in senso antiorario, giunti a -11 si accende il led posto su LED2 (GPIO18) e rimane acceso per valori inferiori; si spegne se si ricale da -10 e per valori positivi. Premendo il cursore dell'encoder, i valori si azzerano e per conferma si accende per un attimo il led posto su LED4 (GPIO12) Questo programma può essere utile per accendere dei lee (relè, motori, ecc.) in sequenza. Per sempio a +10, +20, ecc. |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc1.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il terzo programma: variazione della luminosità di un led con PWM |
PWM (Power Wave Modulation), permette di simulare l'aumentare o la diminuzione della tensione fornita a un GPIO in uscita del Raspberry. Questo permette di variare la luminosità di un led, la velocità di rotazione di un motore, ecc. Ruotando il cursore in senso orario, si aumenta la luminosità del led posto su LED1 (GPIO19), con valore tra 0 e 1 (divisi in centesimi, con passo impostato a 2). Premendo il cursore dell'encoder, i valori si azzerano e per conferma si accende per un attimo il led posto su LED4 (GPIO12) |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc2.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il quarto programma: variazione della luminosità di DUE led con PWM: |
Il quarto programma è simile al precedente; semplicemente agisce su due led. Il led posto su LED1 (GPIO19) si accende progressivamente ruotando il cursore in senso orario, con valori compresi tra 0 e 1 (divisi in centesimi, con passo impostato a 2). Ruotando il cursore in senso antiorario, si accende preogressivamente il led inserito su LED2 (GPIO18). Premendo il cursore dell'encoder, i valori si azzerano e per conferma si accende per un attimo il led posto su LED4 (GPIO12) |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc3.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il quinto programma: variazione della velocità di un motore elettrico con PWM: |
Il quinto programma prende ancora origine dal terzo, utilizzando sempre la funzione PWM. In questo caso oltre a variare la luminosità del led posto su LED1 (GPIO19), ottiene lo stesso effetto su di un motore elettrico collegato allo zoccolo MT1, che varia la sua velocità di rotazione in base alla rotazione del perno dell'encoder. Il senso di rotazione dipende dall'orientamento dei cavi del motore sulla scheda. Clicca qui per maggiori informazioni sulla gestione di un motore elettrico. Premendo il cursore dell'encoder, i valori si azzerano e per conferma si accende per un attimo il led posto su LED4 (GPIO12) |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc4.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il sesto programma: variare il senso di rotazione e la velocità di un motore elettrico con PWM: |
Quest'ultimo programma permette di far ruotare nei due sensi il motore elettrico; se si preme il pulsante touch BT1 (GPIO24) il motore ruoterà in un senso e in misura corrispondente si illuminerà il led posto su LED1 (GPIO19); premendo BT2 (GPIO26) ruoterà in senso opposto e si illuminerà il led inserito su LED2 (GPIO18). La velocità di rotazione del motore e la luminosità del led dipenderà dall'angolo di rotazione del perno dell'encoder. Premendo il cursore dell'encoder, i valori si azzerano e per conferma si accende per un attimo il led posto su LED4 (GPIO12) |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc4.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Programmi
per il joystick |
| Il
joystick è uno strumento conosciutissimo, fondamentele per
motissimi giochi. Ma può servire anche per controllare un
drone, un robot o più semplicemente ruotare di qualche grado
un selvomotore, variare la luminosità di un led e così via.
Purtroppo con il Raspberry richiede l'uso di un convertitore
A/D, che però è già inserito e funzionante sulla BDS. |
| Il
primo programma: leggi i valori dellèencoder |
| Spersso
il primo programma che si presenta per una periferica è
strettamente didattico. Ed è così anche in questo caso,
infatti mostra sul monitor seriale i dati relativi agli assi
X e Y; nel caso si prema il joystick, appare la scritta
"click!" |
![]() |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc4.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il
secondo programma: controllare due led (e un
motore)con PWM |
Come per alcuni programmi dell'encoder si usa la funzione PWM (Pulse Wave Modulation) per varaire la tensione in uscita su alcuni piedini del Raspberry, in questo caso due lec, che cambaino la loro luminosità tra 0 e 1 in base alle posizioni del perno flottante del yoystick relativamente agli assi X e Y. I led sono i seguenti: LED5 (GPIO5), asse X; LED4 (GPIO12). Incidentalmente, il GPIO5 è quello che da il segnale PWM all'integrato che controlla il motore collegato su MT1; perciò se esso fosse collegato, varierà la sua velocità da 0 al 100% il relazione al valore dell'asse X. Premendo il pulsante sul joystick, si accende il led LD1 (GPIO19). |
![]() |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc4.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il
terzo programma: gestione di un motore elettrico |
Questo programma è specifico per la gestione di un motore elettrico. Premendo il pulsante touch BT1, il motore ruota in un senso, e la velocità è regolata dal valore dell'asse X; contestualmente il led LED3 (GPIO21) varia la sua luminosità in funzione dello stesso valore; premendo il pulsante touch BT2, il motore ruota in un senso opposto, e la velocità è regolata dal valore dell'asse Ycontestualmente il led LED2 (GPIO18) varia la sua luminosità in funzione dello stesso valore. Premendo il pulsante sul joystick, si accende il led LD1 (GPIO19). |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc4.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il quarto programma: gestione di un motore e un servomotore |
Questo programma gestisce un motore elettrico e un servomotore. Premendo il pulsante touch BT1, si avvia il motore, la cui velocità è regolata dal valore dell'asse Y; contestualmente il led LED3 (GPIO21) varia la sua luminosità in funzione dello stesso valore; premendo il pulsante touch BT2, il servomotore ruota da 0 a 180° in base al valore assunto dall'asse Y; contestualmente il led LED2 (GPIO18) varia la sua luminosità in funzione dello stesso valore. Premendo il pulsante sul joystick, si accende il led LD1 (GPIO19). |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/encjoy" e lanciarlo con il seguente comando: "python enc4.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|