Hier in der WG wird’s Winter. Man merkt, dass die Heizung nicht immer ganz gleich erfolgreich gegen die Kälte kämpfen kann. Um etwas ein Gefühl für die schwankenden Temperaturen zu bekommen, habe ich mit einem selbst gebauten Temperaturmesssonde aufgezeichnet.
Die Vorrichtung zeichnet die Temperatur alle 280 Sekunden auf. Wieso 280 Sekunden? Weil 300 Sekunden 5 Minuten wären und ich mich nicht nach 5 Minuten richten wollte. Oder 280 Sekunden halt im Moment, als ich den Code schrieb, super tönten. Bis ich es in Minuten umgerechnet habe. Yep, 4 2/3 Minuten. Super.
Egal. Zuerst möchte ich etwas auf die Hardware eingehen. Ich habe dazu (endlich) wiedermal mein altvertrautes fischertechnik Robo Interface herausgekrahmt. Dazu natürlich ein Netzteil und USB Kabel um es mit dem PC zu verbinden (den RF Data Link habe ich leider zu Hause vergessen). Zur Temperaturmessung verwende ich einen 1K Ohm NTC Widerstand mit 5 Ohm Fehler. Dieser ist am AX Eingang des Interfaces angeschlossen. Damit kann ich also den Widerstand am Netbook auslesen.
Auf meinem Netbook habe ich nur noch elementary OS. Windows ist zu langsam. Leider ist der offizielle Support für Linux von fischertechnik nicht gerade hervorragend. Zum Glück hat Erik die libroboint erstellt, welche es mir erlaubt mit C++ die Sensordaten aus dem Interface auszulesen. Mein Programm liest alle 280 Sekunden den Sensorwert vom Interface aus. Dieser ist auf einer Skala von 0-1024. Nicht in Grad Celsius, aber auch nicht in Ohm.
In der Welt der Elektronik erhält man die Resultate leider meist nicht gerade in der benötigten Masseinheit. Um etwa ein Verhältnis der Sensordaten und der Temperatur in Celsius zu bekommen, habe ich einen geeichten Thermometer mit den aktuellen Sensordaten verglichen. Herausgekommen ist eine Annäherung, welche im gemessenen Bereich etwa auf ein Grad Celsius genau ist.
Die Datenwerte werden vom Programm in einer Datei namens “temperature.log” gespeichert. Das Format ist ziemlich simpel: aktueller Timestamp (Datum und Zeit), dann ein Semikolon, danach der Sensorwert, Zeilenumbruch. Das lässt sich wunderbar in Tabellenkalkulationsprogramme importieren. Mit etwas Massendatenverarbeitung und 3 Tage aufzeichnen entstand dieser Graph:
Die Nachtabsenkung ist immer etwa gleich tief, was erstaunlich ist, wenn man die komplett verschiedenen Tagesverläufe ansieht. Der Tag, welche durch die gelbe Linie dargestellt ist, war der einzige Sonnige Tag in der Messreihe. Man sieht auch den kleinen Fehler in der Plazierung den ich begangen habe: das grosse Peak ist direkte Sonnenbestrahlung des Sensors. Ist natürlich nicht optimal um die Raumtemperatur zu messen.
Das Programm kann theoretisch jegliche analoge Sensordaten aufzeichnen. Mal sehen, ob ich es wiedermal verwenden kann!
Der Quellcode meines Programms ist hier verfügbar. Es basiert, wie schon erwähnt auf der libroboint. Zum kompilieren habe ich g++ benutzt. Dabei darf aber ja das -lroboint Argument nicht vergessen werden, sonst wird die Datei nicht sauber mit der libroboint gelinkt und kompiliert nicht.
Zum Ausführen muss das Interface via USB mit dem Computer verbunden sein, das Programm wird im Onlinemodus ausgeführt, die Daten werden ja direkt in eine Datei geschrieben. Der RF Datalink wird nicht unterstützt, dazu muss aber meines Wissens nur der Verbindungsinitialisierungscode angepasst werden.