4.3.7 Regolazione della temperatura e dell’umidità
4.3.7.1 Panoramica

In questo progetto, introdurremo come costruire un sistema di regolazione della temperatura e dell’umidità con una scheda micro:bit, il sensore di temperatura e umidità XHT11, un motore 130, un modulo di atomizzazione e un display OLED.
Il sistema misura la temperatura e l’umidità ambientale tramite il sensore XHT11 e le regola controllando la rotazione della ventola e la nebulizzazione d’acqua tramite il modulo di atomizzazione secondo necessità. Quando la temperatura o l’umidità supera la soglia impostata, attiva la ventola e spruzza la nebbia d’acqua dal modulo di atomizzazione. Nel frattempo, l’OLED visualizza in tempo reale la temperatura e l’umidità correnti.
Poiché è in grado di regolare temperatura e umidità, è ampiamente applicato a progetti che richiedono il controllo di tali parametri.

4.3.7.2 Conoscenze sui componenti

Sensore di temperatura e umidità XHT11

Il sensore di temperatura e umidità XHT11 fornisce segnali digitali. Acquisisce e converte segnali analogici, rilevando temperatura e umidità per garantire un’eccellente stabilità a lungo termine e alta affidabilità. Inoltre, contiene un sensore di umidità resistivo ad alta precisione e un sensore di temperatura resistivo termico, ed è collegato a un microcontrollore ad 8 bit ad alte prestazioni.
Modalità di comunicazione XHT11:
L’XHT11 adotta una comunicazione semplificata su bus singolo. Un bus singolo significa che c’è una sola linea dati, quindi lo scambio di dati e il controllo nel sistema vengono effettuati qui.
Definizione della trasmissione dei bit sul bus singolo:
Formato dei dati su bus singolo: vengono trasmessi 40 bit di dati alla volta, con i bit più alti in uscita per primi.
8 bit umidità intera + 8 bit umidità decimale + 8 bit temperatura intera + 8 bit temperatura decimale + 8 bit di parità. Nota: la parte decimale dell’umidità è 0.
Definizione del bit di parità:
8 bit umidità intera + 8 bit umidità decimale + 8 bit temperatura intera + 8 bit temperatura decimale. L’ultimo byte di 8 bit è il bit di parità.

Diagramma della serie temporale dei dati:
Dopo che l’host (MCU) invia una volta un segnale di avvio, l’XHT11 passa dalla modalità a basso consumo alla modalità ad alta velocità. Una volta terminato il segnale di avvio dell’host, l’XHT11 invia un segnale di risposta, esporta 40 bit di dati ed esegue l’acquisizione del segnale. La trasmissione del segnale è mostrata sotto.

⚠️ Nota: i dati di temperatura e umidità letti dall’host dall’XHT11 sono sempre il valore della misurazione precedente. Se l’intervallo tra due misurazioni è lungo, si consiglia di leggere due volte consecutivamente e prendere il secondo valore ottenuto come valore in tempo reale.
Schema:

Parametri:
Tensione di esercizio: DC 3.3V~5V
Corrente di esercizio: (Max)2.5mA@5V
Potenza massima: 0.0125W
Intervallo di temperatura: -25 ~ +60°C (±2℃)
Intervallo di umidità: 5 ~ 95%R (accuratezza di ±5%RH intorno a 25 °C)
Segnale di uscita: bus singolo digitale bidirezionale
Modulo di atomizzazione

Il modulo di atomizzazione è composto da un driver e una lamina di atomizzazione, che atomizza l’acqua. Può essere controllato da un microcontrollore o tramite pulsanti manuali.
Principio di funzionamento: il modulo di atomizzazione adotta generalmente la tecnologia ultrasonica per generare la nebbia d’acqua. Contiene una lastra in ceramica piezoelettrica, che inizia a vibrare quando viene applicata una tensione ad alta frequenza. La vibrazione raccoglie piccole gocce d’acqua sulla superficie, che vengono poi disperse per formare fini nebulizzazioni.
Qualità della nebbia: questo modulo può convertire efficacemente l’acqua in piccole particelle, solitamente da 1 a 5 micron. Questa nebbia fine tende ad evaporare e diffondersi nell’aria, funzionando come un umidificatore efficace.
⚠️ Attenzione:
1. Dopo l’accensione, la lamina di atomizzazione deve essere posta in acqua. Se rimane esposta all’aria per molto tempo, la lamina si riscalderà e potrebbe bruciarsi.
2. Posizionare delicatamente la lamina di atomizzazione sulla superficie dell’acqua. Se è completamente sommersa, non genererà nebbia.
Parametri:
Tensione di esercizio: DC 3.3 ~ 5V
Foro di installazione: diametro 4.8mm, distanza 16mm
Dimensioni: 31mm lunghezza, 23mm larghezza, 8mm altezza
Peso: 4.5g
Temperatura di esercizio: -25°C a +60°C
Interfaccia modulo: pin curvi a 3 pin, passo 2.54
Interfaccia lamina di atomizzazione: PH2.0 femmina
Funzione: utilizzato per trasformare l’acqua in fine nebbia e rilasciarla nell’aria
Dimensioni della lamina di atomizzazione:

