Le capteur DHT22 (aussi appelé AM2302) permet de mesurer l'humidité relative de l'air ainsi que la température ambiante. Nous l'utilisons aujourd'hui avec un Raspberry Pi programmé en Python.
Le capteur comporte un condensateur dont la capacité dépend de l'humidité. Puisqu'il faut également connaître la température pour pouvoir calculer l'humidité relative, le DHT22 comporte également un capteur de température intégré.J'ai utilisé un DHT22 qui est incorporé à un module comportant 3 broches: + , out et -. Ce module comporte déjà une résistance de tirage entre les broches + et OUT. Si ce n'est pas le cas pour le capteur que vous utilisez, il est recommandé de placer une résistance de 4,7 kΩ ou 10 kΩ environ entre DATA et VCC.
Pour ma part, j'ai branché mon module au Raspberry Pi de la façon suivante:
- Broche + du DHT22: sortie 3,3 V du Raspberry Pi
- Broche out du DHT22: broche GPIO 4 du Raspberry Pi
- Broche - du DHT22: broche GND du Raspberry Pi
pip3 install adafruit-blinkapip3 install adafruit-circuitpython-dhtsudo apt-get install libgpiod2
Le script ci-dessous, inspiré d'un exemple fourni par Adafruit, affiche la température, l'humidité relative, le point de rosée et l'indice humidex.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
''' | |
Mesure de la température et de l'humidité avec | |
un capteur DHT22 branché à un Rasbperry Pi. | |
Nécessite la bibliothèque d'Adafruit. | |
Pour plus d'infos: | |
https://electroniqueamateur.blogspot.com/2020/11/mesurer-la-temperature-et-lhumidite.html | |
''' | |
import time | |
import board | |
import adafruit_dht | |
import math | |
dhtDevice = adafruit_dht.DHT22(board.D4, use_pulseio=False) | |
while True: | |
try: | |
temperature = dhtDevice.temperature | |
humidite = dhtDevice.humidity | |
# calcul du point de rosée (formule de Heinrich Gustav Magnus-Tetens) | |
alpha = math.log(humidite / 100.0) + (17.27 * temperature) / (237.3 + temperature) | |
rosee = (237.3 * alpha) / (17.27 - alpha) | |
#calcul de l'humidex | |
humidex = temperature + 0.5555 * (6.11 * math.exp(5417.753 * (1 / 273.16 - 1 / (273.15 + rosee))) - 10) | |
print("Temperature: {:.1f} C Humidite: {}% Rosee: {:.1f} C Humidex: {:.1f}" | |
.format(temperature , humidite, rosee , humidex)) | |
except RuntimeError as error: | |
#print(error.args[0]) | |
continue | |
except Exception as error: | |
dhtDevice.exit() | |
raise error | |
time.sleep(2.0) | |
-
Si vous décommentez la ligne 38, un message d'erreur sera affiché en cas d'échec de la lecture du capteur. Dans mon cas, j'ai eu la surprise de constater qu'environ une lecture sur quatre échouait avec une de ces deux mentions: "A full buffer was not returned. Try again." ou encore "Checksum did not validate. Try again.". Après avoir vainement tenté de trouver une façon d'éviter ces erreurs, j'ai fini par me résigner et à simplement ne pas afficher le message d'erreur. De toute façon, la température et l'humidité sont des paramètres qui varient lentement, on a donc tout le temps de reprendre notre mesure si elle a échoué.
À lire également:
J'ai déjà utilisé un DHT22 avec un Arduino Uno.
Ttès bien
RépondreSupprimer