Code de recherche

Leçon 20/31 : Affichage de la température et de l'humidité du DHT11 sur un écran LCD

Leçon 20/31 : Affichage de la température et de l'humidité du DHT11 sur un écran LCD

Ce tutoriel montre comment combiner un capteur de température et d'humidité DHT11 avec un afficheur LCD1602 compatible I2C pour créer une station de surveillance environnementale compacte. Au lieu de lire les données brutes du capteur depuis le moniteur série, vous apprendrez à afficher les relevés de température et d'humidité en direct sur un écran de 16x2 caractères. Ce projet est idéal pour construire une station météo de bureau, un petit moniteur de serre, ou pour ajouter un affichage local à tout projet d'automatisation domestique. L'interface I2C simplifie le câblage, ce qui en fait un projet accessible aux débutants et un ajout rapide pour les makers expérimentés.

LCD_sunFounder

Voici quelques idées pratiques de ce que vous pouvez construire avec ces connaissances :

  • Une station météo de bureau affichant les conditions actuelles de la pièce.
  • Un affichage compact pour un terrarium à reptiles ou à plantes.
  • Un affichage local pour un serveur ou un atelier.
  • Un module de base pour un système d'automatisation domestique plus complexe.

Matériel et composants

Pour réaliser ce projet, vous aurez besoin des composants suivants :

  • Arduino Uno (ou carte compatible)
  • Afficheur LCD1602 avec module d'interface I2C
  • Capteur de température et d'humidité DHT11
  • Une résistance de rappel de 4,7 kΩ ou 10 kΩ (si vous utilisez un capteur DHT11 nu)
  • Fils de connexion
  • Plaque d'essai (optionnelle, pour des connexions plus faciles)

Comprendre le LCD1602 I2C

Le LCD1602 est un afficheur de caractères courant avec 16 colonnes et 2 lignes. Le module « I2C » soudé à l'arrière de l'afficheur est la clé de sa simplicité. Ce module convertit l'interface parallèle du LCD en une interface série I2C, qui ne nécessite que deux fils pour les données (SDA et SCL) et deux pour l'alimentation (VCC et GND). Cela réduit considérablement le nombre de broches nécessaires sur votre Arduino, laissant plus de place pour d'autres capteurs et actionneurs. Le module comprend également un petit potentiomètre pour régler le contraste de l'afficheur, ce qui est essentiel pour garantir la visibilité du texte. L'adresse I2C du module peut être modifiée à l'aide des petits cavaliers de soudure (A0, A1, A2) sur la carte, permettant à plusieurs périphériques I2C de coexister sur le même bus.

Guide de câblage

LCD1602_wiring_DHT11_nopcb_bb

Connectez les composants comme indiqué sur le schéma ci-dessous. Le LCD I2C utilise les broches I2C de l'Arduino, tandis que le capteur DHT11 utilise une broche numérique.

Pour le LCD1602-I2C :

  • VCC vers Arduino 5V
  • GND vers Arduino GND
  • SDA vers Arduino A4
  • SCL vers Arduino A5

Pour le capteur DHT11 :

  • VCC (Broche 1) vers Arduino 5V
  • Data (Broche 2) vers Arduino Broche numérique 2 (avec une résistance de rappel de 10 kΩ vers 5V)
  • NC (Broche 3) - Non connecté
  • GND (Broche 4) vers Arduino GND

(dans la vidéo à 25:16)

Configuration des bibliothèques

Ce projet nécessite deux bibliothèques. La bibliothèque Wire.h fait partie de l'installation standard d'Arduino. Vous devrez installer la bibliothèque LiquidCrystal_I2C et la bibliothèque dht11. La vidéo montre comment les installer. Vous pouvez télécharger les bibliothèques à partir des liens fournis dans la description de la vidéo ou sur le site Web de Robojax. Une fois téléchargées, vous pouvez les installer via l'IDE Arduino en naviguant vers Croquis > Inclure une bibliothèque > Ajouter la bibliothèque .ZIP... et en sélectionnant les fichiers téléchargés. (dans la vidéo à 06:16)

Trouver l'adresse I2C de votre LCD

