Suchcode

Lektion 35-2: Verwendung des HTU21D-Temperatursensors – Individueller Code

Lektion 35-2: Verwendung des HTU21D-Temperatursensors – Individueller Code

In diesem Tutorial werden wir untersuchen, wie man den HTU21D-Temperatursensor mit Arduino verwendet, um Temperatur und Luftfeuchtigkeit zu messen. Der HTU21D ist ein zuverlässiger, stromsparender Sensor, der über I2C kommuniziert und somit einfach in Ihre Projekte integriert werden kann. Am Ende dieser Lektion werden Sie einen funktionierenden Code haben, der die Temperatur in Celsius, Fahrenheit und Kelvin sowie die relative Luftfeuchtigkeit liest.

HTU21D module

Bevor wir in die Verdrahtung und den Code eintauchen, ist es wichtig, die beteiligten Komponenten zu verstehen. Der HTU21D-Sensor benötigt minimale Verbindungen: Strom, Erdung und zwei I2C-Leitungen für den Datentransfer. Diese Einfachheit macht ihn zu einer ausgezeichneten Wahl für verschiedene Anwendungen, von Wetterstationen bis hin zu Smart-Home-Geräten. Für eine visuelle Anleitung siehe das Video bei :45.

Hardware erklärt

Die Hauptkomponente dieses Projekts ist der HTU21D-Sensor, der Temperatur und Feuchtigkeit misst. Dieser Sensor kann bei Spannungen von 1,5 V bis 3,6 V betrieben werden, was ihn vielseitig für verschiedene Anwendungen macht. Er liefert hochauflösende Messwerte, wobei die Temperaturmessungen von -40 °C bis +125 °C reichen und die Feuchtigkeitsmessungen eine Auflösung von 0,04 % haben.

Zusätzlich verwendet der Sensor I2C-Kommunikation, die zwei Pins erfordert: SDA (Datenleitung) und SCL (Taktsignal). Dies ermöglicht eine einfache Integration mit Arduino und anderen Mikrocontrollern, ohne dass komplexe Verkabelungen erforderlich sind. Die Adafruit-Bibliothek vereinfacht die Interaktion mit dem Sensor, indem sie die Datenabfrage und Kommunikationsprotokolle nahtlos verwaltet.

Datenblattdetails

HerstellerTE Connectivity
TeilenummerHTU21D-F
Logik/IO-Spannung1,5 - 3,6 V
Versorgungsspannung3,3 V
Aktueller Verbrauch (Leerlauf)0,02 µA (typ.)
Aktueller Verbrauch (aktiv)450 µA (typ.)
Temperaturbereich-40 bis +125 °C
Feuchtigkeitsbereich0 bis 100 %RH
Auflösung0,04 %RH; 0,01 °C
Paket6-Pin DFN

  • Sichern Sie die richtige Stromversorgung, um Schäden an den Sensoren zu vermeiden.
  • Verwenden Sie Pull-up-Widerstände an den SDA- und SCL-Leitungen, wenn diese nicht integriert sind.
  • Halten Sie die Sensorverbindungen kurz, um Rauschen zu minimieren.
  • Überwachen Sie die Spannung während des Betriebs, um die Stabilität aufrechtzuerhalten.
  • Erwägen Sie die Verwendung eines Kondensators zur Entkopplung in der Nähe der Stromanschlüsse.

Verdrahtungsanweisungen

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

Um den HTU21D-Temperatursensor anzuschließen, beginnen Sie damit, die Stromversorgung und die Masse zu verbinden. Schließen Sie den linken Pin des Sensors an eine 3,3-V-Quelle an, wobei sichergestellt werden muss, dass diese die erforderliche Spannung verarbeiten kann. Der zweite Pin, der typischerweise rot gekennzeichnet ist, sollte mit der Masse verbunden werden.

Verbinden Sie als Nächstes den SDA-Pin des Sensors mit dem Pin.A4auf dem Arduino, der als Datenleitung für die I2C-Kommunikation dient. Verbinden Sie dann den SCL-Pin mit dem PinA5, die als Zeilenzeiger fungiert. Stellen Sie sicher, dass diese Verbindungen sicher sind, da lose Drähte zu intermittierenden Messwerten oder zu Kommunikationsproblemen mit dem Sensor führen können.

Code-Beispiele & Anleitung

Im Code beginnen wir damit, die erforderlichen Bibliotheken einzufügen und den Sensor zu initialisieren. Die ZeileAdafruit_HTU21DF htu = Adafruit_HTU21DF();erzeugt eine Instanz der Sensor-Klasse. In dersetup()Funktion, wir starten die serielle Kommunikation und überprüfen, ob der Sensor ordnungsgemäß angeschlossen ist.

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

Dieser Codeausschnitt überprüft, ob der Sensor korrekt funktioniert. Wenn nicht, wird eine Fehlermeldung ausgegeben und das Programm angehalten. In derloop()Funktion, wir lesen die Temperatur- und Feuchtigkeitswerte kontinuierlich.

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

Hier, die FunktiongetHTU()wird mit verschiedenen Parametern aufgerufen, um die Temperatur in Celsius und die Luftfeuchtigkeit abzurufen. Die Verzögerung stellt sicher, dass die Messungen jede Sekunde durchgeführt werden, was eine glatte Ausgabe auf dem seriellen Monitor ermöglicht. Der vollständige Code ist zur Referenz unter dem Artikel verfügbar.

Demonstration / Was zu erwarten ist

Sobald alles korrekt verkabelt ist und der Code hochgeladen wurde, sollten Sie die Temperatur- und Feuchtigkeitsmesswerte im seriellen Monitor angezeigt bekommen. Die Temperatur wird in Celsius angezeigt, gefolgt von dem entsprechenden Feuchtigkeitsprozentsatz. Wenn Sie Wärme auf den Sensor anwenden, sollten Sie beobachten, dass die Temperatur entsprechend ansteigt (im Video um 10:15).

Seien Sie vorsichtig mit den Grenzen des Sensors; wenn die Temperatur 125 °C überschreitet, kann er eine falsche Ablesung zurückgeben oder Null anzeigen. Stellen Sie immer sicher, dass Ihre Verbindungen sicher sind und der Sensor korrekt mit Strom versorgt wird, um Probleme während des Betriebs zu vermeiden.

Video-Zeitstempel

  • 00:00Einführung
  • 03:45Sensor anschließen
  • 05:30Code-Durchgang
  • 10:15Demonstration
  • 12:00Fazit

Bilder

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)
Sprache: 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");  
}

Dinge, die Sie vielleicht brauchen

Dateien📁

Datenblatt (pdf)