Total-Informatique

Le blog de sablier94

Utiliser le DHT11 avec un écran LCD

août 9th, 2012

Vous désirez connaitre facilement le taux d’humidité ou la température de votre appartement ? Ça tombe bien, moi aussi et je vais vous expliquer comment faire.

Le résultat final :

Photo du capteur et de l'écran

Voilà le matériel dont vous aurez besoin :

  • Un Arduino (peu importe le modèle, ici je vais utiliser l’arduino UNO)
  • Un capteur d’humidité et de température DHT11 (ou DHT22)
  • Un écran LCD 2×16
  • Une breadboard
  • Une résistance de 10kΩ, deux de 1.1kΩ (ou un potentiomètre) et des câbles pour relier tout ça.


Je possède le DHT11 car c’est le moins cher mais cela fonctionnera de la même manière avec le DHT22 ou encore tout autre capteur du même type (comme le DHT21). La principale différence entre ces modèles est la précision, le DHT22 donne des résultats plus précis et dans une plus grand plage. D’ailleurs ça se voit, mon DHT11 mesure environ 5 degrés de moins que la température réelle. Donc s’il vous faut quelque chose de précis, utilisez le DHT22 ou le classique LM35 pour la température.

Je vous fourni le lien de la datasheet du DHT11 et celui du DHT22. Vous pouvez aussi voir les différences entre ces 2 composants ici.

Commencez par télécharger le zip de la librairie et à l’extraire dans le répertoire « libraries » de l’IDE Arduino : https://github.com/adafruit/DHT-sensor-library.
Il vous faudra certainement renommer le dossier de la librairie pour enlever les caractères non autorisés, puis relancer l’IDE (1.0.1 chez moi) pour qu’elle soit prise en compte.

Schéma du câblage avec Fritzing (à télécharger ici) :

Schéma du câblage

J’ai choisis d’utiliser des résistances plutôt qu’un potentiomètre parce que dans mon cas, une fois que la luminosité est correctement réglée je n’aurais plus besoin de la changer. J’ai calculé que, pour que mon écran soit bien visible, je dois mettre une résistance d’environ 2,5kΩ (donc 2 fois 1.1kΩ en série). Pour pouvoir régler à tout moment la luminosité, vous pouvez mettre un potentiomètre en suivant ce schéma : http://arduino.cc/en/uploads/Tutorial/LCD_bb.png


Le code (n’oubliez pas de changer les numéros des pins et le type du capteur si vous n’avez pas la même chose) :

#include <LiquidCrystal.h> //Librairie pour l'écran LCD
#include <DHT.h> //Librairie pour le capteur DHT

LiquidCrystal lcd(12, 11, 4, 3, 2, 1); //Initialisation de l'écran LCD avec les numéros des pins utilisés

#define DHTPIN 9 //Pin auquel est connecté le capteur DHT

#define DHTTYPE DHT11 //Si vous utiliser le DHT 11
//#define DHTTYPE DHT22 //Si vous utiliser le DHT 22  (AM2302)
//#define DHTTYPE DHT21 //Si vous utiliser le DHT 21 (AM2301)

const int intTimePause = 5000; //Par défaut on actualise les valeures toutes les 5 secondes

float fltHumidity; //Pourcentage d'humidité mesuré
float fltTemperature; //Température mesurée en Celsius

DHT dht(DHTPIN, DHTTYPE); //On initialise le capteur DHT

void setup()
{
  lcd.begin(16, 2); //On indique le nombre de colonnes et de lignes de l'écran
  lcd.clear(); //On efface tout ce qui se trouve sur l'écran
}

void loop()
{
  fltHumidity = dht.readHumidity(); //On lit le pourcentage d'humidité
  fltTemperature = dht.readTemperature(); //On lit la température en degrés Celsuis
  if (isnan(fltTemperature) || isnan(fltHumidity)) //Si les valeures retournées ne sont pas des nombres :
  {
    lcd.setCursor(0, 1); //Positionnement du curseur
    lcd.print(DHTTYPE); //On affiche le type de capteur
    lcd.setCursor(5, 1);
    lcd.print(" illisible"); //On affiche l'erreur
  }
  else
  {
    //mise en forme et affichage des informations sur l'écran LCD
    lcd.setCursor(0, 0); //Positionnement du curseur
    lcd.print("Degres : ");
    lcd.setCursor(9, 0);
    lcd.print(fltTemperature); //Affichage de la température
    lcd.setCursor(13, 0);
    lcd.print((char)223); //Affiche le caractère ° (degrés)
    lcd.setCursor(14, 0);
    lcd.print("C"); //En degrés Celsuis
    lcd.setCursor(0, 1);
    lcd.print("Humidite : ");
    lcd.setCursor(11, 1);
    lcd.print(fltHumidity); //Affichage de l'humidité
    lcd.setCursor(15, 1);
    lcd.print("%");
  }
  delay(intTimePause); //On actualise les informations toutes les x millisecondes.
}

J’ai choisis d’afficher les décimales car il me semble que le DHT22 permet l’obtention de valeurs avec des virgules alors que le DHT11 ne donne que des valeurs entières. Mais de toute façon ce sketch est facilement modifiable pour afficher les résultats en type int.

Comments

22 Comments

