Code de recherche

Leçon 36 : Utilisation du capteur de température HTU21D avec un écran LCD Arduino Cours étape par étape

Leçon 36 : Utilisation du capteur de température HTU21D avec un écran LCD Arduino Cours étape par étape

Le capteur de température et d'humidité HTU21D est un choix populaire pour de nombreux projets Arduino en raison de sa facilité d'utilisation et de sa précision. Dans cette leçon, nous allons créer un projet simple qui lit les données de température et d'humidité du capteur et les affiche sur un écran LCD. À la fin de ce tutoriel, vous aurez une configuration fonctionnelle qui affiche en continu la température en Celsius, Fahrenheit et Kelvin, ainsi que le pourcentage d'humidité relative. Pour plus de précisions, vous pouvez consulter la vidéo (dans la vidéo à mm:ss).

Matériel expliqué

Le composant principal de ce projet est le capteur de température et d'humidité HTU21D, qui communique via I2C. Ce capteur fonctionne dans une plage de tension de 1,5 à 3,6 volts, ce qui le rend adapté à la fois aux systèmes 3,3V et 5V. Il consomme très peu d'énergie, typiquement seulement 0,02 microampères au repos et 450 microampères pendant la mesure. En plus du HTU21D, nous utiliserons également un affichage LCD, en particulier le LCD1602 avec I2C. Cet affichage permet une sortie facile des données textuelles et nécessite seulement deux broches pour la communication : SDA (ligne de données) et SCL (ligne d'horloge). La combinaison de ces composants nous permettra de créer un affichage informatif pour surveiller les niveaux de température et d'humidité.

Détails de la fiche technique

FabricantTE Connectivity
Numéro de pièceHTU21D-F
Tension logique/IO1,5 - 3,6 V
Tension d'alimentation3,3 V (typ.)
Intensité du courant de sortie (typ.)0,02 µA (au repos), 450 µA (mesure)
Plage de température-40 à +125 °C
Plage d'humidité0 à 100 %HR
Résolution (Température)0,01 °C
Résolution (Humidité)0,04 %HR
ColisDFN-6

  • Utilisez une résistance de tirage pour les lignes SDA et SCL si elles ne sont pas intégrées.
  • Assurez-vous de la bonne tension d'alimentation pour éviter d'endommager le capteur.
  • Maintenez un câblage approprié pour éviter les erreurs de communication.
  • Vérifiez l'adresse I2C si le capteur ne répond pas.
  • Utilisez un délai entre les lectures pour éviter la surcharge du capteur.
  • Assurez-vous que l'affichage LCD est compatible avec la communication I2C.

Instructions de câblage

Pour câbler le capteur HTU21D et l'écran LCD, commencez par les connexions d'alimentation. Connectez la broche de gauche du HTU21D à la source d'alimentation de 3,3V et la seconde broche (souvent rouge) à la terre. Ensuite, connectez la broche SDA du HTU21D à la broche analogique A4 de l'Arduino, et la broche SCL à la broche analogique A5. Pour l'écran LCD1602, connectez la broche VCC à la même source d'alimentation de 3,3V et connectez la broche GND à la terre. La broche SDA sur l'écran LCD doit également être connectée à A4, et la broche SCL doit être connectée à A5, permettant aux deux composants de partager le bus I2C. Assurez-vous que toutes les connexions sont sécurisées pour faciliter une communication adéquate entre l'Arduino, le capteur et l'écran.

Exemples de code et guide étape par étape

Le code suivant initialise le capteur HTU21D et l'affichage LCD. Dans la fonction de configuration, l'écran LCD est préparé à être utilisé et le capteur est vérifié pour sa connectivité :

void setup() {
  lcd.begin();
  lcd.backlight();
  if (!htu.begin()) {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("sensor missing"); 
      while (1);
  } else {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("Demo"); 
  }
  delay(2000);   
}

Cet extrait vérifie si le capteur est correctement connecté. Sinon, il affiche un message d'erreur sur l'écran LCD et interrompt le programme. Si le capteur fonctionne, il affiche un message de démonstration pendant deux secondes. La fonction de boucle est l'endroit où se font les principales lectures et affichages. Ici, nous appelons la fonction `lcdDisplay` pour montrer la température dans différentes unités :

void loop() {
   lcd.clear(); // clear previous values from screen
   lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');  
   lcdDisplay(0, 1, "Fahrenheit: ", 10, 1, getHTU('F'), 'd');     
   delay(5000);
}

Dans cette boucle, l'écran LCD est effacé et les lectures de température en Celsius et en Fahrenheit sont affichées. La fonction `getHTU` est appelée avec le caractère 'C' pour Celsius et 'F' pour Fahrenheit, respectivement. Enfin, la fonction `getHTU` est définie pour lire la température ou l'humidité en fonction du caractère d'entrée :

float getHTU(char type) {
   float temp = htu.readTemperature();
   float rel_hum = htu.readHumidity();
   if(type =='F') {
       return temp * 9/5 + 32; // convert to Fahrenheit 
   } else if(type =='K') {
       return temp + 273.15; // convert to Kelvin
   } else if(type =='H') {
       return rel_hum; // return relative humidity
   } else {
       return temp; // return Celsius
   }
}

Cette fonction lit la température et l'humidité du capteur et convertit la température dans l'unité demandée. Assurez-vous de consulter le code complet chargé sous l'article pour plus de détails.

Démonstration / À quoi s'attendre

Une fois le câblage terminé et le code téléchargé, vous devriez voir les valeurs de température et d'humidité affichées sur l'écran LCD. Les relevés se mettront à jour toutes les quelques secondes, reflétant les conditions actuelles. Si vous appliquez de la chaleur au capteur, vous devriez remarquer que la température augmente en conséquence, tandis que l'humidité devrait diminuer légèrement. Soyez conscient de la limite de température maximale du capteur; dépasser cela peut entraîner des relevés inexactes ou une défaillance du capteur (dans la vidéo à mm:ss).

Horodatages vidéo

  • 00:00- Introduction au projet
  • 01:15- Instructions de câblage
  • 03:30- Revue de code
  • 10:00- Démonstration de la configuration
511-Lesson 36: Using the HTU21D Temperature Sensor with an LCD and Arduino: A Step-by-Step Course
Langue: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 36: HTU21D Temperature Sensor with LCD1602 and LCD2004 Display
 


 * Display Temperature from HTU21DF on LCD1602-I2C or LCD2004
 * Updated by Ahmad Shamshiri on July 13, 2019



  Please watch video instructions here https://youtu.be/SrFJKbmiaPM
 This code is available at http://robojax.com/course1/?vid=lecture36
 
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  

If you found this tutorial helpful, please support me so I can continue creating 
and make a donation using PayPal http://robojax.com/L/?id=64



*
  This is an example for the HTU21D-F Humidity & Temp Sensor

  Designed specifically to work with the HTU21D-F sensor from Adafruit
  ----> https://www.adafruit.com/products/1899

  These displays use I2C to communicate; 2 pins are required to
  interface

 Watch Introduction to a 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place.
Visit my course now http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 
or make a donation using PayPal http://robojax.com/L/?id=64

 * Code is available at http://robojax.com/learn/arduino

 * 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 downloaded 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/>. 

*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"

// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

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

void setup() {
	//Get the code for the course: http://robojax.com/L/?id=339  
  lcd.begin();  
  lcd.backlight();
  if (!htu.begin()) {
      lcd.print("Robojax HTUD1DF");
      lcd.setCursor(0,1);
      lcd.print("sensor missing"); 
    while (1);
  }else{
  // initialize the LCD

  lcd.print("Robojax HTUD1DF");
  lcd.setCursor(0,1);
  lcd.print("Demo"); 
  }
  delay(2000);   
}

void loop() {
//Get the code for the course: http://robojax.com/L/?id=339  	
   lcd.clear();// clear previous values from screen
lcdDisplay(
             // to print Celsius:
             0, // character 0 
             0, // line 0
             "Celsius: ", 

             // to print Celsius
             10, // character 10
             0, // line 0
             getHTU('C'),
             'd'
             );  

  lcdDisplay(
             // to print fahrenheit:
             0, // character 0 
             1, // line 1
             "Fahrenheit: ", 

             // to print Fahrenheit
             10, // character 9
             1, // line 0
             getHTU('F'),
             'd'
             );     
    delay(5000);
lcdDisplay(
             // to print Kelvin:
             0, // character 0 
             0, // line 0
             "Kelvin: ", 

             // to print Celsius
             9, // character 10
             0, // line 0
             getHTU('K'),
             'k'
             );      
  lcdDisplay(
             // to print humidity text
             0, // character 0 
             1, // line 1
             "Humidity: ", 

             // to print humidity
             10, // character 9
             1, // line 1
             getHTU('H'),
             '%' 
             );  
   
        delay(5000);
}

/*
 * @brief returns temperature or relative humidity
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 *     H = Humidity
 * @return returns one of the values above
 * Usage: to get Fahrenheit type: getHTU('F')
 * to print it on serial monitor Serial.println(getHTU('F'));
 * Written by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada
 * www.Robojax.com 
 */
float getHTU(char type)
{
	//Get the code for the course: http://robojax.com/L/?id=339  
  float value;
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
   if(type =='F')
   {
    value = temp *9/5 + 32;//convert to Fahrenheit 
   }else if(type =='K')
   {
    value = temp + 273.15;//convert to Kelvin
   }else if(type =='H')
   {
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//


/*
 * lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
 * displays value and title on LCD1602
 * How to use:
 * If you want to display: "Voltage: 13.56mV" starting from the first character
 * on the second row.
 * use:
 * lcdDisplay(0, 1, "Voltage: ", 13.56,'d')
 *   
 *   'd' is degree symbol
 * tc  is character number  (0)
 * tr is row in the lcd (1)
 * title is the text (Voltage:)
 * vc value for character 
 * vr value for  row or line
 * value is the value (13.56)
 */
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
   // Robojax.com LCD1602 for HTU21D Demo
   lcd.setCursor (tc,tr); //
   lcd.print(title);
   
   lcd.setCursor (vc,vr); //
   lcd.print(value);
   if(symbol == 'd')
   {
    lcd.print((char)223);
   }else if(symbol =='%')
   {
    lcd.print("%");
   }else if(symbol =='k')
   {
    lcd.print("K");
   }
 // Robojax.com LCD1602 for HTU21D Demo
}

Ce dont vous pourriez avoir besoin

Fichiers📁

Fiche technique (pdf)