Code de recherche

Affichage de la température d'un HTU21D sur un écran LCD

Affichage de la température d'un HTU21D sur un écran LCD

Dans ce tutoriel, nous allons apprendre à afficher les relevés de température du capteur de température et d'humidité HTU21D sur un écran LCD. Le résultat sera une configuration fonctionnelle où la température peut être visualisée en degrés Celsius, Fahrenheit et Kelvin, avec l'humidité relative affichée sur le même écran. Ce projet vous donnera une expérience pratique avec la communication I2C et la gestion des données de capteurs de base. Pour un guide visuel détaillé, assurez-vous de regarder la vidéo (dans la vidéo à 00:00).

HTU21D module

Matériel expliqué

Les principaux composants de ce projet incluent le capteur HTU21D et l'afficheur LCD. Le HTU21D est un capteur numérique d'humidité et de température qui communique via le protocole I2C. Il fournit des mesures précises de la température en degrés Celsius ou Fahrenheit et de l'humidité relative en pourcentage. Le capteur fonctionne généralement à une tension de 3.3V mais peut également fonctionner avec des systèmes de 5V. L'afficheur LCD que nous allons utiliser est un LCD 16x2 avec une interface I2C. Ce type d'afficheur nécessite seulement deux fils pour la communication de données, ce qui facilite la connexion avec des microcontrôleurs comme Arduino. L'interface I2C permet de connecter plusieurs dispositifs sur le même bus, simplifiant le câblage et réduisant le nombre de broches utilisées.

Détails de la fiche technique

FabricantAdafruit
Numéro de pièceHTU21D-F
Tension logique/IO3,3 V (typ.)
Tension d'alimentation1,5 V à 3,6 V
Courant de sortie0,5 mA (typ.)
Courant de crête1,5 mA (max.)
Plage de température-40 à 125 °C
Plage d'humidité0 à 100 %HR
ColisDFN-6
Notes / variantesNone

  • Assurez-vous que les niveaux de tension sont corrects pour éviter d'endommager le capteur.
  • Utilisez des résistances de tirage sur les lignes SDA et SCL si nécessaire.
  • Vérifiez l'adresse I2C avec un scanner pour garantir une configuration correcte.
  • Manipulez la sortie du capteur avec soin pour éviter les erreurs de lecture.
  • Éloignez le capteur des sources de chaleur lors des mesures.

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 à l'Arduino, branchez la broche VCC du capteur à la sortie 3,3 V de l'Arduino. Ensuite, connectez la broche GND du capteur à la masse de l'Arduino. La broche SDA, qui est utilisée pour la transmission de données, doit être connectée à la broche A4 de l'Arduino. De même, connectez la broche SCL, qui est utilisée pour le signal d'horloge, à la broche A5 de l'Arduino. Assurez-vous que votre écran LCD est également correctement connecté ; l'adresse I2C pour l'écran LCD dans cette configuration est généralement 0x3F. Si vous utilisez un type d'écran LCD différent ou une adresse I2C différente, assurez-vous d'ajuster le code en conséquence. Après le câblage, vérifiez qu'il n'y a pas de connexions lâches avant d'allumer l'Arduino.

Exemples de code et guide étape par étape

Dans le code, nous commençons par inclure les bibliothèques nécessaires pour le capteur HTU21D et l'écran LCD :

#include 
#include "Adafruit_HTU21DF.h"
#include 

Cela prépare l'environnement pour utiliser à la fois le capteur et l'affichage. La bibliothèque `Adafruit_HTU21DF` gère la fonctionnalité du capteur, tandis que la bibliothèque `LiquidCrystal_I2C` gère l'écran LCD. Ensuite, nous créons une instance pour le capteur et l'écran LCD :

Adafruit_HTU21DF htu = Adafruit_HTU21DF();
LiquidCrystal_I2C lcd(0x3F, 16, 2);

Ici,htuest l'objet pour le capteur HTU21D, etlcdest l'objet pour l'afficheur LCD. L'adresse I2C pour le LCD est fixée à 0x3F, que vous devrez peut-être vérifier en fonction de votre configuration.setup()fonction, nous initialisons l'affichage à cristaux liquides et vérifions si le capteur est opérationnel :

