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 DHT11/DHT22

Il sensore DHT11 (o DHT22) è usato in moltissimi programmi per Rasberry, Arduino, ESPxxx, in quanto è molto versatile, robusto e di un costo veramente modesto.
in genere è già montato su di un modulo a tre pin (sigla KY-015 o HW-507), molto utile in quanto non richiede componenti aggiuntivi per essere utilizzato.

11





Come inserire il sensore sulla BDS
In questo programma il sensore di temperatura e umidità è stato inserito sul connettore DG3 (GPIO21) della BDS. Fare attenzione a inserirlo con il giusto ordine di piedini. Il simbolo "-" del sensore deve essere connesso a "GND" della basetta; "S" invece a "P21". Un errato collegamento del sensore alla BDS potrebbe rapidamente danneggiarlo.

Nota 1: il "PWE Sel." permette di selezionare la tensione di alimentazione a 3,3v oppure a 5v per entrambi gli zoccoli DG2 e DG3. Selezionando la tensione +5v per questo sensore, potrebbe danneggiare gravemente il Rasberry. Portare molta attenzione a questa scelta.

Nota 2: il DHT11/DHT22 potrebbe essere anche collegato indifferentemente sugli zoccoli "DG1" o "DG2".  In questo caso però bisogna modificare il programma, inserendo "D19" per "DG1" e "D18" per "DG2" nella riga del programma in cui si determina il GPIO da usare.
In caso di necessità (come nel secondo programma) il sensore può essere inserito sul connettore ONE-WIRE (GPIO4)

d3
Come posizionare il sensore su DG3.



d7


Se si usa DG1, sostituire con "board.D19"; per DG2, digitare "board.D18"; con ONE-WIRE
, digitare "board.D4"





DHT11 o DHT22?

Spesso si acquista un "DHT11", ma quando lo si testa mostra dei dati sballati. Si può pensare che sia danneggiato. Ma quasi sempre se lo si dichiara come "DHT22", tutto funziona perfettamente! Sulla destra si vedono le righe di programma interessati: è sufficiente scommentare la riga di programma corretta.


dht

In questo caso si sta utilizzando un sensore DHT22





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 "dht11" in cui creeremo l'ambiente virtuale (che chiameremo "dht"), 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/dht11  per spostarsi nella cartella "dht11;
python3 -m venv dht             per creare l'ambiente virtuale "dht";
source dht/bin/activate         per attivare l'ambiente virtuale: apparirà (dht) all'inizio della nuova riga;
python3 -m pip install adafruit-circuitpython-dht      per installate la libreria necessaria

Ecco ciò che apparirà sul terminale:
2

Se la libreria sarà stata scaricata correttamente, apparirà alla fine dell'installazione un messaggio simile a questo:
3

Questa libreria è sufficiente per utilizzare i programmi "dht_1.py" e "dht_data.py".



Per utilizzare il terzo programma "dht_temp.py", è necessario scaricare una ulteriore libreria, "gpiozero".
Dopo aver attivato l'ambiente virtuale, lanciare il comando: "pip3 install gpiozero":
d3

Se tutto è andato abuon fine, apparirà una scritta simile:
d4



Per poter utilizzare il quarto programma, dht_web.py, è necessario installare due ulteriori librerie: "flask" e "smbus2, mentre non è necessario "gpiozero".

L'installazione delle librerie: sul terminale digitare "pip install flask"
d8
e se tutto è andato a buon fine apparirà:
d9

Per installare la libreria smbus2: digitare "pip install smbus2":
d10
se tutto è ok:
d12




Altri programmi che usano il sensore  DHT11/DHT22

Il sensore
DHT11/DHT22 puo essere presente in pagine di programmi che utilizzano anche altri moduli, come per esempio dei display.
Clicca qui per un primo programma con il display SSD1306 OLED.

Clicca qui per
un secondo programma con il display SSD1306 OLED.

Clicca qui per un terzo programma, con il display Led 1602.