⚠️ Nota: Non tirare il cavo della lamina il più possibile, altrimenti il punto di saldatura potrebbe staccarsi.
Istruzioni per l’uso del modulo di atomizzazione:
Ci sono due modalità di controllo: tramite pulsanti e tramite programmazione MCU.
Controllo a pulsante: premere il pulsante per accendere il modulo di atomizzazione. Premere nuovamente per spegnerlo.
Controllo tramite MCU: simula la pressione di un pulsante. In condizioni normali fornisce un livello alto e quando viene premuto fornisce un livello basso. Rilasciando il pulsante torna a livello alto.
Pertanto, quando si usa l’MCU, è necessario solo fornire un breve impulso a livello basso al modulo, come premere il pulsante. Possiamo controllare il tempo di avvio o pausa del modulo di atomizzazione regolando la durata del livello alto.
Installare l’asta di cotone:
1. Immergere completamente l’asta di cotone in acqua (trovare un contenitore ad alta capacità che copra l’intera asta con acqua e lasciarla in ammollo per più di 5 minuti per assicurare che assorba completamente l’acqua).

2. Installare la lamina di atomizzazione all’interno della staffa di plastica. Prestare attenzione alla direzione della lamina. Posizionare il cavo nella scanalatura della staffa.


3. Chiudere l’altro lato della staffa di plastica.

4. Inserire l’asta di cotone nel centro della staffa. Deve essere inserita completamente fino a toccare la lamina di atomizzazione.

5. Collegare la lamina di atomizzazione al terminale femmina PH2.0 del modulo, come mostrato sotto.

6. Collegare il modulo di atomizzazione allo shield micro:bit e collegare un’alimentazione esterna.

7. Immergere nuovamente l’asta di cotone in acqua per oltre 3 minuti. L’acqua dovrebbe coprire l’asta il più possibile, ma non deve traboccare.

8. Premere il pulsante nero sul modulo, e si vedrà iniziare la nebulizzazione. La nebbia viene spruzzata per 3 secondi. Premere nuovamente il pulsante per spegnerla.
⚠️ Attenzione: la lamina di atomizzazione non dovrebbe funzionare a lungo; ogni operazione non dovrebbe superare i 5 secondi. È preferibile fermarsi per 1-2 minuti finché l’asta di cotone non sia di nuovo piena d’acqua prima di continuare. Altrimenti potrebbe bruciarsi.



4.3.7.3 Componenti richiesti
|
|
|
|---|---|---|
scheda principale micro:bit V2 ×1 |
micro:bit shield ×1 |
modulo di atomizzazione ×1 |
|
|
|
sensore di temperatura e |
OLED display ×1 |
motore 130 ×1 |
|
|
|
cavo micro USB ×1 |
4 pin wire ×2 |
3 pin wire ×2 |
|
|
|
ventola ×1 |
supporto per batterie ×1 |
batterie AA(self-prepared) ×6 |
4.3.7.4 Schema di collegamento
⚠️ Quando si eseguono i collegamenti, prestare attenzione al colore dei fili.
130 motor |
wire color |
micro:bit shield pin |
micro:bit board pin |
|---|---|---|---|
G |
black |
G |
G |
V |
red |
V2 |
V |
IN+ |
blue |
2 |
P2 |
IN- |
green |
13 |
P13 |
OLED display |
wire color |
micro:bit shield pin |
micro:bit board pin |
|---|---|---|---|
GND |
black |
G |
G |
VCC |
red |
V2 |
V |
SDA |
blue |
20 |
P20 |
SCL |
green |
19 |
P19 |
atomization module |
wire color |
micro:bit shield pin |
micro:bit board pin |
|---|---|---|---|
G |
black |
G |
G |
V |
red |
V2 |
V |
S |
yellow |
16 |
P16 |
XHT11 temperature and |
wire color |
micro:bit shield pin |
micro:bit board pin |
|---|---|---|---|
G |
black |
G |
G |
V |
red |
V1 |
V |
S |
yellow |
0 |
P0 |

