Arduino - DHT22

Le DHT22 est un capteur de température et d'humidité.
Il utilise l'effet capacitif pour la détection d'humidité et une thermistance pour la mesure de la température.
Le capteur émet des données toutes les deux secondes, les informations sont donc vieilles de 2 secondes.
DHT11 ou DHT22
DHT11 | DHT22 | |
---|---|---|
Alimentation | 3,3v à 5,5v | 3,3v à 6v |
Courant max | 2,5 mA | 1,5 mA |
Courant de repos | 150 microA | 50 microA |
Plage de Température | 0 à +50°C / +/-2°C | -40 à +80°C / +/-0,5°C |
Plage d'humidité | 20 à 80% / 5% | 0 à 100% / 2% à 5% |
Echantillonnage | 1 Hz (lecture toutes les secondes) | 0,5Hz (lecture toutes les 2 secondes) |
Avantages | faible coût | Plus précis |
Cablâge du DHT22 sur Arduino Uno
DHT22
- Pin 1 +Vcc sur +Vcc de l'Arduino
- Pin 2 Data sur D6 de l'Arduino
- Pin 3 Non câblé
- Pin 4 Gnd sur Gnd de l'Arduino
Une résistance 4700 Ohm de PullUP est recommandée entre la pin 2 Data du DHT22 et le +Vcc
Un condensateur de filtrage de 100nF peut-être installé entre le +Vcc et le Gnd (Optionnel)
Affichage Température et Humidité sur LCD
Vous pouvez afficher les données du DHT22 sur un LCD 16x2
Nous utiliserons un LCD 16x2 - I2C
Câblage LCD 16x2 - I2C sur l'Arduino
- GND sur GND
- VCC sur +5V
- SDA sur A4
- SCL sur A5
Cablage DHT22 et LCD 16x2
Réalisé sur le simulateur Wokwi
Câblage DHT22
- pin 1 +Vcc sur +Vcc
- pin 2 Data sur D6
- pin 3 Not Use
- pin 4 Gnd sur Gnd
Câblage du LCD 16x2 - I2C
- pin Gnd sur Gnd
- pin Vcc sur +Vcc
- pin SDA sur A4
- pin SCL sur A5
Ajout de la résistance de Pull-Up de 4700 Ohm entre pin 2 Data du DHT22 et +Vcc
Code Arduino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define pinDHT 6
#define typeDHT DHT22
//----- Adressage matériel -----
// En cas de non fonctionnement, mettez la ligne 8 en
// commentaire et retirez le commentaire à la ligne 9.
LiquidCrystal_I2C lcd(0x27, 20, 4);
//LiquidCrystal_I2C lcd(0x3F,20,4);
// Configuration du DHT22
DHT dht(pinDHT, typeDHT);
void setup()
{
lcd.init(); // initialisation de l'afficheur
dht.begin(); // Initialisation du DHT22
}
void loop()
{
//delay(2000); // Délai pour lecture DHT22 - A décommenter si besoin ...
// Lecture des données
// dht.readHumidity et dht.readTemperature sont des commandes internes pour le DHT
float tauxHumidity = dht.readHumidity(); // Lecture du taux d'humidité (en %)
float temperatureCelsius = dht.readTemperature(); // Lecture de la température C°
// Vérification des données
if (isnan(tauxHumidity) || isnan(temperatureCelsius)) {
//delay(2000); - A décommenter si besoin ...
return;
}
// Retroéclairage du LCD
lcd.backlight();
// Affichage de la température
lcd.setCursor(0, 0); // colonne, ligne
lcd.print("Temp:");
lcd.setCursor(9,0);
lcd.print(temperatureCelsius);
lcd.setCursor(15,0);
lcd.print("C");
// Affichage du taux d'humidité
lcd.setCursor(0, 1); // colonne, ligne
lcd.print("Humid:");
lcd.setCursor(9,1);
lcd.print(tauxHumidity);
lcd.setCursor(15,1);
lcd.print("%");
// Effacement du LCD
delay(2000);
lcd.clear();
}
Vous avez besoin des bibliothèques ci-dessous
- LiquidCrystal_I2C de Frank de Brabander
- Wire (Elle devrait etre déjà installée)
- DHT sensor library de Adafruit
Télécharger le code ino en .zip (DHT22_LCD_16x2)
explication de la fonction isnan
Le code ino utilise la fonction isnan
// Vérification des données
if (isnan(tauxHumidity) || isnan(temperatureCelsius)) {
return;
}
La fonction isnan() est une fonction utilisée pour vérifier si une valeur donnée est un NaN (Not a Number), c'est-à-dire une valeur qui ne correspond pas à un nombre réel.
Voir explication via le lien isnan

Affichage du ° sur LCD
Pour que notre affichage sur le LCD soit plus sympa, nous pouvons afficher le petit ° pour degré °
Cela dépend du modèle exact d'écran LCD que vous utilisez.
Le jeu de caractères Hitachi HD44780U est utilisé dans de nombreux LCD 16x2 (Voir image ci-jointe)
Le caractère ° est représenté en colonne 1101 et ligne 1111 (Valeur binaire)
Pour convertir une valeur binaire en valeur décimale, vous pouvez utiliser un convertisseur décimal, binaire et hexadécimal sur internet. (Exemple de convertisseur)
Saisir les valeurs binaires (colonne et ligne) à la suite 11011111, ce qui donne 223 en décimal
Le code pour afficher le caractère °
- lcd.print(char(223));
Dans le code ino ajouter les lignes surlignées en jaune
// Affichage de la température
lcd.setCursor(0, 0); // colonne, ligne
lcd.print("Temp:");
lcd.setCursor(9,0);
lcd.print(temperatureCelsius);
lcd.setCursor(14,0); // Affichage du ° (degré)
lcd.print(char(223));
lcd.setCursor(15,0);
lcd.print("C");