Cumulus clouds

Luftfeuchte-Messung mit HIH 4020 Sensor

1. Einleitung

In einem früheren Einsteigerprojekt stellte ich eine simple Wetterstation bestehend aus einem Raspberry Pi Einplatinencomputer, Sensoren und einer Flüssigkristallanzeige (LCD) vor.

Diese war in der Lage Temperatur, Luftdruck und Helligkeit zu bestimmen, nicht jedoch eine weitere wichtige Wettergröße: die Relative Luftfeuchtigkeit (englisch Relative Humidity, abgekürzt RH).

Ich entschied mich jedoch aus verschiedenen Gründen dafür jene Wetterstation nicht mit einer Standardkomponente (mit I2C oder 1-Wire Schnittstelle) zu erweitern, sondern eine separate Elektronik mit schlichter (jedoch langlebiger) optischer Anzeige und einem Industrie-Sensor zu entwickeln.

2. Luftfeuchte-Messung

2.1 Physikalische Größe Luftfeuchtigkeit

Die intensive Messgröße Relative Feuchtigkeit ist das einheitenlose und temperaturabhängige Verhältnis von zwei Dichten, nämlich der Dichten des Wasserdampfes in ungesättigter (ρD) und gesättigter (ρDS) Luft:

φ = ρDDS

Das ist die aus Wetterberichten bekannte Luftfeuchtigkeit, angegeben in einem Prozentwert von 0% – 100% (RH).

2.2 Bauteile und Komponenten

2.21 Übernahme von Hardware

Ich machte mir beim Design der optischen Anzeige die Erkenntnisse bzw. Hardware einer anderen Entwicklung zu Nutze, nämlich die der Bodenfeuchte-Messung.

Hauptmerkmal sind zwei Siebensegmentanzeigen und eine Multiplex-Logik. Es wird jeweils nur ein Block durch einen Transistor aktiv geschaltet, und zwar in so schnellem Wechsel dass dies außerhalb der Wahrnehmung des menschlichen Auges geschieht und die Anzeige stillstehend wirkt.

Messung und Anzeige der Luftfeuchtigkeit (mit Temperaturkompensation, einzelnes gelbes Kabel und 103AT-2 NTC-Widerstand), gemultiplexte Siebensegmentanzeigen auf PCB; die längliche grüne Platine ist das aufgelötete Mikrocontroller Board
Messung und Anzeige der Luftfeuchtigkeit (mit Temperaturkompensation, einzelnes gelbes Kabel und 103AT-2 NTC-Widerstand), gemultiplexte Siebensegmentanzeigen auf PCB; die längliche grüne Platine ist das aufgelötete Mikrocontroller Board

Der unmittelbare Gewinn dieses “Multiplexing” ist die Einsparung von Leitungen und Bauelementen.

Hier die Einsparung eines CD4511BE (BCD-zu-Siebensegment Decoder) ICs und sieben 47 Ohm Widerständen, zum Preis von zwei Bipolartransistoren (z. B. BC337) und zwei 1 kOhm Widerständen (wie man vielleicht erkennt kommen die Vorteile der Multiplex-Logik erst zur Geltung bei drei oder mehr Siebensegmentanzeigen).

2.22 Bauteile-Liste

Die Bauteile-Liste dieses Projekts beinhaltet ausschließlich der Ansteuerlogik für die Siebensegmentanzeigen:

  • Raspberry Pi Pico (RasPi Pico) – DatenblattRP2040 Datenblatt
  • Sensor HIH 4020-001 (siehe Abschnitt 2.3)
  • 1xWiderstand 100 kOhm
  • 2xWiderstand 10 kOhm
  • Lochrasterplatine (202 Kontakte) und Blankdraht
  • Buchsen- und Steckerleisten, Schaltlitze (0,14 mm² verwendet), Schrumpfschlauchstücke (optional)

2.3 Sensor HIH 4020-001

