Suchcode

Lektion 35-1: Verwendung des HTU21D Temperatursensors

Lektion 35-1: Verwendung des HTU21D Temperatursensors

In diesem Tutorial werden wir erkunden, wie man den HTU21D Temperatur- und Feuchtigkeitssensor mit einem Arduino verwendet. Der HTU21D ist ein kompakter Sensor, der über I2C kommuniziert, was die Ansteuerung von Mikrocontrollern einfach macht. Am Ende dieser Lektion werden Sie in der Lage sein, Temperatur- und Feuchtigkeitswerte zu lesen und sie über den seriellen Monitor des Arduino anzuzeigen.

HTU21D module

Für dieses Projekt werden wir die Adafruit-Bibliothek nutzen, die speziell für den HTU21D-Sensor entwickelt wurde. Die Bibliothek vereinfacht den Prozess des Lesens von Sensordaten, sodass wir uns auf die Integration des Sensors in unsere Projekte konzentrieren können. Sie können die Temperaturmessungen des Sensors in Celsius, Fahrenheit und Kelvin sowie den relativen Feuchtigkeitsprozentsatz (im Video bei 03:15) erwarten.

Hardware erklärt

Die Hauptkomponente für dieses Projekt ist der HTU21D Temperatur- und Feuchtigkeitssensor. Dieser Sensor arbeitet mit einer Versorgungsspannung von 1,5 bis 3,6 Volt und verbraucht sehr wenig Strom, was ihn ideal für batteriebetriebene Geräte macht. Er kommuniziert mit dem Arduino über das I2C-Protokoll und benötigt nur zwei Datenleitungen: SDA für Daten und SCL für den Takt.

Um den Sensor mit Strom zu versorgen, werden wir ihn entweder an eine 3,3V- oder 5V-Quelle anschließen, abhängig von dem spezifischen Modul, das Sie verwenden. Die Adafruit-Version enthält einen Spannungsregler, der es ermöglicht, mit beiden Spannungspegeln nahtlos zu arbeiten. Diese Flexibilität macht es zu einer hervorragenden Wahl für verschiedene Anwendungen.

Datenblatt Einzelheiten

HerstellerTE Connectivity
TeilenummerHTU21D-F
Logik/IO-Spannung1,5 - 3,6 V
Versorgungsspannung3,3 V (typ.)
Aktueller Verbrauch (Leerlauf)0,02 µA
Stromverbrauch (Messung)450 µA (typ.)
Temperaturbereich-40 bis +125 °C
Feuchtigkeitsauflösung0,04 %
Paket6-poliger DFN

  • Stellen Sie die richtigen Spannungspegel sicher, um zu verhindern, dass der Sensor beschädigt wird.
  • Verwenden Sie Pull-up-Widerstände an den I2C-Leitungen, falls nicht im Modul enthalten.
  • Halten Sie die Kabel kurz, um Interferenzen mit der I2C-Kommunikation zu minimieren.
  • Berücksichtigen Sie die Wärmeableitung, wenn Sie in Hochtemperaturumgebungen verwenden.
  • Überprüfen Sie die Ausrichtung des Sensors, um die korrekten Pinverbindungen sicherzustellen.

Verdrahtungsanleitung

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

Um den HTU21D-Sensor an Ihr Arduino anzuschließen, beginnen Sie damit, den VCC-Pin des Sensors mit dem 3,3V-Stromanschluss am Arduino zu verbinden. Verbinden Sie dann den GND-Pin des Sensors mit dem Erdungsanschluss (GND) am Arduino. Anschließend verbinden Sie den SDA-Pin des Sensors mit dem analogen Pin A4 des Arduino, der als I2C-Datenleitung dient. Schließlich verbinden Sie den SCL-Pin des Sensors mit dem analogen Pin A5, der als I2C-Taktleitung fungiert. Stellen Sie sicher, dass Ihre Verbindungen sicher sind, um unterbrochene Messwerte zu vermeiden.

Zur Klarheit, wenn Sie ein anderes Board verwenden, stellen Sie sicher, dass Sie die richtigen Pins für SDA und SCL identifizieren, da diese variieren können. Diese Verkabelung ermöglicht es dem Arduino, effektiv mit dem HTU21D-Sensor zu kommunizieren (im Video bei 05:00).

Codebeispiele und Anleitung

Unten steht ein Auszug aus der Setup-Funktion, die die serielle Kommunikation initialisiert und überprüft, ob der Sensor gefunden wurde:

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

Dieser Code beginnt die serielle Kommunikation mit einer Baudrate von 9600 und versucht, den HTU21D-Sensor zu initialisieren. Wenn der Sensor nicht erkannt wird, wird eine Fehlermeldung ausgegeben und die weitere Ausführung gestoppt.

Die Hauptschleife des Programms liest kontinuierlich die Temperatur- und Feuchtigkeitswerte aus:

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

In dieser Schleife rufen wir die Funktion auf.getHTUmit 'C', um die Temperatur in Celsius zu erhalten, und 'H', um die Luftfeuchtigkeit zu erhalten. Die Ergebnisse werden jede Sekunde im seriellen Monitor angezeigt. Dies ermöglicht eine Echtzeitbeobachtung der Sensordaten.

Zusätzlich haben wir eine FunktiongetHTUdas die Temperatur oder Luftfeuchtigkeit basierend auf einer Texteingabe zurückgibt:

float getHTU(char type) {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    return (type == 'H') ? rel_hum : temp;
}

Diese Funktion liest die Temperatur und die Luftfeuchtigkeit vom Sensor und gibt den entsprechenden Wert basierend auf dem angegebenen Typ zurück. Dieser modulare Ansatz hält den Code sauber und einfach zu warten.

Demonstration / Was zu erwarten ist

Nach erfolgreicher Einrichtung und Ausführung des Codes sollten die Temperatur- und Feuchtigkeitswerte im seriellen Monitor angezeigt werden. Wenn Sie Wärme auf den Sensor anwenden, sollten die Temperaturwerte entsprechend steigen, während die Feuchtigkeit möglicherweise abnimmt. Wenn die Temperatur den maximalen Bereich des Sensors überschreitet, kann es zu unerwarteten Ergebnissen kommen, wie zum Beispiel null (im Video um 12:00).

Video-Zeitstempel

  • 00:00- Einführung
  • 03:15- Sensorübersicht
  • 05:00- Verdrahtungsanweisungen
  • 10:00- Code-Durchlauf
  • 12:00- Demonstration

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
512-Lesson 35: Using HTU21D Temperature Sensor
Sprache: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 35: HTU21D Temperature Sensor
 

 * 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 & Temp 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() {
  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)