4.3.7.5 Flusso del codice

4.3.7.6 Codice di prova
⚠️ Suggerimento 1: Prima di scaricare il codice sulla scheda Microbit, si prega di importare il file di libreria “oled_ssd1306.py” e il file di libreria “DHT11.py” facendo riferimento a “Importa libreria su MU” .
⚠️ Suggerimento 2: le soglie 30 e 70 nella condizione if() possono essere modificate in base alla situazione reale.
Codice completo:
'''
Theme: Air temperature and humidity regulation
Function: OLED displays temperature and humidity, XHT11 sensor controls the motor and the atomization module to regulate the environment temperature and humidity
Compiling IDE: MU 1.2.0
Author: https://docs.keyestudio.com
'''
# importa le librerie correlate
from microbit import *
from oled_ssd1306 import *
from DHT11 import *
# inizializza e cancella l'OLED
initialize()
clear_oled()
sensor = DHT11(pin0) # imposta i pin per temperatura e umidità
# Aggiungi un tempo di attesa per l'inizializzazione
display.show(Image.ALL_CLOCKS, wait=False, loop=True)
sleep(3000) # Dai al sensore 3 secondi per stabilizzarsi
display.clear()
pin16.write_digital(1) # imposta il pin P16 ad alto livello
# Aggiungi un contatore di letture
read_count = 0
last_valid_temp = 0
last_valid_humid = 0
while True:
# Prova a leggere più volte
for i in range(3):
sensor.read() # leggi i valori di temperatura e umidità
if sensor.temp != 0 or sensor.humid != 0:
break
sleep(1000)
T = sensor.temp # memorizza i valori di temperatura in T
H = sensor.humid # memorizza i valori di umidità in H
# Controlla la validità dei dati
if T == 0 and H == 0 and read_count < 5:
# Le prime letture potrebbero essere 0. Continua a provare
read_count += 1
add_text(0, 0, "Initializing...")
add_text(0, 2, "Attempt: " + str(read_count))
sleep(1000)
continue
# Se i dati sono validi, aggiorna l'ultimo valore valido
if T != 0 or H != 0:
last_valid_temp = T if T != 0 else last_valid_temp
last_valid_humid = H if H != 0 else last_valid_humid
read_count = 10 # Il valore è stato letto correttamente
# Usa i dati validi (se il valore corrente è 0, usa l'ultimo valore valido
display_temp = T if T != 0 else last_valid_temp
display_humid = H if H != 0 else last_valid_humid
clear_oled()
add_text(0, 0, "Temper: " + str(display_temp) + " C") # Visualizza il valore della temperatura
add_text(0, 2, "Humid: " + str(display_humid) + " %RH") # Visualizza il valore dell'umidità
# logica di controllo
if display_temp > 30 or display_humid > 70:
add_text(0, 4, "Cooling/Humidifying")
pin2.write_analog(500)
pin13.write_digital(0)
sleep(2000)
pin2.write_analog(0)
pin13.write_digital(0)
sleep(500)
pin16.write_digital(0)
sleep(200)
pin16.write_digital(1)
sleep(3000)
pin16.write_digital(0)
sleep(200)
pin16.write_digital(1)
sleep(1000)
else:
add_text(0, 4, "Normal State")
pin2.write_analog(0)
pin13.write_digital(0)
pin16.write_digital(1)
sleep(500)