Der Luftfeuchte-Sensor HIH 4020-001 kostete Stand Mitte März 2022 gut zwanzig Euro, damit etwa das Vierfache des RasPi Pico Mikrocontrollers selbst.

Es handelt sich um einen abgedeckten (jedoch nicht gegen Kondensation oder Spritzwasser geschützten), integrierten Sensor auf Polymerbasis der technisch aufgewertet ist und das Signal konditioniert. Er ist jedoch passiv und benötigt Energie von außen.

Im Datenblatt sind alle wesentlichen Daten nachzulesen, inklusive einer wichtigen Umrechnungsformel welche für die Zusatzhardware wie für einen Verarbeitungs-Algorithmus eine Rolle spielen wird.

Es besteht ein linearer Zusammenhang zwischen RH und dem Sensor-Output Uout:

Uout (25°C) = USupply[V]*(0,0062*(RHSensor[%])+0,16)

In meinem Fall somit eine Ausgangsspannung im Bereich von (mit +5V VBUS vom Pico Pin 40, der Sensor ist spezifiziert für 4,0V bis 5,8V):

Uout_max (25°C) = 5V*(0,0062*100+0,16) = 3,9V

Uout_min (25°C) = 5V*(0,0062*0+0,16) = 0,8V

Wie man sieht ist für einen verlässlichen Output Uout eine stabile Versorgung USupply essentiell, nicht zuletzt deshalb weil die Schnittstelle hier nicht ratiometrisch ist (würde heißen Spannungsbasis der Digitalisierung gleich USupply, womit das digitalisierte Signal unabhängig von der Versorgungsspannung des Sensors wäre).

Die lineare Ausgangskennlinie gestaltet eine Weiterverarbeitung äußerst einfach, was die entscheidende Eigenschaft dieses vergleichsweise teuren Sensors ist.

2.4 Schaltplan

Der Analog-Digital-Wandler (ADC) des RasPi Pico verarbeitet ein Maximum von 3,3V, folglich muss eine Schaltung den Sensor-Output skalieren.

Es bietet sich ein gewöhnlicher Spannungsteiler an.

UADC_max (25°C) = (3,9V*100)/120 = 3,25V

UADC_min (25°C) = (0,8V*100)/120 = 0,67V

Schaltplan des Spannungsteilers mit HIH 4020-001 Sensor
Schaltplan des Spannungsteilers mit HIH 4020-001 Sensor

Änderungen von Spannungswerten finden während der Erfassung der Messgröße vergleichsweise langsam statt (keine schnellen Pulse), daher sind keine zusätzlichen Bauelemente erforderlich.

Der Pico ADC arbeitet nach dem Prinzip der “sukzessiven Approximation”. Dieses Wandlerprinzip ist zwar simpel, aber auch relativ langsam, was allerdings für den gegebenen Anwendungsfall keine Rolle spielt. Die 12-bit Auflösung (d.h. 4.096 Werte) ist ebenfalls völlig ausreichend (die effektive Anzahl an Bits – abgekürzt ENOB – ist um etwa 3 Bits geringer, s. Kapitel 4.9. im RP2040 Datenblatt).

Auf einen zusätzlichen Widerstand (Pull-up oder Pull-down) zur Erkennung eines Leitungsabrisses der Signalleitung habe ich bei dieser Schaltung verzichtet.

2.5 Algorithmus (Verarbeitung und Ansteuerung)

Die weitere Verarbeitung erfolgt per Software.

Ein lauffähiger Code mit Erläuterungen zur Multiplex-Logik und Mathematik (Offset sowie “Aufspreizung” des Messbereichs) findet sich in meinem RasPi Github-Repository.

3. Produktiver Test

Ergebnisse waren auf Anhieb brauchbar und genau.

Eine Temperaturkompensation1 (z. B. mit 103AT-2 NTC-Widerstand, der interne Temperatursensor des Pico eignet sich hier weniger), solides PCB-Design sowie eine externe “Shunt Referenz” für den ADC (möglicherweise gleich ein separates, zugekauftes ADC-Modul) können je nach Bedarf und Anforderungen noch zuverlässigere Ergebnisse liefern.

