Code de recherche

Affichage de la température d'un HTU21D sous forme de graphique à barres sur un LCD

Affichage de la température d'un HTU21D sous forme de graphique à barres sur un LCD

Dans ce tutoriel, nous apprendrons comment afficher les relevés de température d'un capteur de température et d'humidité HTU21D sur un écran LCD sous forme de graphique à barres. Les relevés incluront des valeurs en Celsius, Fahrenheit, Kelvin et humidité relative, offrant un aperçu complet des conditions environnementales. Ce projet vous aidera à comprendre comment câbler correctement les composants et à mettre en œuvre le code nécessaire pour que tout fonctionne parfaitement.

HTU21D module

Pour ceux qui veulent un guide visuel, assurez-vous de consulter la vidéo associée à ce tutoriel (dans la vidéo à 00:00).

Matériel expliqué

Les principaux composants de ce projet comprennent le capteur HTU21D et l'écran LCD 1602. Le HTU21D est un capteur numérique d'humidité et de température qui communique via I2C. Il fournit des lectures précises de température et d'humidité, qui peuvent être facilement accessibles via sa bibliothèque. L'écran LCD 1602, quant à lui, affiche les lectures dans un format lisible par l'homme, permettant des évaluations rapides des conditions environnementales.

Le HTU21D utilise une interface I2C simple, ce qui facilite la connexion et la communication avec des microcontrôleurs comme Arduino. L'affichage LCD 1602 utilise également I2C, ce qui simplifie le câblage en réduisant le nombre de broches nécessaires pour se connecter à l'Arduino. Cela permet une configuration plus propre tout en offrant une sortie visuelle claire.

Détails de la fiche technique

FabricantAdafruit
Numéro de pièceHTU21D
Tension logique/IO3,3 V (typ.)
Tension d'alimentation1,5 - 3,6 V
Plage de températures-40 à 125 °C
Plage d'humidité0 à 100 %HR
Résolution0,01 °C / 0,04 %HR
CommunicationI2C
Paquet4 broches LGA

  • Utilisez 3,3 V pour alimenter le HTU21D ; le connecter à 5 V peut l'endommager.
  • Assurez-vous d'utiliser des résistances de tirage appropriées sur les lignes I2C (SDA et SCL).
  • Éloignez le capteur des sources de chaleur pendant les tests.
  • Vérifiez l'adresse I2C correcte à l'aide d'un sketch de scanner I2C.
  • Assurez-vous que l'écran LCD est correctement initialisé avec la bonne adresse.

Instructions de câblage

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD

Pour connecter le capteur HTU21D et l'afficheur LCD 1602, suivez ces étapes attentivement :

Tout d'abord, connectez le capteur HTU21D. Connectez la première broche (VCC) au broche 3,3 V de l'Arduino. La deuxième broche (GND) doit être connectée à la masse (GND) de l'Arduino. La troisième broche (SDA) est connectée à la broche A4 de l'Arduino, et la quatrième broche (SCL) se connecte à la broche A5. Assurez-vous d'utiliser les bonnes couleurs de fils pour plus de clarté, en utilisant le rouge pour VCC, le noir pour GND, l'orange pour SDA et le jaune pour SCL.

Ensuite, pour l'affichage LCD 1602, connectez la broche VCC à la broche 5 V sur l'Arduino et la broche GND à la terre. La broche SDA de l'écran LCD doit être connectée à la même broche A4 utilisée pour le HTU21D, et la broche SCL doit être connectée à la broche A5. Cette configuration permet au capteur et à l'affichage de communiquer via le protocole I2C.

Exemples de code et guide pas à pas

Dans le code, la première étape consiste à inclure les bibliothèques nécessaires pour le capteur et l'écran LCD. La ligne#include est essentiel pour la communication I2C, tandis que#include "Adafruit_HTU21DF.h"initialise le capteur HTU21D. La ligne suivante crée une instance de la classe HTU21D :

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

Cette ligne configure le capteur pour une utilisation dans le programme, nous permettant d'appeler ses méthodes plus tard pour lire les valeurs de température et d'humidité.

Dans lesetup()fonction, nous initialisons le moniteur série et l'affichage LCD. Les lignes suivantes vérifient si le capteur fonctionne correctement :

if (htu.begin()) {
    lcd.print("HTU21DF Bargraph");  
} else {
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
}

Si le capteur ne parvient pas à s'initialiser, le programme affichera un message d'erreur et interrompra l'exécution. Cela est crucial pour le débogage et garantit que le capteur est correctement connecté.

