Suchcode

Anzeige der Temperatur von einem HTU21D als Balkendiagramm auf einem LCD

Anzeige der Temperatur von einem HTU21D als Balkendiagramm auf einem LCD

In diesem Tutorial werden wir lernen, wie man Temperaturmesswerte von einem HTU21D-Temperatur- und Feuchtigkeitssensor auf einem LCD-Bildschirm in Form eines Balkendiagramms darstellt. Die Messwerte umfassen Werte in Celsius, Fahrenheit, Kelvin und relativer Feuchtigkeit und bieten einen umfassenden Überblick über die Umweltbedingungen. Dieses Projekt wird Ihnen helfen, zu verstehen, wie man die Komponenten korrekt anschließt und den notwendigen Code umsetzt, um alles reibungslos zum Laufen zu bringen.

HTU21D module

Für diejenigen, die eine visuelle Anleitung möchten, sollte das Video, das mit diesem Tutorial verbunden ist, angesehen werden (im Video bei 00:00).

Hardware erklärt

Die Hauptbestandteile dieses Projekts umfassen den HTU21D-Sensor und das LCD 1602-Display. Der HTU21D ist ein digitaler Feuchtigkeits- und Temperatursensor, der über I2C kommuniziert. Er liefert genaue Messwerte für Temperatur und Feuchtigkeit, die über seine Bibliothek leicht abgerufen werden können. Das LCD 1602-Display hingegen zeigt die Werte in einem für Menschen lesbaren Format an, wodurch eine schnelle Einschätzung der Umweltbedingungen ermöglicht wird.

Der HTU21D verwendet eine einfache I2C-Schnittstelle, die es erleichtert, Mikrocontroller wie Arduino zu verbinden und zu kommunizieren. Das LCD 1602-Display verwendet ebenfalls I2C, was die Verdrahtung vereinfacht, indem die Anzahl der benötigten Pins zur Verbindung mit dem Arduino reduziert wird. Dies ermöglicht eine sauberere Einrichtung, während trotzdem eine klare visuelle Ausgabe bereitgestellt wird.

Datenblattdetails

HerstellerAdafruit
TeilenummerHTU21D
Logik/Eingangsspannung3,3 V (typ.)
Versorgungsspannung1,5 - 3,6 V
Temperaturbereich-40 bis 125 °C
Luftfeuchtigkeitsbereich0 bis 100 % RH
Auflösung0,01 °C / 0,04 %RH
KommunikationI2C
Paket4-Pin LGA

  • Verwenden Sie 3,3 V zur Stromversorgung des HTU21D; eine Verbindung mit 5 V kann ihn beschädigen.
  • Stellen Sie sicher, dass geeignete Pull-up-Widerstände an den I2C-Leitungen (SDA und SCL) verwendet werden.
  • Halten Sie den Sensor während des Tests von Wärmequellen fern.
  • Überprüfen Sie die korrekte I2C-Adresse mit einem I2C-Scanner-Sketch.
  • Stellen Sie sicher, dass das LCD korrekt mit der richtigen Adresse initialisiert ist.

Verkabelungsanweisungen

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD

Um den HTU21D-Sensor und das LCD 1602-Display zu verdrahten, befolgen Sie diese Schritte sorgfältig:

Zuerst den HTU21D-Sensor anschließen. Den ersten Pin (VCC) mit dem 3,3 V-Pin des Arduino verbinden. Der zweite Pin (GND) sollte mit der Erde (GND) des Arduino verbunden werden. Der dritte Pin (SDA) wird mit dem A4-Pin des Arduino verbunden, und der vierte Pin (SCL) verbindet sich mit dem A5-Pin. Achten Sie darauf, die richtigen Drahtfarben zur besseren Übersichtlichkeit zu verwenden: Rot für VCC, Schwarz für GND, Orange für SDA und Gelb für SCL.

Als Nächstes verbinden Sie für das LCD 1602 Display den VCC-Pin mit dem 5 V-Pin des Arduino und den GND-Pin mit der Erde. Der SDA-Pin des LCD sollte mit demselben A4-Pin verbunden werden, der für den HTU21D verwendet wird, und der SCL-Pin sollte mit dem A5-Pin verbunden werden. Diese Konfiguration ermöglicht es sowohl dem Sensor als auch dem Display, über das I2C-Protokoll zu kommunizieren.

Code-Beispiele und Anleitung

Im Code ist der erste Schritt, die notwendigen Bibliotheken für den Sensor und das LCD einzubinden. Die Zeile#include ist für die I2C-Kommunikation unerlässlich, während#include "Adafruit_HTU21DF.h"initialisiert den HTU21D-Sensor. Die nächste Zeile erstellt eine Instanz der HTU21D-Klasse:

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

Diese Zeile richtet den Sensor für die Verwendung im Programm ein, sodass wir später seine Methoden aufrufen können, um Temperatur- und Feuchtigkeitswerte zu lesen.

Innerhalb dersetup()Funktion, wir initialisieren den seriellen Monitor und das LCD-Display. Die folgenden Zeilen überprüfen, ob der Sensor korrekt funktioniert:

if (htu.begin()) {
    lcd.print("HTU21DF Bargraph");  
} else {
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
}

Wenn der Sensor nicht initialisiert werden kann, zeigt das Programm eine Fehlermeldung an und stoppt die Ausführung. Dies ist entscheidend für die Fehlersuche und stellt sicher, dass der Sensor richtig angeschlossen ist.

Imloop()Funktion, Temperaturmessungen werden durchgeführt und angezeigt. Die Liniefloat T = getHTU('H');ruft die Temperatur oder die Luftfeuchtigkeit basierend auf dem übergebenen Parameter ab. Der abgerufene Wert wird dann auf dem LCD angezeigt:

lcd.setCursor (0,1); 
lcd.print(T); // print  
lcd.print((char)223); // prints degree symbol
lcd.print("C"); //

Dieser Code positioniert den Cursor in der zweiten Zeile des LCD und gibt den Temperaturwert zusammen mit dem Gradzeichen aus. Die Verwendung von(char)223ist ein nützlicher Trick, um das Grad-Symbol auf dem LCD anzuzeigen.

Demonstration / Was zu erwarten ist

Sobald alles eingerichtet und der Code hochgeladen ist, sollten die Temperaturmessungen auf dem LCD als Balkendiagramm angezeigt werden. Die Messwerte werden kontinuierlich aktualisiert und spiegeln die aktuelle Temperatur und Luftfeuchtigkeit wider. Wenn Sie heiße Luft auf den Sensor blasen, werden Sie sehen, wie die Temperatur schnell ansteigt, was bestätigt, dass das System wie erwartet funktioniert. Seien Sie vorsichtig bei umgekehrter Polarität oder falscher Verdrahtung, da dies zu Fehlfunktionen oder Schäden führen kann (im Video bei 02:30).

Video-Zeitstempel

  • 00:00- Einführung
  • 01:30- Verkabelungserklärung
  • 02:30- Code-Durchgang
  • 04:00- Demonstration
  • 05:30- Fazit

Bilder

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
214-Arduino code using HTU21D-F Humidity & Temperature on LCD bargraph
Sprache: C++
/* 
 *  Display Temperature from HTU21D(F) on LCD as bargraph
 *  Written and Updated by Ahmad Shamshiri on July 18, 2019
 *  for Robojax in Ajax, Ontario, Canada
  Watch Video tutorial for this code: https://youtu.be/kpGvzNWLHuk

  Must watch: 
  1- Introduction to HTU21DF
  https://youtu.be/Q5y18rgTAhA
  2- LCD1602-I2C video: https://youtu.be/q9YC_GVHy5A
  
 *  Original Sources: 
 *  LCD library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 *  Bargraph library from https://playground.arduino.cc/Code/LcdBarGraph/
 *  
 *  


- (GND) to GND
+ (VDD) to 3.3V

(WARNING: Do not connect + to 5V or the sensor will be damaged!)

*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();

#define maxValue 160 // is the value in celsius or fahrenheit set in line above

// LCD settings
#include <LiquidCrystal_I2C.h>
byte lcdNumCols = 16; // -- number of columns in the LCD
byte lcdLine = 2; // -- number of lines in the LCD

LiquidCrystal_I2C lcd(0x3f,lcdNumCols,lcdLine); //0x3f is address for I2C
                  // to get I2C address, run I2C Scanner. 
                  //Link is provided (in same page as this code) at http://robojax.com/learn/arduino
// bargraph settings
#include <LcdBarGraphRobojax.h>
LcdBarGraphRobojax robojax(&lcd, 16, 0, 0);  // -- creating 16 character long bargraph starting at char 0 of line 0 (see video)



void setup()
{
  Serial.begin(9600);//initialize serial monitor
 // -- initializing the LCD
  lcd.begin();
  lcd.clear();
  lcd.print("Robojax"); 
   
 
  // Initialize the sensor (it is important to get calibration values stored on the device).

  if (htu.begin())
  {
   lcd.setCursor (0,1); //  
    lcd.print("HTU21DF Bargraph");  
  }else {
    lcd.setCursor (0,1); //  
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
  }
  // -- give user some time to read the text above
  delay(2000);
  lcd.clear();  
}// setup

void loop()
{
 // Robojax HTU21DF Bargraph main loop

 robojax.clearLine(1);// clear line 1 to display fresh temperature
 float T = getHTU('H');// get the temperature
 float Tgraph=T;

     if( Tgraph > maxValue){   
        Tgraph =0;
     }
        robojax.drawValue( Tgraph, maxValue);// draw the bargraph     
      // Print out the measurement:
      Serial.print("temperature: ");
      Serial.print(T,2);


      lcd.setCursor (0,1); //
      if(T< maxValue){       
       lcd.print("Temp.:"); 
       //lcd.print("Humi.:"); 
      }else{
       lcd.print("Max.:"); 
      }
      lcd.setCursor (7,1); //
      lcd.print(T); // print  
      lcd.print((char)223);// prints degree symbol
      //lcd.print("%");// prints degree symbol      
      lcd.print("C");//

 
delay(500);
}


/*
 * @brief returns temperature or relative humidity
 * @param "type" is a 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 the 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')
   {
    if(rel_hum<0){rel_hum =0;}//prevents it from negative value
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//

Dateien📁

Datenblatt (pdf)