Messung von Innentemperatur und Luftdruck mit einem BMP-180 Sensor

Diese Variante findet im Dachgeschoss meines Hauses Verwendung.

Hardware Basis

Hardware Liste:
1 Arduino Uno (bei mir ein R3 kompatibles Board) samt USB-Anschlusskabel
1 Arduino Ethernet Shield
1 BMP-180 (BMP-085 geht auch) Sensor zur Messung von Temperatur und Luftdruck

Als Hardware Basis, um Sensoren in meine Messung einzubinden, verwende ich einen Arduino Uno R3, Kosten im 1-stelligen EUR-Bereich, wenn man China Klone wie z.B. in ebay erhälltich, verwendet).

Nun müssen die Daten auch noch ins Internet übertragen werden. Gottseidank bot sich bei mir auch bei dieser Temperaturmessstation eine direkte Anbindung an einen vorhandenen Router an. Ich verwende somit ein Arduino Ethernet Shield („Shield“ nennen sich die „Huckepack“-Boards, die auf andere Arduinos aufgesteckt werden können). Als China Klon um unter 10 EUR erhältlich. Mit diesem Shield habe ich sehr gute Erfahrungen hinsichtlich Stabilität gemacht. Wenn kein Switch in der Nähe vorhanden gewesen wäre, wäre auch die Verwendung eines Wifi Shields denkbar gewesen, mit welchem ich allerdings stabilitätstechnisch keine sehr guten Erfahrungen gemacht habe – dazu aber später.

Arduino Uno mit aufgestecktem Ethernet Shield
Arduino Uno mit aufgestecktem Ethernet Shield

Als Sensor verwende ich einen BMP-180, der sowohl Temperatur als auch Luftdruck messen kann. Der BMP-180 ist der Nachfolger des BMP-085, der genauso gut verwendet werden kann und pinkompatibel ist. Der BMP-180 kostete mich in ebay ganze 1,45 EUR und wurde nach einigen Wochen aus China geliefert…

Auf der Sparkfun Seite ist ein tolles Tutorial zu finden, in dem sowohl Details zum BMP-180 Sensor als auch zum Anschluss des Sensors an einem Arduino zu finden sind. Da alle Arduino Anschlüsse beim Ethernet Shield durchgeschliffen werden, können die Anschlüsse des BMP-180 am Ethernet Shield entsprechend der Sparkfun Anleitung erfolgen. Hier ein Schema der Verdrahtung (dieses zeigt ein Sparkfun Redboard, dieses ist aber pinkompatibel zu Ethernet Shield und Arduino Uno):
Verdrahtungsschema
Verdrahtungsschema

Code

Wenn man nun noch das Thingspeak Tutorial zum Einbinden eines Arduino Boards als Referenz heranzieht und den entsprechenden Code anpasst, kommt man dann sehr schnell zum gewünschten Ergebnis.

Hier nun mein Arduino Code im PDF Format aus Codebender bzw. im Word Format (der Text kann direkt in die Arduino Software oder in Codebender kopiert werden) – ein paar Extra Erklärungen hier – die Zeilennummern beziehen sich auf die Zeilennummern im PDF-Code:

Nach dem allgemeinen Teil des Programms werden in Zeilen 36 bis 40 die libraries inkludiert. Die ersten 4 libraries sind Codebender bereits bekannt, die BMP-085 library, die die Arbeit mit dem BMP-180 (kein Schreibfehler, beide Module sind kompatibel) Modul erleichtert, gibt es hier zum Download – sie kann in Codebender eingebunden werden.

Zeile 42: Hier ist die Höhe der Messstation über dem Meeresspiegel als Referenz anzugeben

Zeile 44-48: Bei meinem Programm findet alle 30 sec eine Messung statt. Nur wenn sich der gemessene Temperaturwert vom letzten gemessenen Wert um min 0,2 °C (ERKENNUNGSSCHWELLE) unterscheidet, wird dieser Wert alle 5 min (updateThingSpeakInterval) in thingspeak.com gespeichert. Wenn der Unterschied zum letzten Wert < 0,2 °C beträgt, wird kein Wert gespeichert. Sollte der Wert sehr lange konstant bleiben, wird alle 30 min (maxThingSpeakInterval) ein Wert gespeichert. All dies dient dazu, die Datenmenge in Thingspeak nicht explodieren zu lassen.