Clicca qui per i programmi che utilizzano Thingspeak


Clicca qui per i programmi che utilizzano Telegram



Il primo programma: visualizzazione dei dati sul terminale

Il primo programma è molto semplice, in quanto mostra la temperatira (in gradi celsius e Fahrenheit) e l'umidità direttamente sul terminale. E' possibile, a causa della difficoltà di ricezione dei dati, che ogni tanto appaia il messaggio "Checksum did not validate. Try again". Non c'è da preoccuparsi, alle prossime letture tutto funzionerà perfettamente.
DHT11 è stato inserito nel connettore DG3. Per spostarlo su di un altro connettore, vedi qui.

h

la visualizzazione dei dati sul terminale.

Clicca qui per scaricare il file in formato ".zip"
Clicca qui per visualizzare il file.

Dopo aver scaricato il programma nella cartella selezionata (nel nostro caso, /Desktop/Projects/dht11), scompattare il programma dht_1.py e lanciarlo con il seguente comando: "python dht_1.py"

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




Il secondo programma: salvataggio dei dati in un file

Questo secondo programma è simile al precedente, in quanto mostra sempre i dati sul terminale. Però è decisamente più utile, in quanto salva i risultati della registrazione su di un file testo.
Nel programma di test la lettura dei dati avviene ogni 10 secondi riga 39: "time.sleep(10)"; però se si volesse aumentare i tempi tra una lettura e la successiva, si potrebbe
modificare la linea indicata, per esempio"time.sleep(1800)" se si volesse effettuare una lettura ogni 30 minuti, ecc.
I dati verranno scritti nel file "sensor_readings.txt".
Intervenendo sulle righe 16 e 17, è possibile cambiare il nome del file di dati.

data
la registrazione dei dati sul file


d2
Le righe in cui variare il nome del file di dati

Clicca qui per scaricare il file in formato ".zip"
Clicca qui per visualizzare il file.

Dopo aver scaricato il programma nella cartella selezionata (nel nostro caso, /Desktop/Projects/dht11), scompattare il programma dht_data.py e lanciarlo con il seguente comando: "python dht_data.py"

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








Il terzo programma: gestione di un condizionatore con DHT11

Questo programma può essere piuttosto interessante: infatti permette di controllare, in modo del tutto automatico, un condizionatore.
Immaginiamo di possedere un condizionatore con tre funzioni: condizionatore, deumidificatore, pompa di calore.
E' necessario inserire nel programma tre variabili:
- tmin: temperatura minima. Nel programma è stata impostata a 18°.
- tmax:
temperatura massima. Nel programma è stata impostata a 28°.
- hmax:
umidità massima. Nel programma è stata impostata al 65%.

d6

Naturalmente i valori impostati possono essere variati a piacere.
Il programma funziona nel modo seguente:
- se la temperatura è maggiore di tmax, si accende il condizionatore, attivando il relè su DG1 e il led rosso;

- se la temperatura è minore di tmin, si accende la pompa di calore, attivando il relè su DG2 e il led blu;
- se l'umidità è maggiore a hmax, si accende il deumidificatore, attivando il relè su DG3 e il led giallo;
- se la temperuatura è compresa tra tmin e tmax, e l'umidità inferiore a hmax, si accende semplicemente il led verde.
Nota 1: il deumidificatore si accende solamente se non è attivato il condizionatore o la pompa di calore, perchè non è possibile utilizzare due funzioni contemporaneamente, oltre che del tutto inutile. Una linea di programme evita questo problema.


Saranno inseriti i seguenti moduli:
- un sensore DHT11/DHT22 sul connettore one_wire (GPIO4);
- un relè (RL1) KY-019 - HW-482 sul connettore DG1 e un led rosso su Led1 - GPIO19;
- un relè (RL2) KY-019 - HW-482 sul connettore DG2 e un led blu su Led2 - GPIO18;
- un relè (RL3) KY-019 - HW-482 sul connettore DG3 e un led giallo su Led3 - GPIO21;
- un led verde su Led4 - GPIO12.

