Comment utiliser les capteurs DHT11 et DHT22 avec Arduino

Composants matériels

  1. Capteur DHT11 à 4 broches
  2. Capteur DHT22 / AM2302 à 4 broches
  3. Capteur DHT11 à 3 broches (recommandé)
  4. Capteur DHT22 / AM2302 à 3 broches (recommandé)
  5. Résistance de 5 à 10 kΩ (uniquement pour les capteurs à 4 broches)
  6. Arduino Uno Rev3
  7. Breadbord
  8. Fils
  9. Câble USB type A / B
  10. LCD I2C 16 × 2 caractères (en option)

Comment fonctionnent les capteurs de température et d’humidité DHT11 et DHT22 / AM2302?

Si vous ouvrez un  capteur DHT11  ou  DHT22 / AM2302 , vous verrez qu’il contient deux éléments de détection: un élément de détection d’humidité et un NTC (thermistance).

L’élément de détection d’humidité se compose de deux électrodes avec un substrat de rétention d’humidité entre les deux. Le capteur mesure la résistance entre les électrodes, qui change en fonction de la quantité d’humidité dans l’air.

À l’arrière du capteur, vous trouverez un petit circuit intégré qui mesure et traite le signal analogique. Il stocke également les coefficients d’étalonnage et effectue la conversion analogique-numérique.

Qu’est-ce que l’humidité relative?

Lorsque vous regardez la fiche technique des capteurs DHTxx, vous verrez qu’ils mesurent l’humidité relative (HR) de l’air et non l’humidité absolue. Mais quelle est la différence? L’humidité absolue est la quantité de vapeur d’eau dans l’air (exprimée en g / m³), ​​quelle que soit la température. L’humidité relative  tient  compte de la température.

L’humidité relative est le rapport entre la quantité réelle de vapeur d’eau présente dans l’air et la quantité maximale de vapeur d’eau que l’air peut contenir à une température donnée.

L’air chaud peut contenir plus d’eau que l’air froid. Cela signifie que pour la même quantité de vapeur d’eau dans l’air, l’humidité relative de l’air frais sera plus élevée que celle de l’air chaud. À 100% d’humidité relative, l’air est saturé et atteint son point de rosée.

Spécifications DHT11

Tension de fonctionnement3,3 à 5,5 V
Courant de fonctionnementMesure: 0,3 mA, veille: 60 μA
Plage de mesure d’humidité5 à 95% d’humidité relative ± 5% d’humidité relative
Plage de mesure de température-20 à 60 ° C ± 2 ° C
Protocole de communication1 fil
Période d’échantillonnage> 2 seconds
Dimensions du corps15,5 x 12 x 5,5 mm
Pin dimensionsLongueur de 8 mm, espacement de 2,54 mm
AvantageCoût ultra bas
CoûtVérifiez le prix

Pour plus d’informations, vous pouvez consulter la fiche technique ci-dessous:

Spécifications DHT22 / AM2302

Tension de fonctionnement3,3 à 5,5 V
Courant de fonctionnementMesure: 0,5 mA, veille: 15 μA
Plage de mesure d’humidité0 à 99,9% d’humidité relative ± 2% d’humidité relative
Plage de mesure de température-40 à 80 ° C ± 1 ° C
Protocole de communicationProtocole de bus à 1 fil
Période d’échantillonnage2 secondes
Dimensions du corps25 x 15 x 7 mm, trou de montage ⌀ 3 mm
Pin dimensionsLongueur 7 mm, espacement de 2,54 mm
AvantagePlus précise
CoûtVérifiez le prix

Vous pouvez télécharger la fiche technique du DHT22 / AM2302 ci-dessous:

Notez que l’  AM2302  est simplement une version filaire du capteur DHT22 à 3 fils.

q? encoding=UTF8&ASIN=B073TW7V1T&Format= SL250 &ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=makerguides 20&language=en US

Comme vous pouvez le voir, les spécifications du DHT11 et du DHT22 / AM2302 sont assez similaires. La principale différence est que le DHT22 est plus précis et possède une plus grande plage de mesure.