Zeile 53: Hier ist der eigene API-Key, den man bei der Registrierung in Thingspeak erhält, einzutragen

Zeile 65-67: Hier sind IP-Adressen des Ethernet Shields und des Gateway Routers sowie die Subnet Adresse einzutragen

Zeile 76: wird nicht benötigt

Zeile 84-91: Hier werden Vorhandensein und Funktion des Ethernet Shields getestet, wenn irgendetwas nicht funktioniert, stoppt das Programm hier

Zeile 93-100: Zeigt die aktuelle IP Adresse auf der seriellen Ausgabe an

Zeile 107-112: Wenn noch irgendwelche Meldungen auf dem Ethernet Client vorhanden sind, werden diese hier ausgegeben. ACHTUNG: Im originalen Code lt. Thingspeak Tutorial befand sich ein Fehler (es war ein IF statt dem WHILE vorhanden)

Zeile 114-120: Wenn der Client noch mit Thingspeak verbunden ist, wird die Verbindung hier getrennt

Zeile 122-124: Hier wird der alle 50 Tage vorkommende Überlauf der Arduino Zeit korrigiert

Zeile 127: Durchlauf dieses Programmteils nur alle 5 min

Zeile 131-132: Einlesen von Temperatur und Luftdruck

Zeile 134: Ausgabe zu Thingspeak wird nur nach Temperaturänderung um min. 0,2 °C oder Überschreitung von 30 min seit letzter Datenübermittlung gestartet

Zeile 138-139: Wandelt die numerischen Werte für die Ausgabe auf Thingspeak in formatierte Strings um

Zeile 142: Start der Ausgabe zu Thingspeak

Zeile 150-155: Wenn sich das Ethernet Shield mal aufhängen sollte, wird hier ein Neustart durchgeführt

Zeile 160-197: In dieser Prozedur erfolgt die eigentliche Ausgabe auf Thingspeak, diese Zeilen sind gegenüber dem Tutorial auf der Thingspeak-Seite unverändert.

Foto der Schaltung

Wenn man das ganze mal in Betrieb genommen hat, sieht das Ergebnis wie folgt aus:

Foto der Schaltung
Foto der Schaltung mit BMP-180 Sensor

Foto der Anschlüsse
Ethernet Kabel und Stromversorgung über USB

Anschlüsse am Router
Mein Router darf auch gleich den Arduino über USB mit Strom versorgen

So sieht dann das Ergebnis auf Thingspeak.com aus (Detail). Hier ein Live Link zu meinen gesamten Messdaten.

Bildschirmfoto 2016-01-03 um 23.03.09 copy

Zusammenfassung

Kosten: Max. 30-40 EUR inkl. Arduino Uno, Ethernet Shield und BMP-180 Sensor.
Aufwand: Wenn keine Änderungen an der Software durchgeführt werden, sollte das in wenigen Stunden komplett machbar sein (exkl. Registrierung bei Codebender und Thingspeak)
Voraussetzungen: Ein wenig elektrotechnische und/oder IT-Kenntnisse schaden nicht, um den Umgang mit einem Arduino Board, das Software uploaden etc. in kurzer Zeit bewerkstelligen zu können, man kann sich aber auch ohne diese Kenntnisse in die Materie einlesen. Hierzu wird das Studium einer oder auch mehrerer Arduino Einführungen im Internet empfohlen.
Genauigkeit: Lt. BMP-180 Hersteller bei 25°C bis zu +/- 1,5°C, Druck -4 bis +2 hPa. Ich habe die Schaltung mit einem Digitalthermometer bei mir zuhause abgeglichen – die Abweichung war bei mir genau 0,0°C, dies hätte man ansonsten aber einfach mit einem Korrekturfaktor in der Software korrigieren können. Wichtiger als die Genauigkeit ist mir, dass sich all meine Temperaturmessungen auf dasselbe Referenzniveau beziehen d.h. direkt vergleichbar sind.
Referenzen:
– Plattform für die Kodierung: www.codebender.com
– Internet of Things Platform für Temperaturdatenspeicherung und -visualisierung: www.thingspeak.com
– Lieferanten für Hardware: Ebay, Amazon und viele andere

Ein Gedanke zu “Messung von Innentemperatur und Luftdruck mit einem BMP-180 Sensor

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s