Der SHT20 ist ein weiterer Sensor zur Messung der Umgebungstemperatur und der relativen Luftfeuchtigkeit, den ich wegen des kleinen Preises bei einer Bestellung in China zum Ausprobieren mitbestellt habe. Der Sensor befindet sich in einem Kunststoffgehäuse mit vier Anschlusspins – vergleichbar mit dem DHT22 oder AM2320 – wie der AM2320 kommuniziert der SHT20 über die I2C-Schnittstelle. Die dafür notwendigen Pull-Up-Widerstände sind bereits im Sensorgehäuse verbaut – logischerweise sind sie deshalb auf der Modulplatine nicht noch einmal vorhanden.
Im März 2021 wurde der Beitrag um die Hinweise zur DFRobot-SHT20-Bibliothek für den Einsatz mit einem ESP8266-Board erweitert.
Preis und Bezugsmöglichkeit
Im deutschen Versandhandel ist der Sensor nicht allzu verbreitet. Ich habe das hier abgebildete Modul für 1,80 € (zzgl. Versandkosten) auf aliexpress.com gekauft. (Man findet den Sensor auch bei ebay – ebenfalls mit Versand aus China.) Auf der Modulplatine ist lediglich eine zusätzliche rote LED samt Vorwiderstand vorhanden, die anzeigt, dass die Spannungsversorgung funktioniert. Ohne die Platine mit LED ist er noch etwas günstiger und auf jeden Fall preiswerter als der bekannte DHT22. Nach meiner Meinung ist die Platine samt LED eher überflüssig bzw. störend – sollte ich weitere dieser Sensoren kaufen, werde ich die einfachen Sensoren nehmen, nicht das hier beschriebene Modul.[1]Oft sind auf den Modulen notwendige Vorwiderstände für die I2C-Kommunikation bzw. Signalleitung eingelötet, sodass die Handhabung auf dem Breadboard bequemer und platzsparender ist – einfach … Continue reading
Außerdem gibt es einen wasserdichten Messfühler des amerikanischen Anbieters DFRobot, der aber mit einem Preis von über 20 $ wesentlich teurer ist.[2]Mir ist nicht klar, wozu ein Sensor in einem wasserdichten Gehäuse – der also zum Messen der Temperatur von Flüssigkeiten vorgesehen ist – die Fähigkeit zum Messen der Luftfeuchtigkeit … Continue reading
Sensormodul mit I2C-Schnittstelle
Der eigentliche Sensor ist in ein nur 3*3 mm großes und 1 mm hohes Gehäuse eingebettet und von der Bauart her für industrielle Verarbeitung gedacht – siehe das Bild auf der Produkt-Seite des Herstellers Sensirion. In dem Kunststoffgehäuse, das ich besitze, befindet sich eine Platine, auf der neben dem Sensor mehrere SMD-Bauteile aufgelötet sind. Dort scheinen u.a. auch die für die I2C-Kommunikation nötigen Pull-Up-Widerstände von 4,7 kΩ berücksichtigt zu sein – siehe die rot markierten Bauteile mit der Beschriftung »472«auf dem Detailbild (zum Vergrößern anklicken). Jedenfalls funktioniert der Sensor hervorragend ohne zusätzlich auf dem Breadboard angebrachte Widerstände für die beiden I2C-Leitungen SDA und SCL.
Das Modul ist per I2C sehr einfach anzuschließen: Man verbindet die Anschlüsse für SCL und SDA mit den passenden Pins des Mikrocontrollers, außerdem Masse und Spannung. Der Sensor ist für eine Versorgungsspannung von ca. 3 Volt ausgelegt, verträgt also nicht die standardmäßigen 5 Volt der Arduinos!
Technische Daten des SHT20
Die Tabelle nennt einige technische Daten; weitere finden sich im Datenblatt des Herstellers.
I2C-Adresse: | 0x40 | |
Versorgungsspannung: | 2,1 bis 3,6 V | |
Messbereiche | ||
Temperatur: | -40 bis +125°C | |
rel. Luftfeuchtigkeit (RH): | 0 – 100% RH | |
Genauigkeit | ||
Temperatur: | ±0,3°C (bei 5-60°C) | |
rel. Luftfeuchtigkeit: | ±3% RH (bei 20-80% RH) | |
Größe der Modul-Platine: | ca. 15 mm * 35 mm |
Die Daten weiterer Sensoren zur Messung von Temperatur und Luftfeuchtigkeit enthält eine Vergleichstabelle. Außerdem war der SHT20 Teil eines Aufbaus, bei dem ich die Messwerte von 13 Temperatur- und Luftfeuchtigkeitssensoren verglichen habe. Dabei hat er zwar etwas über dem Durchschnitt liegende Temperaturwerte ausgegeben, war aber nicht auffällig.
Bibliotheken »uFire SHT20« und »DFRobot SHT20«
»uFire SHT20« für den ESP32
Ich habe zuerst mit einem ESP32 (DevKitC) die Bibliothek uFire SHT20 genutzt, da man sie über die Bibliotheksverwaltung der Arduino-IDE installieren kann (bei einer Suche nach »sht20« wird sie als einzige angeboten). Auf GitHub ist sie zu finden unter github.com/u-fire/uFire_SHT20.
Die Bibliothek stellt Funktionen zum Auslesen der Temperatur (in °C und Fahrenheit) und rel. Luftfeuchtigkeit bereit, außerdem (daraus berechnete) Werte für Taupunkt (dew point; in °C und Fahrenheit) und Sättigungsdefizit (vapour pressure deficit; VPR).[3]Auf der engl. Wikipedia-Seite ist die genaue Formel zu finden. Wie üblich werden Beispielprogramme mitinstalliert, die die Methoden der Bibliothek zeigen; die wesentlichen enthält auch das unten folgende Programm.
»DFRobot SHT20« für den ESP8266
Bei einem späteren Aufbau mit einem ESP8266 (NodeMCU) habe ich festgestellt, dass die uFire-Bibliothek in der Arduino-IDE beim Kompilieren einen Fehler erzeugt (nur beim ESP8266, nicht beim ESP32). Deshalb bin ich für den ESP8266 auf die Bibliothek DFRobot SHT20 ausgewichen. Man muss sie manuell als ZIP-Archiv von Github herunterladen und installieren – auch diese Vorgehensweise ist im Beitrag zur Bibliotheksverwaltung beschrieben.
Der Funktionsumfang der DFRobot-Bibliothek ist etwas kleiner – man kann die Temperatur in °C und die Luftfeuchtigkeit auslesen (mehr braucht man meist ja sowieso nicht). Auch für diese Bibliothek wird ein Beispielprogramm mitinstalliert; außerdem gibt es das folgende Programm in einer Version mit der DFRobot-Bilbliothek – der Quellcode steht auf Github zur Verfügung.
Programm (uFire-Bibliothek)
/* Messung von Sensorwerten: SHT20
* (Temperatur und rel. Luftfeuchtigkeit)
*
* 2020-11-24 Heiko (unsinnsbasis.de)
*/
// Bibliothek für den SHT20-Sensor
#include <uFire_SHT20.h>
uFire_SHT20 sht20; // Datenstruktur für den Sensor
// Bitrate für die Datenübertragung zum seriellen Monitor
// (ESP: z.B. 115200, Arduino: zwingend 9600)
#define BITRATE 115200 // Arduino: 9600
float temp, hum; // Variablen für Temperatur und Luftfeuchtigkeit
void setup() {
// Übertragungsrate zum seriellen Monitor setzen
Serial.begin(BITRATE);
Wire.begin();
sht20.begin(); // Sensor initialisieren
}
void loop() {
temp = sht20.temperature();
hum = sht20.humidity();
// taupunkt = sht20.dew_pointC();
// saettigung = sht20.vpd();
Serial.print("Temperatur: ");
Serial.print(temp,1);
Serial.println(" °C");
Serial.print("rel. Luftfeuchtigkeit: ");
Serial.print(hum,1);
Serial.println(" %");
delay(5000); // vor der nächsten Messung etwas warten
}
Fußnoten
1↑ | Oft sind auf den Modulen notwendige Vorwiderstände für die I2C-Kommunikation bzw. Signalleitung eingelötet, sodass die Handhabung auf dem Breadboard bequemer und platzsparender ist – einfach das Modul einstecken, verkabeln und fertig. Hier sind die Vorwiderstände aber bereits im Sensorgehäuse integriert. Die Platine bietet in diesem Fall keinen Nutzen
, sondern macht das Modul nur unnötig groß, und die LED sorgt für zusätzlichen Stromverbrauch – bei einem Betrieb am Netzteil oder per USB am PC sicher unerheblich, aber falls man doch mal eine Schaltung per Akku oder Powerbank versorgen will, könnte sich das bemerkbar machen. |
---|---|
2↑ | Mir ist nicht klar, wozu ein Sensor in einem wasserdichten Gehäuse – der also zum Messen der Temperatur von Flüssigkeiten vorgesehen ist – die Fähigkeit zum Messen der Luftfeuchtigkeit benötigt bzw. ob man so überhaupt die Luftfeuchtigkeit noch messen kann (wenn der Sensor wasserdicht ist, müsste er eigentlich auch luftdicht sein). Ich würde jedenfalls zum Messen der Temperatur von Flüssigkeiten eher auf die wesentlich günstigeren Messfühler mit dem Temperatursensor DS18B20 zurückgreifen – je nach Kabellänge gibt es die im deutschen Versandhandel schon für unter 5 € (Kabellänge 1 Meter – mit 3 oder 5 m langem Kabel ein paar Euro teurer). |
3↑ | Auf der engl. Wikipedia-Seite ist die genaue Formel zu finden. |
Themenverwandte Beiträge
Mehrstellige 7-Segment-Anzeigen direkt per Schieberegister zum Anzeigen von Daten zu nutzen, bedeute...
Die monochromen SSD1306-OLED-Displays sind eine relativ günstige und stromsparende Möglichkeit, Mikr...
Viele kennen sicher die »Wetterstationen«, die bei Eltern oder Großeltern an der Wohnzimmerwand hing...
Der ESP32 ist ein populärer Mikrocontroller, mit dem bspw. Sensoren abgefragt oder Motoren gesteuert...