Ethical DIY

Progetti hardware & software etici


Menu orizzontale con sottomenu CSS






 




Pagina principale per Raspberry



Informazioni di base




La basetta sperimentale (BDS)


Applicazioni



Librerie e programmi
  • La gestione delle librerie

  • Programmi applicativi
    • Protocollo_I2C
    • I2C_BME280
    • I2C_BME680
    • I2C_ Display_LCD_1602
    • I2C_Display_SSD1306
    • I2C_SGP30-SGP40
    • SPI_RFID_RC522
    • One-wire_18B20
    • DHT11/DHT22
    • Motore_elettrico
    • Servomotore
    • Motore a passo
    • Encoder_Joystick
    • Pulsanti/piccoli_sensori
    • Led
    • Telecamera_OpenCV
    • Gestione_immagini
    • Ingressi_Analogici
    • Display: LCD1602
    • Display: SSD1306 Oled
    • Display: ST7735
    • Ingressi analogici
    • Programmi vari














 








 
















Raspberry PI 3/4/5
Programmi  per il multiplexer


mlt

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

ta

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).

tb


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) term 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 primo programma permette di leggere in veloce sequenza il valore di 16 sensori digitali (quindi: valore binario,  "0" oppure "1").
Possono essere inseriti tutti i sensori digitali con tre pin (positivo, negativo, segnale), come pulsanti, sensori magnetici, rilevatori di presenza tipo PIR, ecc.)



mpin

i pin utilizzati sulla BDS per gestire il multiplexer

Le linee di codice per leggere i sensori. Nel riquadro verde è indicato il ciclo di controllo; naturalmente è possibile controllsre anche meno sensori, per esempio otto.


mcod
Il "time.speep" presente nel riquadro verde indica il tempo tra una lettura di un sensore  e il successivo. Può essere ulteriormente ridotto, per esempio "time.speep(0.05)". Mentre il "time.speep" evidenziato  nel riquadro giallo indica il tempo di attesa tra un ciclo di lettura e il successivo. Anche questo può essere ridotto. Nel programma i due intervalli sono relativamente lunghi, per poterli visualizzare agevolmente in fase di test.
Nota: ho provato a inserire un sensore analogico, come un potenziometro, ma vengono rilevati solo i due valori estremi "0" con il cursore tutto rivolto a massa, oppure "1", quando è  ruotato verso i +3,3v.



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 sensors.py"

Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie.







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.

r162
r16

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.


8r

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
 
m1
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.


s1

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.


m5
m4
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".

min
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.



m6

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:
  • prima routine: for channel in range(8):
  • seconda routine: for channel in range(7, 0, -1):




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".


8l
un modulo da 8 led
m7

 
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:
  • riquadro ocra: accensione in sequenza oraria di 8 led (0/./7);
  • riquadro blu: accensione in sequenza antioraria di 8 led;
  • riquadro verde: accensione in seq. oraria dei led pari. La riga con if... fa accendere solo i led pari;
  • riquadro viola: accensione in senso antior. dei soli led dispari, ottenuto dal comando if...

Questa routine può essere utile per imparare alcune utili funzioni dell'istruzione for... in...


8x4

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.




m14
m16



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.

m17

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.









Per contatti: etdiy@centroanahata.it