Le DHT11 est un peu plus petit que le DHT22 et est également moins cher.

La bonne chose à propos de ces capteurs est qu’ils sont interchangeables, ce qui signifie que vous pouvez simplement remplacer le DHT11 par un DHT22 ou vice versa, le câblage est exactement le même. Vous n’aurez qu’à faire un petit changement dans la configuration du code, comme vous le verrez plus tard.


Câblage – Connexion DHT11 et DHT22 / AM2302 à Arduino Uno

Les schémas de câblage / schémas ci-dessous vous montrent comment connecter des capteurs de température et d’humidité à 3 ou 4 broches à l’Arduino Uno. Une résistance pull-up de 10 kΩ est nécessaire entre la ligne de signal et 5 V pour s’assurer que le niveau du signal reste élevé par défaut (voir la fiche technique pour plus d’informations).

DHT11-avec-Arduino-UNO-schéma-câblage-schématique
Câblage du capteur de température et d’humidité DHT11 à 4 broches à Arduino Uno
DHT22-avec-Arduino-UNO-schéma-câblage-schématique
Câblage du capteur de température et d’humidité DHT22 à 4 broches à Arduino Uno

Notez que le capteur DHT22 / AM2302 est connecté exactement de la même manière que le DHT11. Les connexions sont également données dans le tableau ci-dessous. J’ai numéroté les broches 1 à 4 de gauche à droite lorsque les trous du capteur sont tournés vers vous.

Connexions DHT11 et DHT22 à 4 broches

DHT11 / DHT22Arduino
Broche 15 V
Broche 2Connectez à la broche numérique 2 et à 5 V via une résistance de 10 kΩ
Broche 3Pas connecté
Broche 4GND

Vous pouvez également acheter les capteurs montés sur un petit PCB (capteurs à 3 broches). Ces cartes de dérivation facilitent la connexion du capteur à l’Arduino et incluent déjà une résistance de rappel. Assurez-vous de vérifier l’étiquette du capteur,  l’ordre des broches peut être différent selon le fabricant .

DHT11-3 broches-avec-Arduino-UNO-schéma-câblage-schématique
Câblage du capteur de température et d’humidité DHT11 à 3 broches à Arduino Uno

Connexions DHT11 à 3 broches

3 broches DHT11Arduino
sBroche numérique 2
+5 V
GND

Les exemples de code ci-dessous utilisent la broche numérique 2 pour recevoir les données du capteur, mais vous pouvez la remplacer par la broche numérique de votre choix.

DHT22-3 broches-avec-Arduino-UNO-schéma-câblage-schématique
Câblage du capteur de température et d’humidité DHT22 à 3 broches à Arduino Uno

Connexions DHT22 / AM2302 à 3 broches

3 broches DHT22Arduino
LEQUELBroche numérique 2
VCC5 V
GNDGND

Installation des bibliothèques Arduino requises

Le code ci-dessous utilise la  bibliothèque de capteurs Adafruit DHT  que vous pouvez télécharger  ici sur GitHub . Cette bibliothèque ne fonctionne que si vous avez également   installé la bibliothèque Adafruit Unified Sensor , qui est également  disponible sur GitHub .

Vous pouvez également télécharger les deux bibliothèques en cliquant sur les boutons ci-dessous:

Vous pouvez installer la bibliothèque en allant dans  Sketch> Inclure la bibliothèque> Ajouter une bibliothèque .ZIP  dans l’IDE Arduino.

Une autre option consiste à naviguer vers  Outils> Gérer les bibliothèques…  ou tapez Ctrl + Maj + I sous Windows. Le gestionnaire de bibliothèque ouvrira et mettra à jour la liste des bibliothèques installées.

Installation d'une bibliothèque Arduino Étape 1 Ouvrez Library Manager

Vous pouvez rechercher  «dht»  et  «adafruit unified sensor»  et rechercher la bibliothèque d’Adafruit. Sélectionnez la dernière version, puis cliquez sur Installer.

