4.3.7 Régulation de la température et de l’humidité

4.3.7.1 Aperçu

Img

Dans ce projet, nous allons montrer comment construire un système de régulation de la température et de l’humidité avec une carte micro:bit, le capteur de température et d’humidité XHT11, un moteur 130, un module d’atomisation et un affichage OLED.

Le système mesure la température et l’humidité ambiantes grâce au capteur XHT11, et les ajuste en contrôlant la rotation du ventilateur et la pulvérisation de brume d’eau par le module d’atomisation selon les besoins. Lorsque la température ou l’humidité dépasse le seuil réglé, il allume le ventilateur et pulvérise de la brume d’eau depuis le module d’atomisation. Parallèlement, l’affichage OLED montrera la température et l’humidité actuelles en temps réel.

Étant donné qu’il peut réguler la température et l’humidité, il est largement appliqué aux projets nécessitant le contrôle de ces paramètres.

Img

4.3.7.2 Connaissances sur les composants

Img

Capteur de température et d’humidité XHT11

Img

Le capteur de température et d’humidité XHT11 fournit des signaux numériques. Il acquiert et convertit des signaux analogiques, et détecte la température et l’humidité pour garantir une excellente stabilité à long terme et une haute fiabilité. De plus, il contient un capteur d’humidité résistif de haute précision et un capteur de température thermosensible résistif, et est connecté à un microcontrôleur 8 bits hautes performances.

Mode de communication du XHT11 :

Le XHT11 adopte une communication bus simplifiée à fil unique. Un bus unique signifie qu’il n’y a qu’une seule ligne de données, donc les échanges de données et le contrôle dans le système se font tous ici.

  • Définition de la transmission des bits de données sur le bus unique :

    • Format des données sur le bus unique : 40 bits de données sont transmis à la fois, avec les bits les plus significatifs en premier.

    • 8 bits entier humidité + 8 bits décimal humidité + 8 bits entier température + 8 bits décimal température + 8 bits de parité. Notez que la partie décimale de l’humidité est 0.

  • Définition du bit de parité :

    • 8 bits entier humidité + 8 bits décimal humidité + 8 bits entier température + 8 bits décimal température. Les 8 bits de parité sont les 8 derniers bits du résultat.

Img

Diagramme temporel des données :

Après que l’hôte (MCU) envoie un signal de démarrage une fois, le XHT11 passe du mode basse consommation au mode haute vitesse. Une fois le signal de démarrage de l’hôte terminé, le XHT11 envoie un signal de réponse, sort 40 bits de données et effectue une acquisition de signal. La transmission du signal est montrée ci-dessous.

Img

⚠️ Remarque : Les données de température et d’humidité lues par l’hôte depuis le XHT11 sont toujours la valeur de mesure précédente. Si l’intervalle entre deux mesures est long, veuillez lire deux fois consécutivement et prendre la deuxième valeur obtenue comme valeur en temps réel.

Schéma :

Img

Paramètres :

  • Tension de fonctionnement : DC 3.3V~5V

  • Courant de fonctionnement : (Max)2.5mA@5V

  • Puissance maximale : 0.0125W

  • Plage de température : -25 ~ +60°C (±2℃)

  • Plage d’humidité : 5 ~ 95%R (précision de ±5%RH autour de 25 °C)

  • Signal de sortie : bus unique numérique bidirectionnel

Module d’atomisation

Img

Le module d’atomisation est composé d’un pilote et d’une feuille d’atomisation, qui atomise l’eau. Il peut être contrôlé par un microcontrôleur ou par des boutons manuels.

Principe de fonctionnement : Le module d’atomisation utilise généralement la technologie ultrasonique pour générer de la brume d’eau. Il contient une plaque piézoélectrique, qui commence à vibrer lorsqu’une tension haute fréquence lui est appliquée. La vibration rassemble de petites gouttelettes d’eau à la surface, qui sont ensuite dispersées pour former une fine brume d’eau.

Qualité de la brume : Ce module peut convertir efficacement l’eau en minuscules particules d’eau, généralement entre 1 et 5 microns. Cette fine brume a plus de chances d’évaporer et de se diffuser dans l’air, agissant ainsi comme un humidificateur efficace.

⚠️ Attention :

1. Après la mise sous tension, la feuille d’atomisation doit être placée dans l’eau. Si elle reste longtemps à l’air libre, la feuille chauffera et sera brûlée.

2. Placez doucement la feuille d’atomisation à la surface de l’eau. Si elle est submergée, elle ne produira pas de brume d’eau.

Paramètres :

  • Tension de fonctionnement : DC 3.3 ~ 5V

  • Trou d’installation : diamètre de 4.8mm, espacement de 16mm

  • Dimensions : 31mm de longueur, 23mm de largeur, et 8mm de hauteur

  • Poids : 4.5g

  • Température de fonctionnement : -25°C à +60°C

  • Interface du module : broches courbées 3 broches, espacement de 2.54

  • Interface de la feuille d’atomisation : prise femelle PH2.0

  • Fonction : utilisé pour transformer l’eau en fine brume d’eau et la libérer dans l’air

