Arduino - DHT22

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
 
Pin DHT11 et DHT22


dht11_dht22


Cablâge du DHT22 sur Arduino Uno

cablage_DHT22



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

lcd_16x2


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

code_dht22_wokwi


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

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();
}


library


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



isnan

Affichage du ° sur LCD

  • jeu_caractère
  • code_°


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");





Personnaliser

Google Analytics

Google Analytics est un service utilisé sur notre site Web qui permet de suivre, de signaler le trafic et de mesurer la manière dont les utilisateurs interagissent avec le contenu de notre site Web afin de l’améliorer et de fournir de meilleurs services.

Facebook

Notre site Web vous permet d’aimer ou de partager son contenu sur le réseau social Facebook. En l'utilisant, vous acceptez les règles de confidentialité de Facebook: https://www.facebook.com/policy/cookies/

Twitter

Les tweets intégrés et les services de partage de Twitter sont utilisés sur notre site Web. En activant et utilisant ceux-ci, vous acceptez la politique de confidentialité de Twitter: https://help.twitter.com/fr/rules-and-policies/twitter-cookies