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"

 // Connectez Vin à 3-5VDC
 // Connectez GND à la terre
 // Connectez SCL à la broche d'horloge I2C (A5 sur UNO)
 // Connectez SDA à la broche de données I2C (A4 sur UNO)

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

 // début des réglages pour LCD1602 avec I2C
#include <LiquidCrystal_I2C.h>
 // Définissez l'adresse LCD sur 0x27 pour un affichage de 16 caractères et 2 lignes
LiquidCrystal_I2C lcd(0x3F, 16, 2);
 // fin des réglages pour LCD1602 avec 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{
 // initialiser l'écran LCD

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

void loop() {
   lcd.clear(); // effacer les valeurs précédentes de l'écran
lcdDisplay(
 // pour imprimer Celsius :
             0, // caractère 0
             0, // ligne 0
             "Celsius: ",

 // pour imprimer Celsius
             10, // caractère 10
             0, // ligne 0
             getHTU('C'),
             'd'
             );

  lcdDisplay(
 // pour imprimer Fahrenheit :
             0, // caractère 0
             1, // ligne 1
             "Fahrenheit: ",

 // pour imprimer Fahrenheit
             10, // personnage 9
             1, // ligne 0
             getHTU('F'),
             'd'
             );
    delay(5000);
lcdDisplay(
 // pour imprimer Kelvin :
             0, // caractère 0
             0, // ligne 0
             "Kelvin: ",

 // pour imprimer Celsius
             9, // caractère 10
             0, // ligne 0
             getHTU('K'),
             'k'
             );
  lcdDisplay(
 // pour imprimer le texte sur l'humidité
             0, // caractère 0
             1, // ligne 1
             "Humidity: ",

 // pour imprimer l'humidité
             10, // personnage 9
             1, // ligne 1
             getHTU('H'),
             '%'
             );

        delay(5000);
}

/*
 * @brief renvoie la température ou l'humidité relative
 * @param "type" est un caractère
 * C = Celsius
 * K = Kelvin
 * F = Fahrenheit
 * H = Humidité
 * @return renvoie l'une des valeurs ci-dessus
 * Utilisation : pour obtenir les degrés Fahrenheit, tapez : getHTU('F')
 * pour afficher la valeur sur un moniteur série : Serial.println(getHTU('F'));
 * Écrit par Ahmad Shamshiri le 13 juillet 2019
 * à 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; // convertir en Fahrenheit
   }else if(type =='K')
   {
    value = temp + 273.15; // convertir en Kelvin
   }else if(type =='H')
   {
    value = rel_hum; // humidité relative de retour
   }else{
    value = temp; // retour Celsius
   }
   return value;
}


/*
 * lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
 * Affiche la valeur et le titre sur l'écran LCD1602.
 * Utilisation :
 * Pour afficher « Tension : 13,56 mV » à partir du premier caractère
 * de la deuxième ligne, utilisez :
 * lcdDisplay(0, 1, « Tension : », 13,56, « d »)
 * 
 * « d » est le symbole du degré.
 * tc est le numéro du caractère (0).
 * tr est la ligne de l'écran LCD (1).
 * title est le texte (Tension :).
 * Valeur vc pour le caractère.
 * Valeur vr pour la ligne ou la ligne.
 * value est la valeur (13,56).
 */
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
 // Démo Robojax.com LCD1602 pour HTU21D
   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");
   }
 // Démo Robojax.com LCD1602 pour HTU21D
}

Ce dont vous pourriez avoir besoin

Ressources et références

Fichiers📁

Fiche technique (pdf)