Avant de pouvoir utiliser l'afficheur, vous devez déterminer son adresse I2C. L'adresse la plus courante est 0x27 ou 0x3F, mais elle peut varier. Pour la trouver, vous pouvez utiliser un croquis de balayage I2C. C'est un programme simple qui analyse le bus I2C et signale toutes les adresses trouvées au moniteur série. Téléchargez le code de balayage, ouvrez le moniteur série à 9600 bauds, et il affichera l'adresse de votre LCD. (dans la vidéo à 08:11)

Explication du code

Cette section explique les parties clés et configurables du code. Le programme complet est disponible en téléchargement sous l'article.

Le code commence par inclure les bibliothèques nécessaires et définir les broches et objets utilisés.

// fichier d'en-tête de GetHub : https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // créer un objet de DHT11
#define dhtpin 2 // définir la broche pour connecter DHT11

// début des paramètres pour LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Définir l'adresse LCD à 0x3F pour un affichage de 16 caractères et 2 lignes
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// fin des paramètres pour LCD1602-I2C

Voici les lignes les plus importantes à configurer pour votre installation :

  • #define dhtpin 2 : Ceci définit la broche Arduino connectée à la broche de données du capteur DHT11. Changez le nombre 2 si vous utilisez une autre broche.
  • LiquidCrystal_I2C lcd(0x3F, 16, 2); : Cette ligne crée l'objet LCD. Le premier paramètre, 0x3F, est l'adresse I2C que vous avez trouvée à l'étape précédente. Les 16 et 2 définissent le nombre de colonnes et de lignes de votre afficheur. Mettez à jour l'adresse si votre balayage a trouvé une autre (par exemple, 0x27).

Le code utilise une fonction personnalisée, getTemp(), pour lire la température et la convertir en différentes unités. C'est une fonctionnalité puissante qui rend le code réutilisable pour différentes applications.

float getTemp(char type) {
    float temp = (float)DHT11.temperature;//obtenir la température
  if(type =='F')
  {
    return temp * 1.8 + 32;// convertir en Fahrenheit
  }else if(type =='K')
  {
    return temp + 274.15;// convertir en Kelvin
  }else{
   return temp; 
  }  
}

Pour utiliser cette fonction, vous l'appelez avec un argument de caractère unique représentant l'unité souhaitée. Par exemple, getTemp('C') retourne la température en Celsius, getTemp('F') la retourne en Fahrenheit, et getTemp('K') la retourne en Kelvin. La fonction lit la température brute du capteur DHT11 et applique la formule de conversion nécessaire. Cela vous permet de changer facilement l'unité affichée dans la boucle principale loop() sans réécrire la logique de lecture du capteur. La boucle principale imprime la température et l'humidité sur l'écran LCD en utilisant les fonctions lcd.setCursor() et lcd.print() pour contrôler où les valeurs apparaissent à l'écran.

Affichage du symbole du degré

Le jeu de caractères standard de l'écran LCD HD44780 ne comprend pas de symbole de degré dédié (°). Pour l'afficher, vous devez utiliser la fonction lcd.write() avec la valeur décimale du caractère de la ROM de l'écran LCD. Pour le symbole du degré, cette valeur est 223. Le code le démontre en utilisant lcd.print((char)223); pour imprimer le symbole après la valeur de température. (dans la vidéo à 30:16)

Démonstration du projet en direct

Une fois le code téléversé, l'écran affichera un message de démarrage avant de s'effacer et d'afficher la température et l'humidité actuelles. La première ligne de l'écran affiche le texte « LCD1602 DHT11 », tandis que la deuxième ligne affiche la température en Celsius, suivie du symbole du degré et de « C », puis la température en Fahrenheit, suivie du symbole du degré et de « F ». La valeur de l'humidité est imprimée sur le moniteur série. La démonstration dans la vidéo montre l'écran se mettant à jour toutes les demi-secondes pendant que le capteur est tenu, reflétant avec précision les conditions ambiantes. (dans la vidéo à 29:42)

L'affichage de la tension d'un potentiomètre sur l'écran LCD est couvert dans Leçon 20/31 : Affichage de la tension sur LCD1602.

L'utilisation du même écran LCD pour afficher la distance d'un capteur ultrasonique est couverte dans Leçon 20/31 : Utilisation de LCD1602 avec Arduino pour afficher température, tension et distance | Robojax.

Projets connexes de cette vidéo