Dimensions de la feuille d’atomisation :

Img

⚠️ Remarque : Ne tirez pas sur le fil de la feuille autant que possible, sinon son point de soudure risque de se détacher.

Instructions d’utilisation du module d’atomisation :

Il existe deux modes de contrôle : par boutons et par programmation MCU.

Contrôle par bouton : Appuyez sur le bouton pour allumer le module d’atomisation. Appuyez de nouveau pour l’éteindre.

Contrôle par programmation MCU : Simule l’appui d’un bouton. En condition normale il sort un niveau haut et passe à bas lorsqu’on appuie. Relâchez le bouton et il retourne à un niveau haut.

Donc, en utilisant un MCU, nous n’avons qu’à envoyer un bref niveau bas au module, comme si l’on appuyait sur le bouton. Nous pouvons contrôler le temps de démarrage ou de pause du module d’atomisation en ajustant la durée du niveau haut.

Installer la tige en coton :

1. Imbibez complètement la tige en coton d’eau (trouvez un contenant de grande capacité pour couvrir toute la tige avec de l’eau, et faites tremper pendant plus de 5 minutes pour s’assurer qu’elle absorbe entièrement l’eau).

Img

2. Installez la feuille d’atomisation à l’intérieur du support en plastique. Notez le sens de la feuille. Placez son fil dans la rainure du support.

Img

Img

3. Fermez l’autre côté du support en plastique.

Img

4. Insérez la tige en coton au milieu du support. Elle doit être insérée complètement jusqu’à toucher la feuille d’atomisation.

Img

5. Connectez la feuille d’atomisation à la prise femelle PH2.0 du module, comme indiqué ci-dessous.

Img

6. Connectez le module d’atomisation au micro:bit shield et connectez une alimentation externe.

Img

7. Immergez à nouveau la tige en coton dans l’eau pendant plus de 3 minutes. L’eau doit couvrir la tige autant que possible, sans déborder.

Img

8. Appuyez sur le bouton noir du module, et vous verrez qu’il commence à pulvériser. La brume est pulvérisée pendant 3 secondes. Appuyez de nouveau pour l’éteindre.

⚠️ Attention : La feuille d’atomisation ne doit pas fonctionner longtemps, chaque fonctionnement ne doit pas dépasser 5 secondes. Il est préférable d’attendre 1 à 2 minutes jusqu’à ce que la tige en coton soit imbibée d’eau avant de continuer. Sinon, elle risque de brûler.

Img

Img

Img

4.3.7.3 Composants requis

Img

Img

Img

micro:bit V2 main board ×1

micro:bit shield ×1

atomization module ×1

Img

Img

Img

XHT11 temperature and
humidity sensor ×1

OLED display ×1

130 motor ×1

Img

Img

Img

micro USB cable ×1

4 pin wire ×2

3 pin wire ×2

Img

Img

Img

fan ×1

battery holder ×1

AA battery(self-prepared) ×6

4.3.7.4 Schéma de câblage

⚠️ Lors du câblage, veuillez faire attention à la couleur des fils.

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
humidity sensor

wire color

micro:bit shield pin

micro:bit board pin

G

black

G

G

V

red

V1

V

S

yellow

0

P0

Img

4.3.7.5 Flux du code

Img

4.3.7.6 Code de test

⚠️ Astuce 1 : Avant de télécharger le code sur la carte Microbit, veuillez importer le fichier de bibliothèque “oled_ssd1306.py” et le fichier de bibliothèque “DHT11.py” en vous référant à Import Library on MU” .

⚠️ Astuce 2 : Les seuils 30 et 70 dans la condition if() peuvent être modifiés selon la situation réelle.

Code complet :

'''
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
'''
# importer les bibliothèques associées
from microbit import *
from oled_ssd1306 import *
from DHT11 import *

# initialiser et effacer l'oled
initialize()
clear_oled()

sensor = DHT11(pin0)  # définir la broche du capteur de température et d'humidité

# Ajouter un temps d'attente d'initialisation
display.show(Image.ALL_CLOCKS, wait=False, loop=True)
sleep(3000)  # Donner au capteur 3 secondes pour se stabiliser
display.clear()

pin16.write_digital(1) # mettre la broche P16 à l'état haut

# Ajouter un compteur de lecture
read_count = 0
last_valid_temp = 0
last_valid_humid = 0