Auch ist die Mathematik und das Handling von Messwerten insgesamt noch verbesserungswürdig (z. B. Mittelwertbildung mehrerer ADC-Werte über ein bestimmtes Zeitfenster um den Effekt von Ausreißern zu minimieren etc.)

1 eine Temperaturkompensation verhindert hier auch den Fall von berechneter Luftfeuchtigkeit >100% bei niedrigen Temperaturen und tatsächlicher Luftfeuchtigkeit nahe 100%

3.1 Messwerte vs. Referenzwerte

Gemessen: USupply = 4,99V.

12.03.2022, 13:00h

Nürnberg-Flughafen (Quelle dwd.de, Standort 49.494, 11.078): 23% RH

Messgerätanzeige Außenbereich (Standort 49.465, 11.126): 22% RH

mit Temperaturkompensation, s. Datenblatt (für 11°C): 1,031*22 = 23% RH

13.03.2022, 5:00h

Nürnberg-Flughafen (s.o.): 45% RH

Messgerätanzeige (s.o.): 44% RH

mit Temperaturkompensation, s. Datenblatt (für -1°C): 1,06*44 = 47% RH

14.03.2022, 10:00h

Nürnberg-Flughafen (s.o.): 84% RH

Messgerätanzeige (s.o.): 81% RH

mit Temperaturkompensation, s. Datenblatt (für 7°C): 1,04*81 = 84% RH

Anmerkung: Werte gleichfalls mit Wetter-App gegengeprüft, Ungenauigkeiten in der Messung mit diesen Methoden jedoch nicht vermeidbar.

4. Technische Erweiterungen (Internet of Things)

Die Erweiterung mit IoT-Funktionalität (Internet oThings) ist was die Hardware angeht einfach zu implementieren, sei es mit zusätzlicher Elektronik (Espressif ESP8266, siehe Foto) oder gleich mit dem Raspberry Pi Pico W.

Eine optische Anzeige mag dann auch gar nicht mehr notwendig sein.

Konfiguration mit 103AT-2 NTC Widerstand, SFH300 Phototransistor und HIH4020 Luftfeuchtesensor
Konfiguration mit 103AT-2 NTC Widerstand, SFH300 Phototransistor und HIH4020 Luftfeuchtesensor

Software ist nicht sonderlich kompliziert und Code kann wie mit einem Baukasten zusammenkopiert werden. Ein Beispiel findet sich wiederum in meinem RasPi Github-Repository (siehe Screenshot). In den Kommentaren sind auch Verdrahtung sowie die zusätzlich erforderlichen Bauteile grob erklärt.

Umweltdaten dargestellt im Browser auf dem Smartphone
Umweltdaten dargestellt im Browser auf dem Smartphone

Der Pico fungiert hier als einfacher Webserver der sonst keine Interaktionsmöglichkeit für den Benutzer bietet. Luftfeuchte, Umgebungstemperatur und Lichtverhältnisse am Standort lassen sich bei Kenntnis der IP-Adresse und des Ports über einen Browser abfragen.

Um die Robustheit des Webservers zu erhöhen ist neben der Verwendung des Ports 78 (nicht Standard HTTP Port 80 den oftmals Bots scannen und dann einen Angriff starten) noch der RP2040 Hardware-Watchdog implementiert.

5. Weiterführende Informationen

5.1 Literatur

1. Grundlagen der Technischen Thermodynamik – Doering/Schedwill/Dehli, Teubner; ISBN 3-519-46503-5 (5. Auflage)

2. Elektronik Tabellen: Betriebs- und Automatisierungstechnik – Michael Dzieia, Westermann; ISBN 978-3142350165 (4. Auflage)

3. The Art of Electronics – Paul Horowitz/Winfield Hill, Cambridge University Press; ISBN 978-0-521-80926-9 (Third edition)

5.2 Online Ressourcen

hackaday.io Projekte des Autors (englisch)