1. Einleitung
In einem meiner Einsteigerprojekte 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 aus unterschiedlichen Gründen dafür jene Wetterstation nicht mit einer Standardkomponente (eine solche üblicherweise mit I2C- oder 1-Wire Schnittstelle) zu erweitern, sondern eine separate Elektronik mit schlichter aber 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:
φ = ρD/ρDS
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.
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) – Datenblatt, RP2040 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 d.h. 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
Ä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 recht langsam, was allerdings für den gegebenen Anwendungsfall keine Rolle spielt. Die 12-bit Auflösung (d.h. 4.096 Werte) ist ebenfalls vollkommen 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 of Things) 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.
Software ist nicht sonderlich kompliziert und Code kann wie mit einem Baukasten zusammenkopiert werden. Ein Beispiel findet sich wiederum in meinem RasPi Github-Repository (s.a. Screenshot unten). In den Kommentaren sind auch Verdrahtung sowie die zusätzlich erforderlichen Bauteile grob erklärt.
Der Pico fungiert hier als einfacher Webserver mit sonst keiner Interaktionsmöglichkeit für den Benutzer. 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. The Art of Electronics – Paul Horowitz/Winfield Hill, Cambridge University Press; ISBN 978-0-521-80926-9 (Third edition)