while True:
    # Tenter de lire plusieurs fois
    for i in range(3):
        sensor.read() # lire les valeurs de température et d'humidité
        if sensor.temp != 0 or sensor.humid != 0:
            break
        sleep(1000)
    T = sensor.temp  # stocker la température dans T
    H = sensor.humid  # stocker l'humidité dans H

    # Vérifier la validité des données
    if T == 0 and H == 0 and read_count < 5:
        # Les premières lectures peuvent être 0. Continuer d'essayer
        read_count += 1
        add_text(0, 0, "Initializing...")
        add_text(0, 2, "Attempt: " + str(read_count))
        sleep(1000)
        continue

    # Si les données sont valides, mettre à jour la dernière valeur valide
    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  # La lecture a été effectuée avec succès

    # Utiliser les données valides (si la valeur actuelle vaut 0, utiliser la dernière valeur valide
    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")   # Afficher la valeur de la température
    add_text(0, 2, "Humid: " + str(display_humid) + " %RH")   # Afficher la valeur de l'humidité

    # logique de contrôle
    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)

Img

Brève explication :

① Importer les bibliothèques microbit, oled_ssd1306 et DHT11.

from microbit import *
from oled_ssd1306 import *
from DHT11 import *

② Initialiser les pixels de l’OLED, effacer l’OLED.

initialize()
clear_oled()

③ Initialiser la broche du capteur de température et d’humidité XHT11.

sensor = DHT11(pin0)  # définir la broche du capteur de température et d'humidité

④ Définir des variables et leur attribuer la valeur initiale 0.

read_count = 0
last_valid_temp = 0
last_valid_humid = 0

⑤ Lire plusieurs fois la température et l’humidité, et assigner la température lue à la variable T et l’humidité à la variable H.

for i in range(3):
    sensor.read() # lire les valeurs de température et d'humidité
     if sensor.temp != 0 or sensor.humid != 0:
        break
    sleep(1000)
T = sensor.temp  # stocker la température dans T
H = sensor.humid  # stocker l'humidité dans H

⑥ Vérifier la validité des valeurs de température et d’humidité.

if T == 0 and H == 0 and read_count < 5:
   # Les premières lectures peuvent être 0. Continuer d'essayer
   read_count += 1
   add_text(0, 0, "Initializing...")
   add_text(0, 2, "Attempt: " + str(read_count))
   sleep(1000)
   continue

⑦ Si elles sont valides, mettre à jour la dernière valeur valide.

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  # La lecture a été effectuée avec succès

⑧ Utiliser les données valides (si la valeur actuelle vaut 0, utiliser la dernière valeur valide).

display_temp = T if T != 0 else last_valid_temp
display_humid = H if H != 0 else last_valid_humid

⑨ Afficher la température et l’humidité détectées par le capteur XHT11 sur l’OLED.

add_text(0, 0, "Temper: " + str(display_temp) + " C")   # Afficher la valeur de la température
add_text(0, 2, "Humid: " + str(display_humid) + " %RH")   # Afficher la valeur de l'humidité

⑩ Instruction conditionnelle : if()…else…

Si la température détectée est supérieure à 30℃ ou l’humidité est supérieure à 70%RH, le ventilateur s’arrêtera après avoir tourné pendant 2 secondes. Ensuite, le module d’atomisation fonctionne et pulvérise de la brume d’eau pour réguler la température et l’humidité ambiante. Parallèlement, l’OLED affiche “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)

Sinon, le ventilateur et le module d’atomisation ne fonctionneront pas, et l’OLED affichera “Normal State”.

else:
    add_text(0, 4, "Normal State")
    pin2.write_analog(0)
    pin13.write_digital(0)
    pin16.write_digital(1)

⑪ Délai de 500ms (0.5s)

sleep(500)

4.3.7.7 Résultat du test

Img

Après avoir réalisé le câblage et alimenté via le câble micro USB, connectez une alimentation externe (6 piles AA) pour assurer une alimentation suffisante, et cliquez sur “Flash” pour télécharger le code sur la carte micro:bit.

Img

Après avoir téléversé le code de test, appuyez sur le bouton reset au dos du micro:bit.

Img

La matrice de LED 5×5 sur la carte micro:bit affiche le motif de pointeur tournant, l’OLED affiche les informations d’initialisation du capteur de température et d’humidité XHT11, puis l’OLED affiche en temps réel les valeurs de température et d’humidité détectées par le XHT11.

Si la température détectée est supérieure à 30℃ ou que l’humidité est supérieure à 70%RH, le ventilateur s’arrêtera après avoir tourné pendant 2 secondes. Ensuite, le module d’atomisation fonctionne et pulvérise de la brume d’eau pour réguler la température et l’humidité ambiantes. Parallèlement, l’OLED affiche “Cooling/Humidifying”. Sinon, le ventilateur et le module d’atomisation ne fonctionneront pas, et l’OLED affichera “Normal State”.

Img

⚠️ Remarque : Les blocs de construction dans l’expérience ne sont pas inclus dans ce kit.

(Astuce : Si aucun résultat n’est observé, veuillez appuyer sur le bouton reset de la carte micro:bit.)

Img