Dans leloop()fonction, les relevés de température sont effectués et affichés. La lignefloat T = getHTU('H');récupère la température ou l'humidité en fonction du paramètre passé. La valeur récupérée est ensuite affichée sur l'écran LCD :

lcd.setCursor (0,1); 
lcd.print(T); // print  
lcd.print((char)223); // prints degree symbol
lcd.print("C"); //

Ce code positionne le curseur sur la deuxième ligne de l'écran LCD et imprime la valeur de la température accompagnée du symbole de degré. L'utilisation de(char)223est une astuce pratique pour afficher le symbole de degré sur l'écran LCD.

Démonstration / À quoi s'attendre

Une fois tout configuré et le code téléchargé, vous devriez voir les lectures de température affichées sur l'écran LCD sous forme de graphique à barres. Les lectures se mettront à jour en continu, reflétant la température et l'humidité actuelles. Si vous soufflez de l'air chaud sur le capteur, vous constaterez que la température augmente rapidement, confirmant que le système fonctionne comme prévu. Faites attention à la polarité inversée ou au câblage incorrect, car cela peut entraîner un dysfonctionnement ou des dommages (dans la vidéo à 02:30).

Horodatages vidéo

  • 00:00- Introduction
  • 01:30- Explication du câblage
  • 02:30- Démonstration de code
  • 04:00- Démonstration
  • 05:30- Conclusion

Images

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
214-Arduino code using HTU21D-F Humidity & Temperature on LCD bargraph
Langue: C++
/* 
 *  Display Temperature from HTU21D(F) on LCD as bargraph
 *  Written and Updated by Ahmad Shamshiri on July 18, 2019
 *  for Robojax in Ajax, Ontario, Canada
  Watch Video tutorial for this code: https://youtu.be/kpGvzNWLHuk

  Must watch: 
  1- Introduction to HTU21DF
  https://youtu.be/Q5y18rgTAhA
  2- LCD1602-I2C video: https://youtu.be/q9YC_GVHy5A
  
 *  Original Sources: 
 *  LCD library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 *  Bargraph library from https://playground.arduino.cc/Code/LcdBarGraph/
 *  
 *  


- (GND) to GND
+ (VDD) to 3.3V

(WARNING: Do not connect + to 5V or the sensor will be damaged!)

*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();

#define maxValue 160 // is the value in celsius or fahrenheit set in line above

// LCD settings
#include <LiquidCrystal_I2C.h>
byte lcdNumCols = 16; // -- number of columns in the LCD
byte lcdLine = 2; // -- number of lines in the LCD

LiquidCrystal_I2C lcd(0x3f,lcdNumCols,lcdLine); //0x3f is address for I2C
                  // to get I2C address, run I2C Scanner. 
                  //Link is provided (in same page as this code) at http://robojax.com/learn/arduino
// bargraph settings
#include <LcdBarGraphRobojax.h>
LcdBarGraphRobojax robojax(&lcd, 16, 0, 0);  // -- creating 16 character long bargraph starting at char 0 of line 0 (see video)



void setup()
{
  Serial.begin(9600);//initialize serial monitor
 // -- initializing the LCD
  lcd.begin();
  lcd.clear();
  lcd.print("Robojax"); 
   
 
  // Initialize the sensor (it is important to get calibration values stored on the device).

  if (htu.begin())
  {
   lcd.setCursor (0,1); //  
    lcd.print("HTU21DF Bargraph");  
  }else {
    lcd.setCursor (0,1); //  
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
  }
  // -- give user some time to read the text above
  delay(2000);
  lcd.clear();  
}// setup

void loop()
{
 // Robojax HTU21DF Bargraph main loop

 robojax.clearLine(1);// clear line 1 to display fresh temperature
 float T = getHTU('H');// get the temperature
 float Tgraph=T;

     if( Tgraph > maxValue){   
        Tgraph =0;
     }
        robojax.drawValue( Tgraph, maxValue);// draw the bargraph     
      // Print out the measurement:
      Serial.print("temperature: ");
      Serial.print(T,2);


      lcd.setCursor (0,1); //
      if(T< maxValue){       
       lcd.print("Temp.:"); 
       //lcd.print("Humi.:"); 
      }else{
       lcd.print("Max.:"); 
      }
      lcd.setCursor (7,1); //
      lcd.print(T); // print  
      lcd.print((char)223);// prints degree symbol
      //lcd.print("%");// prints degree symbol      
      lcd.print("C");//

 
delay(500);
}


/*
 * @brief returns temperature or relative humidity
 * @param "type" is a 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 the 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)
{
  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')
   {
    if(rel_hum<0){rel_hum =0;}//prevents it from negative value
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//

Fichiers📁

Fiche technique (pdf)