|
Il multiplexer (o mux), codice CD74HC4067/HW-178 è uno strumento potenzailmente molto utila. Il Raspberry PI3/4/5 possiede 27 GPIO utilizzabili. Sembrano un bel numero, ma per progetti complessi non sono mai abbastanza! Il multiplexer , a fronte di una richiesta di sei GPIO, permetter di controllare 16 ingressi digitali o uscite, con un guadagno netto di dieci GPIO. Naturalmente è necessario aggiungere alcune righe di codice, ma la complessità è ampiamente compensata dal vantaggio acquisito, con un costo veramente modesto. |
| Ho
effettuato una ricerca piuttosto approfondita sul web
relativa ai programmi per il multiplexer applicato al
Raspberry PI 3/4/5. L'unico programma che ho trovato è questo,
che ho dovuto modificare per rendere utilizzabile. Perciò penso che i programmi seguenti potranno essere utili. |
| |
| Come inserire il multiplexer sulla BDS |
| |
![]() |
La
BDS ha una sezione dedicata al multiplexer, come si può
vedere nell'immagine di sinistra con il multi montato, e lo
schema in quella di destra. Questa sezione è posta in basso
a sinistra della basetta.Sotto il multiplexer sono presenti
tre connettori da 16 pin, per facilitare il collegamento
delle periferiche, offrendo rispettivamente il collegamento
al segnale (riquadro verde), alla massa (grigio),
all'alimentazione positiva (rosso). |
![]() |
|
|
| 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 "multiplexer" in cui creeremo l'ambiente virtuale (che chiameremo "multi"), 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/multiplexer per spostarsi nella cartella "multiplexer"; python3 -m venv multi per creare l'ambiente virtuale "multi "; source multi /bin/activate per attivare l'ambiente virtuale: apparirà (multi) all'inizio della nuova riga. A questo punto, si possono salvare all'interno dell'ampbiente virtuale la libreria necessaria, con il comando: "pip3 install RPi.GPIO" 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 relay" . 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. |
| |
|
|
| |
| Altri
programmi che usano relè |
| Clicca qui per programmi con l'uso di relè sulla pagina di Telegram Clicca qui per programmi con l'uso di relè con DHT11/DHT22 Clicca qui per programmi con l'uso di relè con il display DHT11 + SSD1306 Clicca qui per programmi con l'uso di relè con BME280 Clicca qui per programmi con l'uso di relè con il display BME280 + SSD1306 Clicca qui per programmi con l'uso di relè |
| |
|
|
| |
|
Programmi per il multiplexer |
| |
| Attenzione: quando i programmi utilizzano dei relè per controllare apparecchi allacciati alla rete elettrica a 220v, rivolgersi sempre a personale esperto e qualificato! Collegamenti errati possono procurare gravi danni, anche mortali! |
| |
| |
| Il primo programma: lettura di 16 sensori |
|
|
|
| Il secondo programma: lettura di 16 sensori e attivazione dei relè |
| Questo
programma è un'evoluzione del precedente: non si leggono
solo i valori rilevati dai sensori, ma in base al loro stato
verranno attivati/disattivati i relè corrispondenti.
La struttura di base del programma è simile al precedente,
qui sulla destra si vedono le righe di programma aggiunte
per gestire i relè o i led. Nella colonna di destra si vedono le linee di codice, sono poste su due colonne per ragione di impaginamento. Nel riquadro rosso si vede quanti sensori verranno letti. Possono essere anche di meno, per esempio 8 o 12. Il time sleep /riquadro verde) è molto basso: 0.01 secondi, ovvero 1/100 di secondi, per cui il ritardo tra l'evento e l'azione corrispondente è veramente minimo. |
![]() |
![]() |
Su
queste due colonne, anche quiposte di fianco solo per motivi
di lunghezza del testo, si vede a sinistra sulle prime 5
linee i GPIO in uso per lil funzionamento del multiplexer;
lq sedici righe successive sono relative all'abbinamento del
rele con il rispettivo GPIO. La colonna di destra abbina ogni relè con una funzione di uscita. |
| Nota: alcuni i led si accendono quando il valore è "GPIO.HIGH" (vedi riquadro blu). Alcuni relè - come quelli singoli tipo KY-019 - si attivano con lo stesso valore. Altri - specialmente quelli in batteria da 4, 6, 8 - si attivano con "GPIO.LOW", per cui è necessario modificare le righe "if... elif" invertendo i valori. |
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/multiplexer" e lanciarlo con il seguente comando: "python sensors16.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il terzo programma: lettura di 8 sensori e attivazione dei relè |
| Il
terzo programma è semplicemente un ridimensionamento di
quello precedente: invece di gestire 16 uscite (relè o led),
ne utilizza solamente otto. In genere i relè su blocchi sono
in gruppi di 2,4,6 oppure otto, per cui si possono eseguire
varie combinazioni. |
![]() |
Rispetto
al programma precedente, il range è "8", ovvero i relè da 0
a 8. Simmetricamente, i relè definiti saranno solo questi, e
le routine if ...elif saranno solo, ovviamente, solo da 0 a
7 |
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/multiplexer" e lanciarlo con il seguente comando: "python sensors8.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il quarto programma: il controllo del valore di un singolo sensore e attivazione di due attuatori |
| Questo
programma parte da una diversa prospettiva: supponiamo di
avere sedici sensori inseriti sul multiplexer, ma volessimo
verificare lo stato di un singolo sensore per volta, con la
possibilità di attivare/disattivare uno o |
|
![]() Questa routine permette di scegliere quale sensore in una gamma da "0" a 15". Nelle righe successive (quelle che iniziano con "if"), viene fatto un controllo se il numero inserito è maggiore di 15, e quindi chiede nuovamente di digitare il numero corretto. |
| due
attuatori in alternativa ( quando uno si attiva, l'altro
si disattiva e viceversa). I sensori digitali possono essere tra i più disparati: pulsanti, interruttori, sensori di presenza (pir), magnetici, ecc: qualsiasi sensore che dia in uscita un valore digitale. All'avvio del programma appare la richiesta della scelta del sensore (0/./16) da monitorare. |
| 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/multiplexer" e lanciarlo con il seguente comando: "python sensor.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il quinto programma: il controllo del valore di un singolo sensore con l'attivazione di un relè/led |
| Il
quinto programma è identico al precedente; può verificare lo
stato di uno qualsiasi dei 16 sensori connessi direttamente
al multiplexer; semplicemente è stata inserita anche una
routine per attivare/disattivare un paio di led (o relè). Anche in questo caso è stata inserita una routine per selezionare il sensore desiderato. Può essere utile in diverse occasioni: è sufficiente che il sensore selezionato tra i sedici disponibili si attivi, per accendere una luce, attivare un a periferica come un elettrodomestico, ecc. Esso in pratica è il reciproco dell'ottavo programma, in cui sedici sensori attuatori connessi direttamente al multiplexer sono controllati in alternativa da un singolo sensore. |
![]() |
La
routine in oggetto: leggendo il sensore selezionato, alla
sua attivazione accende il led1 (o attiva il relè posto
sullo stesso GPIO) e contestualmente spegne il led2 (o
disattiva il relè corrispondente; se il sensore si
disattiva, accade esattamente il contrario. |
| In
questa immagine si vedono i GPIO interessati: i primi cinque
sono i "soliti" utilizzati dal multiplexer; quelli
successivi, ovvero "led1 " (che può essere un led, un
relè, oppure entrambi) è connesso a GPIO19, corrispondente a
DG1; "led2" è collegato al GPIO21, zoccolo DG3. Naturalmente modificando le linee evidenziate, è possibile utilizzare qualunque altro GPIO libero. |
![]() |
![]() il risultato della lettura |
Vista dei dati sul terminale del Raspberry: si è scelto di verificare lo stato del sensore posto sul terzo canale: si vede come inizialmente non sia attivato, poi nella fase centrale è stato eccitato, poi di nuovo disattivo. Nell'immagine di destra si evidenzia il connettore su cui inserire il sensore. In questo caso, il cavo di segnale sarà connesso all'ingresso "3". |
![]() Connettore su cui inserire il sensore |
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/multiplexer" e lanciarlo con il seguente comando: "python sensor1.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il sesto programma: 16 led che si rincorrono |
| Con
questo programma si cambia il punto di vista: nei precedenti
l'attenzione principali era sui sensori; in questo l'accento
è sugli attuatori, in questo caso a sedici led. Una
prima routine accende in rapida sequenza i sedici led, dal
numero "0" al "15"; la seconda procede all'inverso: dal "14"
o "0". in questo secondo caso, non riparte da 15 per non
accendere due vole lo stesso led, dando l'impressione di un
movimento fluido. |
![]() |
La
prima routine (riquadro verde) accende i led in sequenza da
"0" a "15"; la seconda (riquadro blu), accende i led dal
"14" a "0". E' possibile ridurre l'intervallo, per esempio a soli otto led:
|
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/multiplexer" e lanciarlo con il seguente comando: "led.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il settimo programma: 8 led che si rincorrono ancora di più! |
| Il
settimo programma è il raffinamento del programma
precedente: 8 led si accendono in progressione. Dapprima
tutti in senso orario, poi tutti in senso antiorario; acora
solo quelli pari in senso orario e infine quelli dispari in
senso antiorario. Poi il loop riprende all'infinito, fino a
quando non lo si interrompe con Ctrl + C. Variando il range della subroutine è possibile utilizzare tutti i led; personalmente per realizzare in comodità questo test ho usato un modulo con 8 led rossi con catodo in comune. Ho collegato "D1" del modulo a "0" del connettore del multiplexer; mentre il pin "COM" è stato collegato a "GND". |
![]() un modulo da 8 led |
![]() |
|
Parte
della stampa che appare fluidamente sul terminale del
Raspberry, contemporaneamente all'accensione del led
corrispondente. |
Le
quattro routine per l'accensione in sequenza dei led:
Questa routine può essere utile per imparare alcune utili funzioni dell'istruzione for... in... |
![]() |
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/multiplexer" e lanciarlo con il seguente comando: "python led_b.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| L'ottavo programma: attivare una delle 16 periferiche con un singolo sensore |
Questo programma permette di controllare a scelta uno dei sedici attuatori collegati al multiplexer, per mezzo di un unico sensore. All'avvio del programma, appare un prompt dei comandi che pernmette di selezionare quale sensore gestire. Esso in pratica è il reciproco del quinto programma in cui sedici sensori connessi direttamente al multiplexer controllano in alternativa un singolo attuatore. Il pin di segnale del sensore deve essere collegato al GPIO17, affinché passi l'informazione all'ingresso del multiplexer. Per esempio si può semplicemente connettere con un cavetto il GPIO17 con il GPIO24 (o GPIO26) sul connettore "DATA" per poter gestire l'attuatore (led o relè desiderato) con il pulsante BT1(o BT2) presente sulla BDS. Naturalmente è sempre possibile utilizzare un altro sensore, collegato per esempio a DG1 (GPIO19). In questo caso sarà necessario ponticellare GPIO19, sempre con GPIO17. L'attuatore verrà selezionato con la "solita" routine che permetterà di scegliere l'attuatore tra l'uscita "0" e la "15", con il controllo che il valore non sia superiore a 15. |
|
![]() |
![]() |
|
La
struttura dei programmi è sempre simile: in alto sono
definiti i GPIO relativia alla gestione del multiplexer. Nelle righe seguenti la routine per selezionare l'attuatore da usare (led, relè o altro) e il controllo che non si ecceda il numero 15. Altrimenti appare un messaggio di errore e si ripropone la richiesta. |
| Ed
ecco infine la semplice routine che seleziona lo stato
dell'attuatore selezionato. Quando lo stato del sensore
cambia, immediatamente si modifica anche quello
dell'attuatore. |
|
![]() |
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/multiplexer" e lanciarlo con il seguente comando: "python led_b.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
| |
|
|
| |