d7

Nota 2: quando si utilizzano dei relè, per evitare danni al Raspberry, è necessario utilizzare l'alimentazione esterna, poccegando un alimentatore e cambiando la posizione dei ponticelli (jumper)V3_SEL e V5_SEL da "INT." a "EXT."
Nota 3: al posto di relè singoli, è possibile utilizzare dei relè in batteria, come questi (solo per illustrazione). In questo caso "VCC" andrà collegato a +3v; "GND" a "GND; "R1" a "GPIO19"; "R2" a "GPIO18"; R3 a "GPIO21". "R4" in questo programma non verrà utilizzato.

Se il proprio condizionatore/pompa di calore può essere controllato dall'esterno (in genere è prevista una morsettiere per il controllo attraverso dei relè),
- collegare l'uscita del relè presente su DG1 alla funzione condizionatore;
- collegare l'uscita del relè presente su DG2 alla funzione pompa di calore;
- collegare l'uscita del relè presente su DG3 alla funzione deumidificatore.


E' necessario inserire nel programma cinque variabili:
- tmin: temperatura minima. Nel programma è stata impostata a 18°.
- tmax:
temperatura massima. Nel programma è stata impostata a 28°.
- hmax:
umidità massima. Nel programma è stata impostata al 65%.
- gqual: qualità dell'aria. Nel programma è stata impostata a 80.000 Ohm.
- pmin: pressione atmosferica.
Nel programma è stata impostata a 1005 millibar.

5v

Per attuare le informazioni rilevate dal sensore, sono stati inseriti nel programma anche sei  variabili relative  all'accensione di sei led, e all'attivazione di quattro relè, per gestire il condizionatore e il purificatore d'aria:
ledg = LED(12) #led verde. Temperatura e umidità OK.
ledr = LED(19) #led rosso. Temperatura alta. Accendere il condizionatore.
ledb = LED(18) #led blu. Temperatura bassa. Accendere la pompa di calore
ledy = LED(21) #led giallo. Umidità troppo alta. Accedere il deumidificatore.
ledp = LED(5)  #led bianco. Pressione atmosferica bassa.
leda = LED(16) #led arancio. Cattiva qualità dell'aria. Accende il purificatore

6v

Se tutti i parametri sono buoni, si accende un led verde (Led4), ma non si attiva alcun relè.

Nel caso di pressione atmosferica bassa, si accende il led bianco (Led5), ma non si intraprende alcuna attività.
Perciò si possono attivare quattro relè:
- Condizionatore (DG1, GPIO19 - Led1, rosso). Si attiva se la temperauta è troppo alta.
- Pompa di calore (DG2, GPIO18 - Led2, blu).
Si attiva se la temperauta è troppo bassa.
- Deumidificatore (DG3, GPIO21 - Led3, giallo). Il deumidificatore si attiva solamente se non è attivo nè il condizionatore, nè la pompa di calore.
- Purificatore d'aria (AD1A, GPIO16 - led su AD1B, arancio). Si attiva se la qualità dell'aria è scarsa.

Nota 1: quando si utilizzano dei relè, per evitare danni al Raspberry, è necessario utilizzare l'alimentazione esterna, poccegando un alimentatore e cambiando la posizione dei ponticelli (jumper)V3_SEL e V5_SEL da "INT." a "EXT."
Nota 2: al posto di relè singoli, è possibile utilizzare dei relè in batteria, come questi (solo per illustrazione). In questo caso "VCC" andrà collegato a +3v; "GND" a "GND; "R1" a "GPIO19"; "R2" a "GPIO18"; R3 a "GPIO21". "R4" in questo programma non verrà utilizzato.


Attenzione: quando ai relè si collegano degli apparecchi da allacciare alla rete elettrica a 220v, si corrono gravi pericoli, anche mortali! In questi casi rivolgersi sempre a personale esperto e qualificato!


Clicca qui
per scaricare il file in formato ".zip"
Clicca qui per visualizzare il file.