void setup() {
  lcd.begin();  
  lcd.backlight();
  if (!htu.begin()) {
      lcd.print("Sensor missing"); 
      while (1);
  }
  lcd.print("HTU21D Ready");
}

Ce code initialise l'écran LCD et vérifie la présence du capteur. Si le capteur n'est pas détecté, il affichera "Capteur manquant" et arrêtera le programme.loop()fonction, nous lisons en continu les valeurs de température et d'humidité et les affichons :

void loop() {
   lcd.clear();
   lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');  
   lcdDisplay(0, 1, "Humidity: ", 10, 1, getHTU('H'), '%');  
   delay(5000);
}

Dans cet extrait, nous effaçons l'écran LCD, puis nous appelons lelcdDisplay()fonction pour afficher la température en Celsius et l'humidité. LegetHTU()la fonction récupère la température ou l'humidité en fonction du caractère passé.

Démonstration / À quoi s'attendre

Une fois la configuration terminée et le code téléchargé sur l'Arduino, l'écran LCD doit afficher la température actuelle en Celsius et l'humidité relative. Si tout est correctement connecté, vous verrez les valeurs se mettre à jour toutes les quelques secondes. Faites attention aux pièges courants, tels que des connexions inversées ou des adresses I2C incorrectes, qui peuvent entraîner des échecs de communication avec le capteur (dans la vidéo à 05:00).

Horodatages vidéo

  • 00:00- Introduction
  • 01:30- Instructions de câblage
  • 03:15- Explication du code
  • 04:50- Démonstration
  • 05:40- Conclusion

Images

LCD1602 ou LCD2004 avec capteur d'humidité et de température HTU21DF avec Arduino
LCD1602 ou LCD2004 avec capteur d'humidité et de température HTU21DF avec Arduino
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
213-Display Temperature from HTU21DF on LCD1602-I2C or LCD2004
Langue: C++
/*
 * Affichage de la température du HTU21DF sur LCD1602-I2C ou LCD2004
 * Mise à jour par Ahmad Shamshiri le 13 juillet 2019
 * à Ajax, Ontario, Canada
 * Regardez la vidéo explicative pour ce schéma :
 * 
 * Voici un exemple de capteur d'humidité et de température HTU21D-F
 * 
 * Spécialement conçu pour fonctionner avec le capteur HTU21D-F d'Adafruit
 * ----> https://www.adafruit.com/products/1899
 * 
 * Ces affichages utilisent l'I2C pour communiquer ; 2 broches sont nécessaires pour l'interface.
 * 
 * Regardez la vidéo d'introduction au servomoteur 360° avec le code : https://youtu.be/b_xvu6wWafA
 * Vous pouvez obtenir le schéma de câblage de ma formation Arduino sur Udemy.com.
 * Apprenez Arduino étape par étape avec toutes les bibliothèques, codes et schémas de câblage, le tout au même endroit.
 * Consultez ma formation dès maintenant : http://robojax.com/L/?id=62
 * 
 * Si ce tutoriel vous a été utile, n'hésitez pas à me soutenir pour que je puisse continuer à créer du contenu similaire.
 * Ou faites un don via PayPal : http://robojax.com/L/?id=64
 * 
 * Le code est disponible sur http://robojax.com/learn/arduino
 * 
 * Ce code est « EN L'ÉTAT » sans garantie ni responsabilité. Utilisation libre tant que vous conservez cette note.
 * Ce code a été téléchargé depuis Robojax.com.
 * Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 3, soit (à votre choix) toute version ultérieure.
 * 
 * Ce programme est distribué dans l’espoir qu’il soit utile,
 * mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de
 * QUALITÉ MARCHANDE ou d’ADÉQUATION À UN USAGE PARTICULIER. Consultez la Licence publique générale GNU pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence publique générale GNU avec ce programme. Sinon, consultez <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() {
  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() {
   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)
{
  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

Ressources et références

Fichiers📁

Fiche technique (pdf)