RSS
  • Zilators says on: 10 août 2012 at 2:20

     

    Merci pour ce tuto, ca me sera pratique pour la domotique sa 😀

  • jordan pas cher says on: 14 août 2012 at 4:32

     

    I love the way you wrote this article. This is wonderful. I do hope you intend to write more of these types of articles. Thank you for this interesting content!

  • bruno says on: 28 novembre 2012 at 11:25

     

    Bonjour, je souhaitais vous remercie pour ce tuto qui est très bien.
    En revanche je suis bloqué sur la compilation du programme la variable « &quot » dans votre programme n’est pas définie en amont , est ce normal ?
    Cordialement Bruno :))

  • bruno says on: 28 novembre 2012 at 11:56

     

    … j’ai compris : &quot =  »

    :))

    • sablier94 says on: 1 décembre 2012 at 10:49

       

      En effet il y a eu un problème lors d’une mise à jour de l’article, il faut remplacer " par le caractère  » (guillemet). Je règle ça tout de suite, merci pour la correction.

  • francois says on: 6 mai 2013 at 11:58

     

    Salut, tout d’abord merci pour ton tuto
    mais j’ai un problème le logiciel de programmation Arduino ne prend pas en compte la librairie que tu ma fournie..

    • sablier94 says on: 12 mai 2013 at 10:46

       

      Salut et merci.
      Quelle version de l’IDE Arduino possèdes-tu et quelle erreur est affichée ? As-tu redémarré le logiciel ? Aussi je viens remettre le nom des librairies dans le code car wordpress les avait enlevés.

  • vega24 says on: 25 juillet 2013 at 7:06

     

    Bonjour
    j’ai un problème, sur l’afficheur s’affichent 16 carrés!!!
    j’utilise la vers 1.03
    je ne pense pas avoir commis d’erreur de cablage
    cordialement

  • vega24 says on: 26 juillet 2013 at 5:41

     

    Bonjour,
    bon, ca marche!!, une connexion LCD qui n’etait pas à sa place!
    je trouve que le taux d’humidité est un peu haut,( j’habite dans le sud et il fait 35° à l’exterieur, c’est plutôt sec)….j’attends de recevoir un DHT22 pour comparer..
    cordialement

    • sablier94 says on: 27 juillet 2013 at 6:09

       

      Bonjour,
      Content que ça fonctionne.
      N’hésites pas à nous faire par de ta comparaison avec le DHT11.

  • Lucas says on: 31 octobre 2013 at 5:56

     

    Très bon tuto, clair,net et précis. Merci!!

  • David says on: 10 novembre 2013 at 6:40

     

    Thank’s pour le code :-)))

    Par contre je suis étonné de la précision de la DHT11 en comparaison avec un thermomètre au mercure :
    25-26° C pour la DHT11
    25°C pour le thermomètre au mercure.

  • wared says on: 19 décembre 2013 at 1:34

     

    salut,

    super tuto, merci!

    y a t-il une solution pour faire la meme chose avec 2 ou 3 dht22?

  • mansour says on: 20 mars 2014 at 7:35

     

    bnj le compilateur ne comprie pas dht le type de capteur

  • mansour says on: 20 mars 2014 at 7:36

     

    il m’a dit DHT does not name a type

  • boudjamaa says on: 28 avril 2015 at 1:09

     

    svp j’ai récu un message qui dit simulation is not running in real time due to execssive cpu load
    quoi faire ?? si quoi la solution et merci infiniment pour votre aide

  • jacob says on: 28 juillet 2016 at 6:05

     

    j’ai une erreur de compilation que je ne comprends pas:
    Arduino : 1.6.9 (Windows XP), Carte : « Arduino/Genuino Uno »

    C:\Program Files\Arduino\arduino-builder -dump-prefs -logger=machine -hardware « C:\Program Files\Arduino\hardware » -hardware « C:\Documents and Settings\MICHEL\Local Settings\Application Data\Arduino15\packages » -tools « C:\Program Files\Arduino\tools-builder » -tools « C:\Program Files\Arduino\hardware\tools\avr » -tools « C:\Documents and Settings\MICHEL\Local Settings\Application Data\Arduino15\packages » -built-in-libraries « C:\Program Files\Arduino\libraries » -libraries « C:\Documents and Settings\MICHEL\Mes documents\Arduino\libraries » -fqbn=arduino:avr:uno -vid-pid=0X2341_0X0243 -ide-version=10609 -build-path « C:\DOCUME~1\MICHEL\LOCALS~1\Temp\buildfc2823ae0aee9b3dd7b63a7be1370228.tmp » -warnings=all -prefs=build.warn_data_percentage=75 -verbose « C:\Documents and Settings\MICHEL\Mes documents\Arduino\montage_dht11_lcd_poto\montage_dht11_lcd_poto.ino »
    GetFileAttributesEx C:\Documents and Settings\MICHEL\Mes documents\Arduino\montage_dht11_lcd_poto\montage_dht11_lcd_poto.ino: Le fichier spécifié est introuvable.

    Error compiling for board Arduino/Genuino Uno.
    Bibliothèque non valide trouvée dans C:\Documents and Settings\MICHEL\Mes documents\Arduino\libraries\sketch_my_dht11 : C:\Documents and Settings\MICHEL\Mes documents\Arduino\libraries\sketch_my_dht11
    Bibliothèque non valide trouvée dans C:\Documents and Settings\MICHEL\Mes documents\Arduino\libraries\sketch_my_dht11 : C:\Documents and Settings\MICHEL\Mes documents\Arduino\libraries\sketch_my_dht11

  • Maher rebai says on: 26 novembre 2016 at 9:32

     

    On a un problema ou niveau da insalition de programme on folat temperateur « #include « 

  • DJAFI says on: 8 mars 2017 at 9:49

     

    salut
    as que ce programme détermine la température max et min est déclenche le ventilateur

  • patrick says on: 7 décembre 2017 at 3:59

     

    bonjour,
    quand je vérifie Temperature_HUmidity_§
    dans arduino
    ca me mets erreur de compilation pour la carte Arduino/Genuino Uno si vous pouvez me guider
    merci

Your email address will not be published. Required fields are marked *

*

Total-Informatique

Le blog de sablier94