Breve spiegazione:
① Importare le librerie microbit, oled_ssd1306 e DHT11.
from microbit import *
from oled_ssd1306 import *
from DHT11 import *
② Inizializzare i pixel dell’OLED, cancellare l’OLED.
initialize()
clear_oled()
③ Inizializzare il pin del sensore di temperatura e umidità XHT11.
sensor = DHT11(pin0) # imposta i pin per temperatura e umidità
④ Definire le variabili e impostare i loro valori iniziali a 0.
read_count = 0
last_valid_temp = 0
last_valid_humid = 0
⑤ Leggere più volte la temperatura e l’umidità, e assegnare la temperatura letta alla variabile T e l’umidità alla variabile H.
for i in range(3):
sensor.read() # leggi i valori di temperatura e umidità
if sensor.temp != 0 or sensor.humid != 0:
break
sleep(1000)
T = sensor.temp # memorizza i valori di temperatura in T
H = sensor.humid # memorizza i valori di umidità in H
⑥ Verificare la validità dei valori di temperatura e umidità.
if T == 0 and H == 0 and read_count < 5:
# Le prime letture potrebbero essere 0. Continua a provare
read_count += 1
add_text(0, 0, "Initializing...")
add_text(0, 2, "Attempt: " + str(read_count))
sleep(1000)
continue
⑦ Se sono validi, aggiornare l’ultimo valore valido.
if T != 0 or H != 0:
last_valid_temp = T if T != 0 else last_valid_temp
last_valid_humid = H if H != 0 else last_valid_humid
read_count = 10 # Il valore è stato letto correttamente
⑧ Usare i dati validi (se il valore corrente è 0, usare l’ultimo valore valido).
display_temp = T if T != 0 else last_valid_temp
display_humid = H if H != 0 else last_valid_humid
⑨ Visualizzare sul display OLED la temperatura e l’umidità rilevate dal sensore XHT11.
add_text(0, 0, "Temper: " + str(display_temp) + " C") # Visualizza il valore della temperatura
add_text(0, 2, "Humid: " + str(display_humid) + " %RH") # Visualizza il valore dell'umidità
⑩ Istruzione di giudizio: if()…else…
Se la temperatura rilevata è superiore a 30℃ o l’umidità è superiore a 70%RH, la ventola si fermerà dopo aver ruotato per 2 secondi. Quindi il modulo di atomizzazione lavora e spruzza la nebbia d’acqua per regolare la temperatura e l’umidità ambientali. Nel frattempo, l’OLED mostra “Cooling/Humidifying”.
if display_temp > 30 or display_humid > 70:
add_text(0, 4, "Cooling/Humidifying")
pin2.write_analog(500)
pin13.write_digital(0)
sleep(2000)
pin2.write_analog(0)
pin13.write_digital(0)
sleep(500)
pin16.write_digital(0)
sleep(200)
pin16.write_digital(1)
sleep(3000)
pin16.write_digital(0)
sleep(200)
pin16.write_digital(1)
sleep(1000)
Altrimenti, la ventola e il modulo di atomizzazione non funzioneranno, e l’OLED visualizzerà “Normal State”.
else:
add_text(0, 4, "Normal State")
pin2.write_analog(0)
pin13.write_digital(0)
pin16.write_digital(1)
⑪ Ritardo 500ms(0.5s)
sleep(500)
4.3.7.7 Risultato del test

Dopo aver effettuato i collegamenti e aver alimentato tramite cavo micro USB, collegare l’alimentazione esterna (6 batterie AA) per garantire una potenza sufficiente, e cliccare “Flash” per scaricare il codice sulla scheda micro:bit.

Dopo aver caricato il codice di prova, premere il pulsante di reset sul retro del micro:bit.

La matrice di LED 5×5 sulla scheda micro:bit visualizza il pattern del puntatore rotante, l’OLED mostra le informazioni di inizializzazione del sensore di temperatura e umidità XHT11, e successivamente l’OLED visualizza in tempo reale il valore di temperatura e umidità rilevato dal sensore XHT11.
Se la temperatura rilevata è superiore a 30℃ o l’umidità è superiore a 70%RH, la ventola si fermerà dopo aver ruotato per 2 secondi. Quindi il modulo di atomizzazione lavora e spruzza la nebbia d’acqua per regolare la temperatura e l’umidità ambientali. Nel frattempo, l’OLED mostra “Cooling/Humidifying”. Altrimenti, la ventola e il modulo di atomizzazione non funzioneranno, e l’OLED visualizzerà “Normal State”.

⚠️ Nota: i blocchi di costruzione nell’esperimento non sono inclusi in questo kit.
(Suggerimento: Se non si osserva alcun risultato, premere il pulsante di reset della scheda micro:bit.)












