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.
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
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 nombre2si 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. Les16et2dé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
- Leçon 20/31 : Utilisation de LCD1602 avec Arduino pour afficher température, tension et distance | Robojax
- Leçon 20/31 : Affichage de la tension sur LCD1602
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
/*
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;
}
}
Ce dont vous pourriez avoir besoin
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Ressources et références
-
DocumentationDocumentation pour le kit d'apprentissage IoT/Smart Car/en 3 en 1 de SunFounderdocs.sunfounder.com
-
Externe
Fichiers📁
Bibliothèques Arduino (zip)
-
Code source du kit d'apprentissage Smart Car 3-en-1 de SunFounder.
3in1-kit-main-v2.zip12.80 MB
Manuel de l'Utilisateur
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB