HTU21D Luftfeuchtigkeitssensor

Temperatur Module Luftfeuchtigkeit

Interessiert an der Messung von Umgebungsdaten? Sehen wir uns einen weiteren Luftfeuchtigkeits- und Temperatursensor an: den HTU21D.

HTU21D Luftfeuchtigkeitssensor

Letzte Woche haben wir uns den DTH11 und den DHT22 Luftfeuchtigkeits- und Temperatursensor angesehen. Dieses Mal werden wir uns einen anderen, viel kleineren digitalen Temperatur- und Luftfeuchtigkeitssensor ansehen: den HTU21D. Der HTU21D wird von TE Connectivity hergestellt und ist nicht nur kleiner, sondern auch etwas genauer als die DHT-Sensoren. Er weist unter normalen Betriebsbedingungen eine Temperaturgenauigkeit von ± 0,3 °C und eine typische Genauigkeit von ± 2 % für die relative Luftfeuchtigkeit auf. Die optimalen Ergebnisse werden im Temperaturbereich von 5 °C bis 60 °C und einem Luftfeuchtigkeitsbereich zwischen 20 % und 80 % relativer Luftfeuchtigkeit erzielt. Der Sensor selbst kann jedoch von -40 °C bis 125 °C arbeiten. Der maximale Luftfeuchtigkeitsbereich liegt zwischen 0 % und 100 % relativer Luftfeuchtigkeit. Über 80 °C können hohe Luftfeuchtigkeiten den Sensor jedoch beschädigen.

Wie man sieht, eignet sich der Sensor daher genauso sehr wie die DHT-Module für den Einsatz in Innenräumen. Verglichen mit dem DHT11 und dem DHT22 arbeitet das HTU21D wesentlich schneller und hat eine einstellbare Messauflösung, um die Messgeschwindigkeit weiter zu erhöhen oder den Energieverbrauch zu reduzieren. Für die meisten Arduino-Projekte sind diese Unterschiede aber ohnehin keine große Sache. Was diesen Sensor interessant macht, ist seine Größe und die verbesserte Genauigkeit. In diesem Tutorial werden wir uns das GY-21-Modul mit einem HTU21D-Sensor darauf ansehen. Das Modul ist lediglich 10 x 13 mm groß. Es gibt Variationen des GY-21-Moduls, die die Pin-zu-Pin-kompatiblen SHT21- oder Si7021-Sensoren verwenden. Diese sind fast identisch, verwenden jedoch ein anderes Timing, und die Temperaturkorrekturformel, die auf die Luftfeuchtigkeitsmessungen des HTU21D angewandt wird, ist für sie nicht dokumentiert. Aus diesem Grund gibt es keine Garantie, dass der Code aus diesem Tutorial mit diesen Sensoren funktioniert und dass die berechneten Temperatur- und Feuchtigkeitswerte korrekt sind.

Anschließen des Sensors

Der HTU21D nutzt den I2C-Bus zur Datenübertragung. I2C ist ein weit verbreiteter serieller Bus für die Inter-IC-Kommunikation und wird von den meisten Mikrocontrollern und natürlich auch vom Arduino Uno unterstützt. Zur Kommunikation wird dabei eine Datenleitung (SDA) und eine Taktleitung (SCL) verwendet. Diese Anschlüsse müssen mit den entsprechenden Pins des Arduino verbunden werden. D. h., um dieses Modul anzuschließen, muss SDA mit SDA und SCL mit SCL des Arduino verbunden werden. Außerdem muss das Modul mit Strom versorgt werden, dazu muss VIN an 5V und GND an GND angeschlossen werden. Dies ist in der untenstehenden Abbildung gezeigt.

Anschließen des HTU21D-Moduls an den Arduino Uno

Arduino Bibliothek

Für die Kommunikation mit dem Sensor benötigen wir eine Arduino-Bibliothek. Es sind verschiedene Bibliotheken für den HTU21 und die ähnlichen SHT21 und Si7021 Sensoren verfügbar. Die Bibliotheken von Sparkfun und Adafruit sind im Bibliotheksverwalter zu finden und empfehlenswert, da sie einfach zu benutzen sind. Das Problem ist, dass keine von beiden die Temperaturkorrekturformel für die Luftfeuchtigkeitsmessung implementiert. Die Bibliothek von Adafruit erlaubt es auch nicht, die Messauflösung zu ändern. Es gibt außerdem noch eine andere Bibliothek vom Hersteller des Sensors, diese ist jedoch schwer zu benutzen. Aus diesem Grund habe ich beschlossen, eine eigene Bibliothek für den Zweck dieses Tutorials zu implementieren. Den Download-Link findest du unten. Das ZIP-Archiv kann in die Arduino-IDE importiert werden, indem man auf Sketch > Bibliothek einbinden > .ZIP-Bibliothek hinzufügen ... klickt. Falls Probleme mit der Bibliothek auftreten, melde diese als "Issue" auf GitHub. Dort kann auch der Quellcode für die Bibliothek gefunden werden.

Beispielcode

Werfen wir einen Blick auf den Beispielcode. Er misst alle 5 Sekunden Temperatur und Luftfeuchtigkeit. Um die Bibliothek zu benutzen, muss die Header-Datei HTU21.h eingebunden werden. Danach kann man wie folgt eine Sensor-Instanz erzeugen:

#include <HTU21D.h>
HTU21D sensor;

Die I2C-Kommunikation muss in der setup-Prozedur durch den Aufruf von sensor.begin() initialisiert werden. In der Hauptschleife können wir die Methode measure verwenden, um eine Messung durchzuführen und das Ergebnis auszulesen. Wenn die Messung erfolgreich durchgeführt wurde, gibt die Methode true zurück. Wenn die Verbindung zum Sensor gestört ist und die Messdaten beschädigt wurden, wird false zurückgegeben. Nach einer erfolgreichen Messung kann das Ergebnis durch Aufruf von getTemperature und getHumidity abgefragt werden.

#include <HTU21D.h>

HTU21D sensor;

void setup() {
  Serial.begin(9600);
  sensor.begin();
}

void loop() {
  if(sensor.measure()) {
    float temperature = sensor.getTemperature();
    float humidity = sensor.getHumidity();
    
    Serial.print("Temperature (°C): ");
    Serial.println(temperature);
    
    Serial.print("Humidity (%RH): ");
    Serial.println(humidity);
  }

  delay(5000);
}

Wenn man den Code auf den Arduino lädt, sieht man, dass die Messwerte wie folgt in der seriellen Konsole ausgegeben werden:

Temperature (°C): 20.86
Humidity (%RH): 58.35

Um die Auflösung zu ändern, ruft man die Methode setResolution in setup auf:

void setup() {
  Serial.begin(9600);
  sensor.begin();
  sensor.setResolution(RESOLUTION_RH12_T14);
}

In den meisten Fällen ist es nicht wirklich sinnvoll, die Auflösung zu ändern, da die Standardeinstellung die bestmögliche Auflösung von 14 Bit für die Temperatur- und 12 Bit für die Feuchtigkeitsmessung ist. Trotzdem, hier sind die verfügbaren Auflösungen:

Temperatur Luftfeuchtigkeit Parameter für setResolution
14 bit 12 bit RESOLUTION_RH12_T14
12 bit 8 bit RESOLUTION_RH8_T12
13 bit 10 bit RESOLUTION_RH10_T13
11 bit 11 bit RESOLUTION_RH11_T11

Vorheriger Beitrag Nächster Beitrag