Bonjour à tous,
Je vais vous présenter aujourd'hui le DHT22, un capteur de température et d'hygrométrie répandu très utile pour construire une petite station météo.
La datasheet fournie par Adafruit est disponible ici et en pièce jointe. Celle-ci indique que les capacités suivantes pour le capteur :
Quelques liens utiles :
- Documentation (Datasheet):
DHT22_Datasheet.pdf 406,57 Ko 499 téléchargement(s)
- Le composant Fritzing est disponible ici
- Modélisation 3D du composant : https://grabcad.com/...ensor-arduino-1
- Ce composant est entre autres contenu dans cette bibliothèque KiCad
J'avais déjà écrit rapidement une page (pour un ouvrage qui n'a pas encore été publié) sur l'utilisation de ce capteur, donc j'ai ressayé mes programmes avec ce montage (la résistance de pull-up est de 10k ohms):
Ce programme permet d'afficher les valeurs de température et le pourcentage d'humidité dans l'air sur l'interface Série d'Arduino IDE :
//Bibliothèque : #include "DHT.h" //Déclaration du DHT22: #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { //Initialisation de la liaison Série : Serial.begin(9600); Serial.println("Test du DHT22"); //Initialisation du capteur : dht.begin(); } void loop() { //Lecture des données : float h = dht.readHumidity(); //Lis le taux d'humidité float t = dht.readTemperature(); //Lis la température en Celsius //Affichage des valeurs : Serial.print("Humidite: "); Serial.print(h); Serial.print("% | Temperature: "); Serial.print(t); Serial.println(" degres celsius"); //Temporisation : delay(2000); }
Puis j'ai modifié un peu ce programme pour utiliser la fonction de Traceur Série d'Arduino pour afficher de belles courbes :
//Bibliothèque : #include "DHT.h" //Déclaration du DHT22: #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { //Initialisation de la liaison Série : Serial.begin(9600); //Serial.println("Test du DHT22"); //Initialisation du capteur : dht.begin(); } void loop() { //Lecture des données : float h = dht.readHumidity(); //Lis le taux d'humidité float t = dht.readTemperature(); //Lis la température en Celsius //Affichage des valeurs : Serial.print(h); Serial.print(" "); Serial.println(t); //Temporisation : delay(2000); }
La température est représentée en rouge et l'humidité en bleu. On peut voir un pic quand je m'approche du capteur et un retour à la normal ensuite (il est très sensible aux mouvements d'air):
Et enfin, j'ai fait un petit test avec un écran LCD 1602 contrôlé en I2C :
La résistance de pullup est toujours une 10k ohms.
//Bibliothèques : #include "DHT.h" #include "Wire.h" #include "LiquidCrystal_I2C.h" //Ecran LCD : LiquidCrystal_I2C lcd(0x3F, 2, 1 , 0, 4, 5, 6, 7, 3, POSITIVE); //Seul le premier paramètre, l'adresse I2C de l'écran, est à modifier //Déclaration du DHT22: #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); //Création du symbole symbole degrès : byte degres[8] = { B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 }; uint8_t deg = 0; void setup() { //Initialisation du capteur : dht.begin(); //Initialisation de l'écran : lcd.begin(16,2); lcd.backlight(); //Ajout du caractère : lcd.createChar(deg, degres); } void loop() { //Lecture des données : float h = dht.readHumidity(); //Lis le taux d'humidité float t = dht.readTemperature(); //Lis la température en Celsius //Affichage des valeurs : lcd.clear(); lcd.home(); lcd.print("Humidite: "); lcd.print(h); lcd.print("%"); lcd.setCursor(0,1); lcd.print("Temp :"); lcd.print(t); lcd.write(deg); lcd.print("C"); //Temporisation : delay(2000); }