Temperatur-Datenlogger mit AVR-NetIO / Arduino und rrdtool

Heute möchte ich mal ein älteres Projekt von mir selbst vorstellen und zwar eine Lösung zum permanenten samplen und visualisieren von Temperaturdaten.

Bei meinem Temperaturdatenlogger handelt es sich auf den ersten Blick wohl zunächst nicht um ein besonders aufregendes oder innovatives Projekt, aber es ist im Alltag sehr nützlich und vielseitig verwendbar.

Für mich waren zwei Gründe ausschlaggebend, ein eigenes Datalogging-System zu entwickeln:

1. Maximale Flexibilität, Erweiterbarkeit und detaillierteste Anpassbarkeit an meinen persönlichen Bedarf, bzw. auch an sich ändernde Anforderungen

2. zu minimalstem Aufwand an Kosten (für Material bzw. Hardware)

Bei meinem System können bis zu 64 Temperatursensoren gleichzeitig betrieben und abgefragt werden und die Daten werden anschliessend in einer speziellen Ringpufferdatenbank (rrdtool) abgelegt und graphisch visualisiert, d.h., als Messkurven dargestellt. Diese wiederum können von jedem Computer-Arbeitsplatz (am lokalen Netz oder auch per Internet) mit einem Webbrowser angezeigt werden. Man kann auch die Daten vom Programm überwachen lassen und bei bestimmten Werten einen Alarm, auslösen oder eine Aktion starten, wie etwa einen Motor einschalten, etc.

Es gibt für sowas sicherlich auch industrielle Lösungen, aber entsprechend zu Preisen, die um ein bis zwei Größenordnung über meinem Budget liegen, die Hardwarekosten bei meinem Projekt liegen bei unter 100,- EUR

Die Anwendungsmöglichkeiten sind sehr vielfältig, ich (und andere Personen) benutzen das System zB. zur Messdatenerfassung bei Experimenten (das können übrigens auch mal andere Daten als Temperaturdaten sein, z.B. Messung der elektrischen Kapazität eines Akkus) und anderen Projekten, wie z.B. mein Solartrockner mit Warmluftkollektor, zur Raumklimatisierung und im gärtnerischen Bereich zur Kontrolle eines Anzuchtgewächshauses.

IMGP1293

Die Visualisierung erfolgt in verschiedenen, beliebig konfigurierbaren Zeitfenstern, d.h., man kann sich z.B. die Innen- und die Aussentemperatur in mehreren Verlaufsdiagrammen anzeigen lassen, also etwa in einer Darstellung die Werte der letzten 4 Stunden, darunter die Verlaufskurve der letzten 24 Stunden, darunter die der letzten 7 Tage, dann die des letzten Monats und dann noch eine über das ganze letzte Jahr.

messkurven

Die Messungen erfolgen permanent und die Darstellungen werden entsprechend kontinuierlich upgedatet, je nach Anzahl der Sensoren alle 1 bis 5 Minuten, aber auch das ist natürlich einstellbar.

Ausgeführt werden die Messungen von einem digitalen Temperatursensor vom weitverbreiteten Typ DS18B20, welcher eine Datenkommunikation per “one-wire”-Datenleitung erlaubt, also einem Datenbussystem, was bedeutet, das nicht jeder Sensor einzeln mit einem separaten Kabel mit dem MikroControllerboard verbunden sein muss, sondern das Sensoren auch einfach aneinander angehängt werden können – das spart viel Kabelmaterial und Verlegeaufwand.

IMGP1296

Als Controller verwende ich ein AVR-NetIO-Board der Fa. Pollin, http://www.pollin.de/shop/dt/MTQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_AVR_NET_IO.html welchem ich eine spezielle Firmware installiert habe, so das das Board jetzt von sich glaubt es wäre ein Arduino – das ist eine sehr weitverbreitete und in zunehmendem Maße und insbesondere in Maker- und OpenHardware-Kreisen sich immer größerer Beliebtheit erfreuende Mikroprozessor-Plattform. Jedenfalls kann man somit die umfangreiche Arduino-Entwicklungsumgebung benutzen und das Board ist somit Arduino-kompatibel. Ich selbst verwende anstatt einer Original-Arduino-Hardware aber lieber das AVR-NetIO, weil damit bei gleicher Leistung der Preis nur ungefähr ein Drittel so hoch ist.

Der Mikroprozessor fragt nun regelmässig alle Sensoren ab. Obwohl es sich dabei nur um einen 8-Bit-Prozessor (vom Typ Atmel Atmega32) handelt, so ist in seinem Programm dennoch eine Art kleiner Webserver implementiert auf welchem die Rohdaten auf einer schlichten Webseite per Ethernetverbindung bereitgestellt werden, d.h., ab hier kann die weitere Aufbereitung der Daten völlig unabhängig von einer beliebigen anderen Stelle im Netz (oder auch selektiv von mehreren) erfolgen. Ich verwende dazu einen kleinen Embedded-Linux-Server, der natürlich permanent an sein muss und nur sehr wenig Strom, also deutlich unter 10 Watt, verbraucht. Man kann dazu prinzipiell sehr gut Systeme wie RaspberryPi oder BeagleboneBlack verwenden, um mal zwei bekannte und preisgünstige Plattformen zu nennen.

Hier werden nun periodisch mittels Unix-Shellscript-Programmen die Daten vom Controllerboard abgerufen, zunächst in der Datenbank abgelegt und anschliessend grafisch aufbereitet. Die so erstellten Verlaufsdiagramme werden nun ihrerseits von einem (diesmal etwas größeren) Webserver bereitgestellt und minütlich aktualisiert.

Der meiste Entwicklungsaufwand bestand für mich darin, in die Unix-Shellscrfipte diverse Filter einzubauen, um das Programm möglichst robust gegen etwaige Störungen auf der Netzleitung zu machen, was insbesondere wichtig ist, wenn man das System auch an andere Leute geben will. Inzwischen hat es sich schon seit ca. 3 oder 4 Jahren sowohl bei mir als auch bei anderen in der Praxis bewährt.

[Nachtrag: Es gibt von diesem Projekt inzwischen eine weiterentwickelte und InternetOfThings-fähige Version namens TempCTRL, welche nicht nur die Temperatur misst, sondern auch noch ein Relais schalten kann und auf dem aktuelleren und leistungsfähigeren ArduinoMEGA256 basiert. Siehe dazu auch die Projektseite im OSEG-Wiki.]

case