Dopo aver scaricato il programma nella cartella selezionata (nel nostro caso, /Desktop/Projects/dht11), scompattare il programma dht_temp.py e lanciarlo con il seguente comando: "python dht_temp.py".

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







Il quarto programma: emissione di un segnale sonoro di allarme

In questo programma è inserito anche un buzzer (vedi pagina dedicata) sul connettore DG1 (GPIO19). Il segnale è impostato (a 432 Hz) quando la temperatura supera i 23 gradi. Naturalmente si può variare il controllo  a piacere; se si supera una certa temperatura, oppure se si scende oltre una soglia; se fossimo più interessati all'umidità si potrebbe momitorarla, oppure tenere sotto controllo entrambi i paramentri, magari cambiando la frequenza del buzzer per temperatura e umidità. Le righe aggiunte al programma di base sono veramente semplici.

dbz

Le righe relative all'allarme sonoro.


Clicca qui per scaricare il file in formato ".zip"
Clicca qui per visualizzare il file.

Dopo aver scaricato il programma nella cartella selezionata (nel nostro caso, /Desktop/Projects/dht11), scompattare il programma dht_buzz.py e lanciarlo con il seguente comando: "python dht_buzz.py".

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







La connessione dei moduli alla BDS

Poichè ci sono molti componenti sulla BDS, ho preferito scattare una foto con la disposizione dei componenti, evidenziati da un riquadro giallo.
i2
RL1: inserito sul connettore DG1; il led rosso inserito su Led1;
RL2: inserito sul connettore DG2; il led blu  inserito su Led2;
RL3: inserito sul connettore DG3; il led giallo inserito su Led3;
il sensore DHT11 inserito sul connettore One_wire
il led verde inserito su Led4.
Per tutti i componenti fare attenzione a rispettare la polarità.

Sono evidenziati anche i selettori "3V_SEL" e "5V_SEL". Impostarli entrambi su "EXT" e collegare
un alimentatore esterno. Come si vede, tutto il progetto è stato realizzato senza usare neppure un cavo!



Ecco come apparirebbero le connessioni se si volesse inserire una batteria di relè su scheda:

r4

Le connessioni dovranno essere effettute nel modo seguente:
- VCC della scheda relè su +3,v del connettore "Data" della BDS;
- GND della scheda relè su GND del connettore "Data" della BDS;
- RL1 della scheda relè su GPIO19 del connettore "Data" della BDS (condizionatore);
- RL2 della scheda relè su GPIO18 del connettore "Data" della BDS (pompa di calore);

- RL3 della scheda relè su GPIO21 del connettore "Data" della BDS (deumidificatore.





Il quarto progetto: visualizzazione dei dati su di un browser via rete WiFi

Il quarto progetto permette di vedere i dati rilevati dal sensore sul browser del proprio PC, a patto che siano sulla stessa rete WiFi.
Nel riquadro appare l'indirizzo di rete da digitare sul browser.


d13
d14

La visualizzazione dei dati sul proprio browser.


Il sensore DHT11 o DHT22 (vedi nel caso come modificare il programma) è stato inserito sul connettore DG1 (GPIO21).
Quando è stato lanciato il programma, digitare l'indirizzo indicato nel browser, e appariranno i dati rilevati dal sensore.
Purtroppo il programma non aggiorna automaticamente i dati; è necessario cliccare sulla freccina rotante.
A causa della lentezza con cui si rilevano i dati da DHT11, qualche volta può appariere sul browser un messaggio di errore. Cliccando sul simbolo di aggiornamento, appariranno i dati appena rilevati.

Clicca qui per scaricare il file in formato ".zip"
Clicca qui per visualizzare il file.

Dopo aver scaricato il programma nella cartella selezionata (nel nostro caso, /Desktop/Projects/dht11), scompattare il programma dht_temp.py e lanciarlo con il seguente comando: "python dht_web.py".

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





Per contatti: etdiy@centroanahata.it