Installation d'une bibliothèque Arduino étape 2 DHT Adafruit

Exemple de code Arduino pour capteur de température et d’humidité DHT11 / DHT22

Vous pouvez télécharger l’exemple de code suivant sur votre Arduino à l’aide de l’  IDE Arduino . Ensuite, je vais vous expliquer comment fonctionne le code.

Vous pouvez copier le code en cliquant sur le bouton dans le coin supérieur droit du champ de code.

/ * Exemple de code Arduino pour les capteurs de température et d’humidité DHT11, DHT22 / AM2302 et DHT21 / AM2301. Plus d’infos: www.makerguides.com * /
// Inclut les bibliothèques:
#include <Adafruit_Sensor.h>
#include <DHT.h>
// Définir la broche DHT:
#define DHTPIN 2
// Définit le type DHT, décommentez le type que vous utilisez!
#define DHTTYPE DHT11 // DHT 11
// # définir DHTTYPE DHT22 // DHT 22 (AM2302)
// # définir DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialisation du capteur DHT pour Arduino 16 MHz normal:
DHT dht = DHT ( DHTPIN, DHTTYPE ) ;
void setup () {
// Commencez la communication série à une vitesse de transmission de 9600:
En série. commencer ( 9600 ) ;
// Configuration du capteur:
dht. begin () ;
}
boucle void () {
// Attendez quelques secondes entre les mesures:
retard ( 2000 ) ;
// La lecture de la température ou de l’humidité prend environ 250 millisecondes!
// Les lectures du capteur peuvent également être “ anciennes ” jusqu’à 2 secondes (c’est un capteur très lent)
// Lire l’humidité en%:
float h = dht. readHumidity () ;
// Lire la température en Celsius:
float t = dht. readTemperature () ;
// Lire la température en Fahrenheit:
float f = dht. readTemperature ( vrai ) ;
// Vérifiez si des lectures ont échoué et quittez tôt (pour réessayer):
si ( isnan ( h ) || isnan ( t ) || isnan ( f )) {
En série. println ( “Impossible de lire à partir du capteur DHT!” ) ;
retour ;
}
// Calcul de l’indice de chaleur en Fahrenheit (par défaut):
float hif = dht. computeHeatIndex ( f, h ) ;
// Calcul de l’indice de chaleur en Celsius:
float hic = dht. computeHeatIndex ( t, h, false ) ;
En série. print ( “Humidité:” ) ;
En série. imprimer ( h ) ;
En série. impression ( “%” ) ;
En série. print ( “Température:” ) ;
En série. imprimer ( t ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. imprimer ( “C |” ) ;
En série. imprimer ( f ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. imprimer ( “F” ) ;
En série. print ( “Indice de chaleur:” ) ;
En série. imprimer ( ici ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. imprimer ( “C |” ) ;
En série. imprimer ( hif ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. println ( “F” ) ;
}

Vous devriez voir la sortie suivante dans le moniteur série (Ctrl + Maj + M):

Capteur de température et d'humidité DHT11 Sortie moniteur série

Code

La première étape consiste à inclure la bibliothèque Adafruit DHT et Unified Sensor.

// Inclut les bibliothèques:
#include <Adafruit_Sensor.h>
#include <DHT.h>

Ensuite, nous devons définir la broche de connexion DHT à Arduino et également définir le type de capteur DHT. Dans notre exemple, nous utilisons un capteur DHT11 connecté à la broche 2.

L’instruction  #define est utilisée pour donner un nom à une valeur constante. Le compilateur remplacera toutes les références à cette constante par la valeur définie lors de la compilation du programme. Ainsi, partout où vous mentionnez DHTPIN, le compilateur le remplacera par la valeur 2 lorsque le programme sera compilé.

// Définir la broche DHT:
#define DHTPIN 2
// Définit le type DHT, décommentez le type que vous utilisez!
#define DHTTYPE DHT11 // DHT 11
// # définir DHTTYPE DHT22 // DHT 22 (AM2302)
// # définir DHTTYPE DHT21 // DHT 21 (AM2301)

Ensuite, vous devez créer une nouvelle instance de la classe DHT avec le type DHT et la connexion appropriés. Pour cela, nous utilisons la fonction  DHT(pin,type).

Dans ce cas, j’ai appelé le capteur « dht » mais vous pouvez utiliser d’ autres noms aussi, comme « temperature_sensor » ou « dht11 » , etc.  DHT temperature_sensor = DHT(DHTPIN, DHTTYPE);. Vous pouvez créer plusieurs instances de la classe DHT avec différents noms et broches / types. Cela vous permet d’utiliser facilement 2 capteurs ou plus en même temps.

// Initialisation du capteur DHT pour Arduino 16 MHz normal:
DHT dht = DHT ( DHTPIN, DHTTYPE ) ;

Dans le  setup(), nous démarrons la communication série à une vitesse de transmission de 9600. Assurez-vous que le moniteur série est également réglé sur 9600! Nous initialisons également le capteur avec  dht.begin().

void setup () {
// Commencez la communication série à une vitesse de transmission de 9600:
En série. commencer ( 9600 ) ;
// Configuration du capteur:
dht. begin () ;
}

La  loop() section du code commence avec un délai de 2 secondes. Ce délai est là pour donner au capteur un certain temps pour faire les lectures. La fréquence de détection maximale du DHT22 est toutes les 2 secondes et celle du DHT11 une fois toutes les secondes.

// Attendez quelques secondes entre les mesures:
retard ( 2000 ) ;

Prendre des lectures de température et d’humidité est très facile car la bibliothèque a plusieurs fonctions intégrées. Pour obtenir une lecture d’humidité en «%», vous pouvez utiliser la fonction  readHumidity(). Dans ce cas, nous enregistrons la lecture en tant que variable «h». Notez qu’il est du type  float .

Lorsque vous souhaitez utiliser une fonction sur l’objet DHT, vous devez d’abord spécifier le nom que vous avez donné au capteur. Donc, dans notre cas, c’est «dht».

// Lire l’humidité en%:
float h = dht. readHumidity () ;

Prendre des mesures de température est tout aussi simple avec la fonction  readTemperature().

// Lire la température en Celsius:
float t = dht. readTemperature () ;

Si vous souhaitez obtenir la température en Fahrenheit au lieu de Celsius, vous avez deux options. Vous pouvez passer true à la fonction readTemperature, ou vous pouvez utiliser la fonction de conversion:

// Lire la température en Fahrenheit:
float f = dht. readTemperature ( vrai ) ;
// Alternative, utilisez la fonction de conversion:
float f = dht. convertCtoF ( t ) ;

Ensuite, il y a une petite section de code qui vérifie si le capteur est correctement connecté et renvoie une lecture. Sinon, un message d’erreur sera imprimé sur le moniteur série.

// Vérifiez si des lectures ont échoué et quittez tôt (pour réessayer):
si ( isnan ( h ) || isnan ( t ) || isnan ( f )) {
En série. println ( “Impossible de lire à partir du capteur DHT!” ) ;
retour ;
}

La bibliothèque a également une fonction intégrée qui peut calculer l’indice de chaleur en combinant les lectures de température et d’humidité. L’  indice de chaleur  est également appelé «température de l’air ressenti» ou «température apparente».

// Calcul de l’indice de chaleur en Fahrenheit (par défaut):
float hif = dht. computeHeatIndex ( f, h ) ;
// Calcul de l’indice de chaleur en Celsius:
float hic = dht. computeHeatIndex ( t, h, false ) ;

Enfin, les lectures sont affichées sur le moniteur série. Notez que la ligne  Serial.print(" \xC2\xB0"); est utilisée pour imprimer le symbole du degré.

En série. print ( “Humidité:” ) ;
En série. imprimer ( h ) ;
En série. impression ( “%” ) ;
En série. print ( “Température:” ) ;
En série. imprimer ( t ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. imprimer ( “C |” ) ;
En série. imprimer ( f ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. imprimer ( “F” ) ;
En série. print ( “Indice de chaleur:” ) ;
En série. imprimer ( ici ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. imprimer ( “C |” ) ;
En série. imprimer ( hif ) ;
En série. impression ( “\ xC2 \ xB0” ) ;
En série. println ( “F” ) ;

Exemple de code pour capteur de température et d’humidité DHT11 et DHT22 / AM2302 avec écran LCD I2C et Arduino

En combinant un capteur de température et d’humidité avec un petit écran LCD, vous pouvez créer une station météo bon marché.

Dans l’exemple suivant, j’utiliserai un écran LCD de caractère I2C  comme celui d’Amazon . Vous pouvez en savoir plus sur l’utilisation d’un écran LCD I2C avec Arduino dans l’article ci-dessous:

  • Comment contrôler un écran LCD I2C avec Arduino

Si vous avez un écran LCD normal sans sac à dos I2C, consultez le tutoriel ci-dessous:

  • Comment utiliser un écran LCD 16 × 2 caractères avec Arduino

Vous devrez effectuer des connexions supplémentaires à l’Arduino afin que nous puissions contrôler l’écran LCD 16 × 2 caractères. Le capteur DHT11 ou DHT22 / AM2302 est connecté de la même manière qu’auparavant.

Le schéma de câblage ci-dessous vous montre comment connecter un écran LCD I2C à l’Arduino.

DHT11-avec-I2C-LCD-et-Arduino-UNO-schéma-câblage-schématique
Capteur de température et d’humidité DHT11 avec écran LCD 16 × 2 caractères I2C et schéma de câblage Arduino

Les connexions sont également données dans le tableau suivant:

Connexions LCD I2C

LCD I2CArduino
GNDGND
VCC5 V
SDAA4
SCLA5

Si vous n’utilisez pas d’Arduino Uno, les broches SDA et SCL peuvent être à un emplacement différent. Un Arduino UNO avec la disposition R3 (brochage 1.0), a également les en-têtes de broches SDA (ligne de données) et SCL (ligne d’horloge) proches de la broche AREF. Consultez le tableau ci-dessous pour plus de détails.

TableauSDASCL
Arduino unoA4A5
Arduino NanoA4A5
Arduino Micro23
Arduino Mega 25602021
Arduino Leonardo23
Arduino Due2021
Emplacements des broches I2C pour différentes cartes Arduino

Le code utilise la   bibliothèque LiquidCrystal_I2C , que vous pouvez télécharger  ici sur GitHub . Il comprend également la   bibliothèque Wire.h , qui vous permet de communiquer avec les périphériques I2C. Cette bibliothèque doit être préinstallée avec l’IDE Arduino.

Le code ci-dessous est essentiellement le même qu’avant, mais maintenant nous affichons la température et l’humidité sur l’écran LCD au lieu du moniteur série.

Vous pouvez copier le code en cliquant sur le bouton dans le coin supérieur droit du champ de code.

/ * Exemple de code Arduino pour les capteurs de température et d’humidité DHT11, DHT22 / AM2302 et DHT21 / AM2301 avec écran LCD I2C. Plus d’infos: www.makerguides.com * /
// Inclut les bibliothèques:
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Définir la broche DHT:
#define DHTPIN 2
// Définissez les broches SDA et SCL pour l’écran LCD:
#define SDAPin A4 // Broche de données
#define SCLPin A5 // Broche d’horloge
// Définit le type DHT, décommentez le type que vous utilisez!
#define DHTTYPE DHT11 // DHT 11
// # définir DHTTYPE DHT22 // DHT 22 (AM2302)
// # définir DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialisation du capteur DHT pour Arduino 16 MHz normal:
DHT dht = DHT ( DHTPIN, DHTTYPE ) ;
// Se connecter à l’écran LCD via I2C, adresse par défaut 0x27 (A0-A2 sans cavalier):
LiquidCrystal_I2C lcd = LiquidCrystal_I2C ( 0x27 , 16, 2 ) ; // Changer en (0x27,20,4) pour l’écran LCD 2004
void setup () {
// Configuration du capteur:
dht. begin () ;
// Lancez l’écran LCD:
lcd. init () ;
lcd. rétroéclairage () ;
}
boucle void () {
// Attendez quelques secondes entre les mesures:
retard ( 2000 ) ;
// La lecture de la température ou de l’humidité prend environ 250 millisecondes!
// Les lectures du capteur peuvent également être “ anciennes ” jusqu’à 2 secondes (c’est un capteur très lent)
// Lire l’humidité en%:
float h = dht. readHumidity () ;
// Lire la température en Celsius:
float t = dht. readTemperature () ;
// Lire la température en Fahrenheit:
float f = dht. readTemperature ( vrai ) ;
// Calcul de l’indice de chaleur en Fahrenheit (par défaut):
float hif = dht. computeHeatIndex ( f, h ) ;
// Calcul de l’indice de chaleur en Celsius:
float hic = dht. computeHeatIndex ( t, h, false ) ;
// Imprimer la température et l’humidité sur l’écran LCD:
lcd. setCursor ( 0, 0 ) ;
lcd. print ( “Temp:” ) ;
lcd. imprimer ( t ) ;
lcd. impression ( “” “\ xDF” “C” ) ;
lcd. setCursor ( 0, 1 ) ;
lcd. print ( “Humide:” ) ;
lcd. imprimer ( h ) ;
lcd. impression ( “%” ) ;
}

Vous devriez voir la sortie suivante sur l’écran LCD:

(Bientôt disponible)


Guide de dépannage DHT11 / DHT22

Lorsque vous travaillez avec ces capteurs, vous pouvez obtenir les messages d’erreur suivants:

«Échec de la lecture du capteur DHT!»

Ce message peut apparaître sur le moniteur série lorsque le capteur ne renvoie pas de lecture. Cela peut avoir plusieurs causes:

  • Type de capteur:  assurez-vous que vous avez décommenté le DHTTYPE correct dans la configuration du code. Consultez l’exemple ci-dessus.
  • Taux d’échantillonnage:  Les capteurs DHT sont assez lents, le taux d’échantillonnage maximum est d’environ 2 secondes. L’augmentation du délai entre les mesures peut résoudre cette erreur.
  • Alimentation:  Bien que les capteurs DHTxx puissent fonctionner de 3,3 à 5 V, le fabricant recommande 5 V. Dans certains cas, alimenter le capteur avec 5 V résout le problème. Assurez-vous que votre microcontrôleur prend également en charge 5 V sur les broches GPIO.

Erreur fatale: Adafruit_Sensor.h: aucun fichier ou répertoire de ce type

Vous pouvez obtenir cette erreur lorsque vous essayez de compiler le code. Cela signifie que vous n’avez pas (correctement) installé la   bibliothèque Adafruit Unified Sensor .

Faites simplement défiler vers le haut dans cet article et vous verrez où et comment télécharger et installer la bibliothèque.

Conclusion

Dans cet article, je vous ai montré comment fonctionnent les capteurs de température et d’humidité DHT11 et DHT22 / AM2302 et comment vous pouvez les utiliser avec Arduino. J’espère que vous l’avez trouvé utile et instructif. Si c’est le cas,  partagez-le avec un ami  qui aime aussi l’électronique et la fabrication d’objets!

J’aimerais savoir quels projets vous prévoyez de construire (ou avez déjà construits) avec ce capteur. Si vous avez des questions, des suggestions ou si vous pensez que des éléments manquent dans ce tutoriel,  veuillez laisser un commentaire ci-dessous .

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée.

    Rejoindre la liste d'attente Nous vous informerons lorsque le produit arrivera en stock. Veuillez laisser votre adresse E-mail et la quantité voulue.

    Main Menu

    بحاجة الى مساعدة ؟