Code de recherche

Leçon 35-2 : Utilisation du capteur de température HTU21D - Code personnalisé

Leçon 35-2 : Utilisation du capteur de température HTU21D - Code personnalisé

Dans ce tutoriel, nous allons explorer comment utiliser le capteur de température HTU21D avec Arduino pour mesurer la température et l'humidité. Le HTU21D est un capteur fiable et à faible consommation d'énergie qui communique via I2C, ce qui le rend facile à intégrer dans vos projets. À la fin de cette leçon, vous aurez un code fonctionnel qui lit la température en Celsius, Fahrenheit et Kelvin, ainsi que l'humidité relative.

HTU21D module

Avant de plonger dans le câblage et le code, il est essentiel de comprendre les composants impliqués. Le capteur HTU21D nécessite des connexions minimales : alimentation, masse et deux fils I2C pour le transfert de données. Cette simplicité en fait un excellent choix pour diverses applications, des stations météorologiques aux dispositifs domotiques. Pour un guide visuel, consultez la vidéo à l'heure 03:45.

Matériel expliqué

Le composant principal de ce projet est le capteur HTU21D, qui mesure la température et l'humidité. Ce capteur peut fonctionner avec des tensions allant de 1,5 V à 3,6 V, ce qui le rend polyvalent pour différentes applications. Il fournit des lectures à haute résolution, avec des mesures de température allant de -40 °C à +125 °C et des lectures d'humidité avec une résolution de 0,04 %.

De plus, le capteur utilise la communication I2C, qui nécessite deux broches : SDA (ligne de données) et SCL (ligne d'horloge). Cela permet une intégration facile avec Arduino et d'autres microcontrôleurs sans nécessiter un câblage complexe. La bibliothèque Adafruit simplifie l'interaction avec le capteur, gérant la récupération des données et les protocoles de communication sans effort.

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
Consommation actuelle (au repos)0,02 µA (typ.)
Consommation actuelle (active)450 µA (typ.)
Plage de température-40 à +125 °C
Plage d'humidité0 à 100 %HR
Résolution0,04 %HR; 0,01 °C
Paquet6 broches DFN

  • Assurez une alimentation correcte pour éviter d'endommager le capteur.
  • Utilisez des résistances de tirage sur les lignes SDA et SCL si elles ne sont pas intégrées.
  • Gardez les connexions des capteurs courtes pour minimiser le bruit.
  • Surveillez la tension pendant le fonctionnement pour maintenir la stabilité.
  • Envisagez d'utiliser un condensateur pour le découplage près des broches d'alimentation.

Instructions de câblage

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

Pour câbler le capteur de température HTU21D, commencez par connecter l'alimentation et la masse. Connectez la broche gauche du capteur à une source de 3,3 V, en vous assurant qu'elle peut supporter la tension requise. La deuxième broche, généralement marquée en rouge, doit aller à la masse.

Ensuite, connectez la broche SDA du capteur à la brocheA4sur l'Arduino, qui sert de ligne de données pour la communication I2C. Ensuite, connectez la broche SCL à la brocheA5, qui agit comme la ligne d'horloge. Assurez-vous que ces connexions sont sécurisées, car des fils desserrés peuvent entraîner des lectures intermittentes ou un échec de communication avec le capteur.

Exemples de code et guide étape par étape

Dans le code, nous commençons par inclure les bibliothèques nécessaires et par initialiser le capteur. La ligneAdafruit_HTU21DF htu = Adafruit_HTU21DF();crée une instance de la classe capteur. Dans lesetup()fonction, nous démarrons la communication série et vérifions si le capteur est correctement connecté.

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

Ce fragment vérifie si le capteur fonctionne correctement. Si ce n'est pas le cas, il affiche un message d'erreur et interrompt le programme. Dans leloop()fonction, nous lisons les valeurs de température et d'humidité en continu.

void loop() {
    Serial.print(getHTU('C'));
    Serial.print("C");
    Serial.print(getHTU('H'));
    Serial.println("%");
    delay(1000);
}

Ici, la fonctiongetHTU()est appelé avec différents paramètres pour récupérer la température en Celsius et l'humidité. Le retard garantit que les relevés sont effectués chaque seconde, offrant une sortie fluide sur le moniteur série. Le code complet est disponible en référence sous l'article.

Démonstration / À quoi s'attendre

Une fois que tout est câblé correctement et que le code est téléchargé, vous devriez voir les relevés de température et d'humidité s'afficher dans le moniteur série. La température sera affichée en degrés Celsius, suivie du pourcentage d'humidité correspondant. Si vous appliquez de la chaleur au capteur, vous devriez observer la température augmenter en conséquence (dans la vidéo à 10:15).

Faites attention aux limites du capteur ; si la température dépasse 125 °C, il peut donner une lecture incorrecte ou afficher zéro. Assurez-vous toujours que vos connexions sont sécurisées et que le capteur est alimenté correctement pour éviter tout problème pendant son fonctionnement.

Horodatages de vidéo

  • 00:00Introduction
  • 03:45Câblage du capteur
  • 05:30Examen du code
  • 10:15Démonstration
  • 12:00Conclusion

Images

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
513-Lesson 35: Using HTU21D Temperature Sensor (F, C, K, RH)
Langue: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 35: HTU21D Temperature Sensor Custom code
 
 * Written/Updated by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada

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

 
**************************************************
*
  This is an example for the HTU21D-F Humidity & Temperature 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
 ***************************************************
*/

#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();

void setup() {
//Get the code for the course: http://robojax.com/L/?id=339  	
  Serial.begin(9600);
  Serial.println("Robojax.com");
  Serial.println("HTU21D-F test");

  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

void loop() {
//Get the code for the course: http://robojax.com/L/?id=339  
    Serial.print(getHTU('C'));
    printDegree();
    Serial.println("C");
    
    Serial.print(getHTU('F'));
    printDegree();
    Serial.println("F");

    Serial.print(getHTU('K'));
    Serial.println("K");    
    Serial.println(" ");  

    Serial.print("Humidity:");
    Serial.print(getHTU('H'));
    Serial.println("%");

    if(getHTU('C') <81)
    {
      //digitalWrite(5, LOW);
          
    }
    delay(1000);
}


/*
 * @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;
}//


/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
 void printDegree()
{
    Serial.print("\xC2"); 
    Serial.print("\xB0");  
}

Ce dont vous pourriez avoir besoin

Fichiers📁

Fiche technique (pdf)