Tutoriel Arduino : Maîtriser la température et l'humidité avec les capteurs DHT11 et DHT22
Introduction
Dans ce tutoriel Arduino, nous allons apprendre à utiliser les capteurs DHT11 ou DHT22 pour mesurer la température et l'humidité avec une carte Arduino. Vous pouvez regarder la vidéo ci-dessous ou suivre le tutoriel écrit pour plus de détails.
Vue d'ensemble
Ces capteurs sont très populaires auprès des passionnés d'électronique car ils sont peu coûteux tout en offrant d'excellentes performances. Voici les principales spécifications et différences entre ces deux capteurs :
Le DHT22 est la version plus coûteuse qui offre évidemment de meilleures spécifications. Sa plage de mesure de température va de -40 à +125 °C avec une précision de ±0,5 °C, tandis que le DHT11 a une plage de 0 à 50 °C avec une précision de ±2 °C. Le DHT22 a également une meilleure plage de mesure d'humidité, de 0 à 100 % avec une précision de 2 à 5 %, tandis que le DHT11 va de 20 à 80 % avec une précision de 5 %.

Il y a deux spécifications où le DHT11 surpasse le DHT22 : le taux d'échantillonnage qui est de 1 Hz (une lecture par seconde) pour le DHT11, contre 0,5 Hz (une lecture toutes les deux secondes) pour le DHT22, et le DHT11 a une taille plus compacte. La tension de fonctionnement des deux capteurs est de 3 à 5 volts, avec un courant maximal de 2,5 mA lors de la mesure.
Composants nécessaires
- Capteur DHT11
- Capteur DHT22
- Carte Arduino
- Plaque d'essai et fils de connexion
Principe de fonctionnement du DHT11 / DHT22
Voyons comment ces capteurs fonctionnent réellement. Ils sont composés d'un composant de détection d'humidité, d'un capteur de température NTC (thermistance) et d'un circuit intégré au dos du capteur.

Mesure de l'humidité
Pour mesurer l'humidité, ils utilisent le composant de détection d'humidité qui possède deux électrodes avec un substrat hygroscopique entre elles. Lorsque l'humidité change, la conductivité du substrat change, c'est-à-dire que la résistance entre ces électrodes varie. Cette variation de résistance est mesurée et traitée par le circuit intégré pour être lisible par un microcontrôleur.

Mesure de la température
Pour la mesure de température, ces capteurs utilisent un capteur de température NTC ou une thermistance.
Une thermistance est en fait une résistance variable qui change sa résistance avec la température. Ces capteurs sont fabriqués par frittage de matériaux semiconducteurs comme la céramique ou les polymères afin de fournir de grands changements de résistance pour de petits changements de température.

Le terme « NTC » signifie « Negative Temperature Coefficient » (coefficient de température négatif), ce qui veut dire que la résistance diminue lorsque la température augmente.
Schéma de câblage
Les capteurs DHTxx ont quatre broches : VCC, GND, broche de données et une broche non connectée sans usage. Une résistance de pull-up de 5K à 10K Ohms est nécessaire pour maintenir la ligne de données à l'état haut et permettre la communication entre le capteur et la carte Arduino. Il existe des versions de ces capteurs montées sur carte de dérivation (breakout board) avec une résistance de pull-up intégrée, ne comportant que 3 broches.

Les capteurs DHTxx utilisent leur propre protocole à fil unique pour le transfert de données. Ce protocole nécessite un timing précis et les diagrammes de timing pour la lecture des données se trouvent dans les fiches techniques. Cependant, nous n'avons pas à nous soucier de ces détails car nous utiliserons la bibliothèque DHT qui gère tout automatiquement.
Tutoriel connexe : Apprenez à construire une station météo sans fil basée sur Arduino
Code source
Tout d'abord, nous devons inclure la bibliothèque DHT disponible sur le site officiel Arduino, puis définir le numéro de broche auquel notre capteur est connecté et créer un objet DHT. Dans la section setup, nous initialisons la communication série car nous utiliserons le moniteur série pour afficher les résultats. En utilisant la fonction read22(), nous lisons les données du capteur et stockons les valeurs de température et d'humidité dans les variables t et h. Si vous utilisez le capteur DHT11, vous devrez utiliser la fonction read11(). À la fin, nous affichons les valeurs de température et d'humidité sur le moniteur série.
/* DHT11/ DHT22 Sensor Temperature and Humidity Tutorial
* Program made by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
/*
* You can find the DHT Library from Arduino official website
* https://playground.arduino.cc/Main/DHTLib
*/
#include <dht.h>
#define dataPin 8 // Définit le numéro de broche auquel le capteur est connecté
dht DHT; // Crée un objet DHT
void setup() {
Serial.begin(9600);
}
void loop() {
int readData = DHT.read22(dataPin); // Lit les données du capteur
float t = DHT.temperature; // Obtient la valeur de température
float h = DHT.humidity; // Obtient la valeur d'humidité
// Affichage des résultats sur le moniteur série
Serial.print("Temperature = ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(" Humidity = ");
Serial.print(h);
Serial.println(" % ");
delay(2000); // Délai de 2 secondes, car le taux d'échantillonnage du DHT22 est de 0,5 Hz
}
Après avoir téléversé ce code sur la carte Arduino, les résultats de température et d'humidité du capteur peuvent être vus sur le moniteur série.
J'ai également réalisé un exemple où j'affiche les résultats sur un écran LCD. Voici le code source de cet exemple :
/* DHT11/ DHT22 Sensor Temperature and Humidity Tutorial
* Program made by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
/*
* You can find the DHT Library from Arduino official website
* https://playground.arduino.cc/Main/DHTLib
*/
#include <LiquidCrystal.h> // inclut la bibliothèque LiquidCrystal
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Crée un objet LCD. Paramètres : (rs, enable, d4, d5, d6, d7)
dht DHT;
void setup() {
lcd.begin(16,2); // Initialise l'interface vers l'écran LCD, et spécifie les dimensions (largeur et hauteur) de l'affichage
}
void loop() {
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // Définit l'emplacement où le texte suivant écrit sur le LCD sera affiché
lcd.print("Temp.: "); // Affiche la chaîne "Temp." sur le LCD
lcd.print(t); // Affiche la valeur de température du capteur
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(2000);
}
N'hésitez pas à poser vos questions dans la section commentaires ci-dessous.
Processus de fabrication
- Construire un capteur de température distant avec Raspberry Pi et Python – Guide étape par étape
- Surveillance transparente température et humidité sur Raspberry Pi avec EzTemp
- Utiliser un ADC MCP3008 pour lire des capteurs analogiques avec Raspberry Pi
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
- Enregistreur de Température et Humidité Arduino avec DHT11 et Shield Ethernet
- Mesure Précise de Fréquence et Rapport Cyclique avec Arduino UNO
- Afficher Température, Humidité et Pression BME280 sur Écran Tactile Nextion
- Contrôle fluide de la luminosité LED avec Bolt IoT et Arduino UNO