Mostfun

Nach nun doch über einem Jahr habe ich von Julian, jemand der den Logger nachgebaut hat, die Info bekommen, dass der Artikel des Loggers einige Fehler hat. Nachdem ich mich nochmals in das damalige Kurzprojekt rein gedacht habe, habe ich nun den korrigierten Schaltplan und die fehlenden Infos nachgetragen. Vielen Dank noch einmal für das Feedback. Hier nun der korrigierte Artikel:

Werner vom Verein rief mich neulich an und sagte mir, dass er an seinem Hubschrauber gerne die Motortemperatur messen möchte und ob ich eine Idee hätte. Nun ja, Ideen hatte ich viele. Nach einiger Zeit haben wir uns darauf geeinigt, dass für seinen Fall ein digitaler Temperatursensor DS18B20 von Maxim ganz gut geeignet wäre.

Nun ging es darum, diesen Sensor auch auszulesen, die Temperatur anzuzeigen und gegebenfalls auch über die Zeit zu loggen. Das hörte sich ganz nach einem Arduino an.

 

Gedacht getan. Als Plattform habe ich mir den Arduino Nano (3,45 Gramm) raus gesucht, weil er nur geringfügig schwerer als der Mini Pro ist, aber dafür einen USB-Anschluss auf dem Board hat. Außerdem hat er einen 3,3V-Regler an Board, der später noch gute Dienste leisten sollte. Auf Amazon sind die Nano als Nachbau für 15EUR für 5 Stück zu bekommen, d.h. ein Arduino Nano Replik kostet 3EUR.

Als Display habe ich das Micro-OLED-Breakout-Board 0,66" LCD-13003 von SparkFun (erhältlich bei www.flikto.de Flikto-Nr.: flik.to/882) ausgesucht, weil dieses klein und leicht (3,95 Gramm) ist. Mit einer Matrix von 128x64 Pixel ist das Display sehr gut geeignet um Text oder Grafiken anzuzeigen, wo wenig Platz ist. Das ist auch mit 16,14EUR das teuerste Teil in dem Projekt. Auf dem Breakout-Board muss der Jumper BS1 auf "1" und der BS2 auf "0" geändert werden (=I2C). Wichtig ist auch, dass der D/C-Jumper auf "1" gesetzt wird. Er definiert die Adresse des Displays im I2C-Adressraum. Mit dem Jumper kann auch ein zweites Display, dann mit D/C="0" unabhängig adressiert werden, ohne dass zusätzlich ein weiter Port-Pin nötig wäre. Eine weitere wichtige Modifikation die Lötpins D1 und D2 müssen auf dem Display verbunden werden.

An einem Abend, parallel zum Tatort-sehen habe ich dann einen fliegenden Aufbau zum Leben erweckt. Hierzu werden die Komponenten so verbunden:

 

Eine weitere Info am Rande: Wer keine 5V zur Verfügung hat, kann statt dem BEC auch an VIN eine Spannung zwischen 7...12V legen. Der Arduino-Nano hat einen internen Spannungsregler, der in dem Fall den Temperatursensor versorgen kann.

Das Rumpfprogramm habe ich an dem Abend nahezu fertig bekommen. An nachfolgenden Abend habe ich noch ein paar Unpässlichkeiten raus gemacht und ein paar Funktionen eingefügt. Das war es auch schon. Da das Display gut mit einer Library von Sparkfun unterstützt wird, dem auch Demprogramme beiliegen, der Temperatursensor schon ein alter Bekannter aus dem Heizkoffer Projekt war, ging die Arbeit schnell vorwärts.

Der Aufbau sieht zugegebenermaßen etwas abenteuerlich aus, aber er erfüllte seinen Zweck und konnte auch schnell geändert und erweitert werden.

Nachdem das Programm nun lief, habe ich einen sauberen, flugtauglichen Prototypen gebaut. Dieser hat, bis auf den Sensor und die Stromversorgung keinen Steckkontakt mehr. Das Display wird mit kurzen Kabeln auf den Nano verdrahtet. Dabei wird das Display über die I2C-Schnittstelle angesprochen.

Das Display habe ich mit Kapton-Band isoliert. Der Reset-Taster des Nano hat keine wirkliche Funktion. Aus dem Grund habe ich ihn ausgelötet und nun als Aufnahme-Knopf umfunktioniert. Mit ihm wird die Log-Funktion gestartet und beendet. Wird ein Log gestartet, wird ein eventuell im Speicher liegender, alter Log gelöscht.

Die ganze Schaltung habe ich zum Schluß in einen Schrumpfschlauch eingeschrumpt, wobei ich Aussparungen für das Display und den Taster über gelassen habe.

Die Aufnahmefunktion wird im OLED-Display und mit einer LED (Pin 13) des Nanos signalisiert, denn prinzipiell kann der TempLogger auch ohne Display betrieben werden.

Rückseite des Temperaturloggers:

Der fertige Temperaturlogger wiegt 8,9 Gramm mit allen Kabeln und Schrumpfschläuchen. Der Sensor schlägt zusätzlich mit 1,35 Gramm zu Buche.

Nachdem der Logger Strom (vom BEC oder USB) bekommt, erscheint zuerst kurz das SparkFun-Logo

Anschließend wird der Name und die Softwareversion eingeblendet.

Erkennt der Logger den Sensor nicht, so wird eine Fehlermeldung ausgegeben - auf dem Display und auch auf der seriellen Schnittstelle (die über den USB realisiert ist).

Normalerweise ist aber zum Glück ein Sensor angeschlossen, so dass der Temperaturlogger nun dies zeigt:

Die aktuelle Temperatur wird auch auf der seriellen Schnittstelle ausgegeben. Drückt man nun den Aufnahmeknopf, so wird die gemessene Temperatur in ganzen Grad in das EEPROM des Atmel-Prozessors geschrieben. Dort finden bis zu 1024 Messwerte ihren Platz. Der Log ist deshalb so auf ca. 30Minuten beschränkt. Für eine Flug-Aufnahme mehr wie genug. Das Display zeigt in der untersten Zeile an, wie viele Messwerte in den Speicher abgelegt wurden.

Die Aufnahme wird durch erneutes Drücken des Tasters beendet.

Die Daten werden nun auch ohne Strom über Jahre im Speicher gehalten. Um an die Log-Daten zu gelangen, reicht es, den Temperaturlogger mit dem USB an den PC anzuschließen. Nun gibt man ein Fragezeichen ein  und drückt die Eingabetaste. Daraufhin wird der gesamte Log übertragen. Der Syntax ist: <Messwertnummer>;<Temperatur><CR><LF>

Man kann mit der Maus den Log markieren, ihn mit Control-C kopieren und in eine Textdatei einfügen. Wird das Textfile mit der Endung "CSV" abgespeichert, kann man es anschließend direkt mit Excel öffnen und bearbeiten. Hier ein kurzer Log, der auf diese Weise entstanden ist.

 Der Programmcode kann sicher schöner geschrieben werden, aber er erfüllt seinen Zweck:

 

Die Software ist hier herunterladbar: (Software)

Zusätzlich zu dem Programm werden noch die Libraries 

OneWire.h, DallasTemperature.h, EEPROM.h, Wire.h, SPI.h und SFE_MicroOLED.h benötigt, die in Internet frei verfügbar sind.