Chapitres

  • [00:00] Introduction au LCD1602 et aperçu du projet
  • [01:30] Explication du matériel LCD1602 et du module I2C
  • [02:47] Réglage du contraste de l'écran LCD
  • [03:14] Brochage de l'écran LCD et configuration de l'adresse I2C
  • [05:28] Schéma de câblage pour le LCD1602
  • [06:16] Installation de la bibliothèque LiquidCrystal_I2C
  • [08:11] Recherche de l'adresse I2C avec un scanner
  • [09:28] Code de base pour imprimer du texte sur l'écran LCD
  • [11:10] Exemples : curseur clignotant et caractères personnalisés
  • [13:46] Création et utilisation de caractères personnalisés
  • [18:51] Exemple d'affichage série
  • [23:16] Défilement du texte sur l'écran LCD
  • [24:36] Combinaison du code du capteur DHT11 avec l'écran LCD
  • [30:16] Affichage du symbole du degré
  • [32:03] Suppression des points décimaux de la température
  • [33:00] Affichage de la tension d'un potentiomètre sur l'écran LCD
  • [35:56] Affichage de la distance d'un capteur ultrasonique

Images

LCD1602_wiring_DHT11_nopcb_bb
LCD1602_wiring_DHT11_nopcb_bb
LCD_sunFounder
LCD_sunFounder
911-Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Langue: C++
/*
Lesson 20/31: Displaying Temperature and humidity from DHT11 on  LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
 

 * This is the Arduino code for  DHT11 module to read temperature and humidity
 * This code can display temperature in:
 * C is used to get Celsius
 * F is used to get Fahrenheit
 * K is used for Kelvin

 *  * 
 * Written by Ahmad Shamshiri for Robojax
 * on Jan 04, 2018
 * Robojax.com

   Please watch video instruction here https://youtu.be/0XMLnCYkvbE
 This code is available at http://robojax.com/course1/?vid=lecture11
 
with over 100 lectures Free On  YouTube Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339 

  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

// header file from GetHub: https://github.com/adidax/dht11
#include <dht11.h>

dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11

// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C


void setup() {
    Serial.begin(9600);// setting up serial monitor

  // initialize the LCD, 
  lcd.begin();
  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (0,0); //
  lcd.print("DHT11 Sensor"); 
  delay(2000);
}

void loop() {
	//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
  DHT11.read(dhtpin);// initialize the reading
  int humidity = DHT11.humidity;// get humidity

  lcd.clear();// clear previous values from screen
  lcd.setCursor (0,0); //character zero, line 1
  lcd.print("LCD1602 DHT11"); // print text 

  // print distance in degrees C
  lcd.setCursor (0,1); //character 0, line 2
  lcd.print(getTemp('C'));// print Temperature Celsius
  lcd.setCursor (4,1); //character 5, line 2 
  lcd.print((char)223);// print degree 
  lcd.setCursor (5,1); //character 6, line 2 
  lcd.print("C");// print C
  
   // print distance degrees F
  lcd.setCursor (7,1); //character 8, line 2
  lcd.print(getTemp('F'));// print distance in cm
  lcd.setCursor (13,1); //character 14, line 2 
  lcd.print((char)223);// print degree 
  lcd.setCursor (14,1); //character 16, line 2 
  lcd.print("F");// print F 
  
  
  //code for Robojax.com video
   Serial.print(getTemp('C'));
   Serial.print("C ");
   Serial.print(getTemp('F'));
   Serial.print("F ");
   Serial.print(getTemp('K'));
   Serial.print("K ");
   Serial.print(" humidity:");
   Serial.print (humidity);
   Serial.print("% ");
   Serial.println();
 delay(500);
}


/*
 * getTemp(char type)
 * type character of upper case 
 * C is used to get Celsius
 * F is used to get Fahrenheit
 * K is used for Kelvin
 */
float getTemp(char type) {
	//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338	
    float temp = (float)DHT11.temperature;//get temp
  if(type =='F')
  {
    return temp * 1.8 + 32;// convert to Fahrenheit
  }else if(type =='K')
  {
    return temp + 274.15;// convert to Kelvin
  }else{
   return temp; 
  }
  
}

Fichiers📁

Bibliothèques Arduino (zip)

Manuel de l'Utilisateur