alle Bilder: © Michael Brauckmann

Arduino-Projekt Temperaturlogger

Aktueller Bestand für diese Seite: 7 Bilder

Mein erstes Projekt mit der Arduino-Plattform sollte als Ziel einen Temperaturlogger mit folgenden Funktionen und Eigenschaften haben:

  1. Sensoren: Maxim DS18B20. Diese bieten (je nach Ausführung):

    • Hochwertiges Edelstahl Sondengehäuse (siehe Bild weiter unten)

    • Wasserfest und korrosionsbeständig (laut ebay Anbieter)

    • Messbereich: -55°C bis +125°C (–67°F to +257°F) (laut Datenblatt)

    • Genauigkeit: ±0.5°C (-10°C to +85°C) (laut Datenblatt)

  2. Zeitbasis: Softwareuhr

  3. Datenspeicher: SD-Karte

  4. Schutzart: IP 65

  5. Konfiguration: über Konfigurationsdatei auf der SD-Karte

  6. Einstellung der Softwareuhr: Nach einem Reset mittels Startwert aus Konfigurationsdatei

  7. Versorgung: 4 Akkus AA

Der Datenspeicher

Da der Logger auch längere Messreihen autark absolvieren soll, habe ich als Datenspeicher eine SD-Karte vorgesehen. Hierzu gibt es für die Arduino-Plattform bereits geeignete Bibliotheken und eine Weiterverarbeitung der Daten am PC ist somit ebenfalls leicht möglich. Auf der SD-Karte speichert der Mikroprozessor die Messwerte in einer csv-Datei ab.

Die Konfigurationsdatei config.txt

Die Parametrierung mittels einer Konfigurationsdatei hat mehrere Vorteile. Der größte Vorteil ist sicherlich, dass durch den Verzicht auf Taster, Schalter, LED oder sonstiger Anzeigeelemente außerhalb des Gehäuses, der mechanische Aufbau einfacher wird und die Forderung nach IP 65 leichter einzuhalten ist. Ganz nebenbei wird der Schaltungsaufbau einfacher und die Dokumentation der Messreihen kann ebenfalls komfortabler gestaltet werden, wenn man zusätzlich zu seinen Datentabellen die verwendete Konfiguraationsdatei mit archiviert.
Beim Start des Loggers (mittels Reset oder beim Anlegen der Versorgungsspannung) wird auf die SD-Karte zugegriffen und eine Datei mit dem Namen config.txt ausgelesen und die notwendigen Initialisierungen vorgenommen.

Beispielhaft hat diese Datei folgenden Inhalt:


	# diverse Initialisierungen für den Temperaturlogger
	#
	10			# Messwertauflösung von neun Bit (schneller) bis zwölf Bit
	1362157080		# Initialisierung Uhr (als Unixzeit UTC)
	2000			# Zeitinterval für die Messungen (in Millisekunden)
	60			# Verzoegerung Messstart in Sekunden
	240			# Dauer der Messung in Sekunden
	

Abgesehen von den Werten jeweils am Anfang der Zeilen, dürfen in dieser Datei keine Zahlen vorkommen. Andernfalls kommt der Parser im Arduino total aus dem Tritt und eine sinnvolle Funktion des Loggers bleibt aus.

Messwertauflösung

Die Messwertauflösung wird durch die verwendeten Sensoren bestimmt und kann von 9 bis 12 Bit eingestellt werden. Bei 9 Bit arbeiten die Sensoren etwas schneller. Bei mehreren Sensoren kann es also angeraten sein, hier eine Auflösung von 9 Bit einzustellen.

Der Arduino nimmt selber keine Messwertverarbeitung vor. Die Messwerte werden direkt in den Sensoren gebildet und an den Arduino digital übermittelt. Damit wird auch klar, das einzig die Sensoren die Messgenauigkeit bestimmen. Der Logger selber hat also keinen Einfluss auf die Werte.

Mit der Anzahl der Datenbits von 9 - 10 - 11 und 12 Bit, erhalten wir eine Messwertauflösung von 0,5 - 0,25 - 0,125 und 0,0625 °C.

Initialisierung Uhr

Die Softwareuhr im Mikroprozessor startet nach einem Reset mit dem Wert aus der Konfigurationsdatei. Dieser Wert wird als Unix Timestamp angegeben.

Eine Unix-Timestamp gibt die Anzahl der Sekunden an, die seit dem 01.01.1970 vergangen sind. Zeitangaben in diesem Format werden z.B. bei der Programmierung von PHP und MySQL-Datenbanken benötigt. Und eben auch bei diesem Temperaturlogger.

Die Umrechnung der Normalzeit in die Unix Timestamp kann bequem im Internet erfolgen. Folgende Adressen können hierzu beispielhaft angewählt werden:

andre-jochim.de
aritso.net

Für den Arduino ist nur wichtig, dass man ein Umwandlungstool wählt, dass ganz sicher nach UTC 0 umrechnet. Die beiden o.g. Tools haben sich bei meinen Versuchen herbei bewährt.

Messintervall

Das Messintervall, b.z.w. die Zeit zwischen zwei Messungen wird in Millisekunden angegeben.

Startverzögerung

Die Startverzögerung, also die Zeit die nach einem Reset vergehen muss, bevor die Messung startet, wird in Sekunden eingetragen.

Messdauer

Die Dauer der eigentlichen Messung wird ebenfalls in Sekunden angegeben.

Der Schaltplan

Sieht eigentlich recht übersichtlich aus.

Probleme mit mehreren Sensoren

Bei mehreren Sensoren am Bus, kann es zu Problemen kommen. Mir war es z. B. nicht auf Anhieb gelungen, fünf Sensoren gleichzeitig am Bus zu betreiben. Abhilfe brachte hier die Änderung des Pullup-Widerstandes von 4,7 kOhm auf 2,2 kOhm. Offensichtlich kann der Pullup-Widerstand mit dem Standartwert von 4,7 kOhm nicht mehr genug Strom für die Ladekapazitäten aller Sensoren liefern.

Der Schaltplan

Stromaufnahme

Die Stromaufnahme liegt beim uno-Board mit aufgestecktem Ethernet Shield bei einer Spannung von knapp 5,0 Volt aus 4 * AA Mignon Akkus im Leerlauf bei ca. 190 mA und während einer Messung bei ca. 207 mA.
Der weiter unten abgebildete Prototyp hat dagegen im Leerlauf nur noch 33 mA und bei einer Messung sind es bis zu 98 mA.

Der Programmcode

Hier nun der komplette Quellcode:


Letztes Update: 22.03.2014

Erforderliche Libraries

Innerhalb der IDE-Struktur müssen sich im Ordner Libraries noch zusätzliche Ordner befinden, die hier zum Download bereit stehen.

Libraries für IDE 1.3

Mindestens ab der IDE 1.6 hat sich wohl so einiges an den internen Strukturen und den Libraries geändert. Deshalb habe ich hier die aktuellen Libraries nochmal zusammen gestellt:

Libraries mind. ab IDE 1.6

Hilfreiche Quellen

Bei diesem Projekt habe ich auf Informationen oder Programmcode aus folgenden Quellen zurückgegriffen:

arduino.playground
die Katzenseite
1-wire-tutorial
ds18b20-arduino
elchs-kramkiste
macherzin.net

Sollte ich weitere Quellen vergessen haben, hier aufzuführen, so bitte ich dies zu entschuldigen und sich in diesem Falle bei mir zu melden. Eine böse Absicht steckt nicht dahinter, ich habe das dann schlichtweg vergessen und den Überblick verlohren.

Meine besondere Buchempfehlung

Ganz besonders empfehlen kann ich an dieser Stelle das Arduino Kochbuch von Michael Margolis. Leider hat es in der deutschen Übersetzung nicht den vollen Umfang der Originalausgabe. Es fehlen die letzten drei Kapitel sowie die Anhänge. Im Originaltext kann man diese Inhalte dann beim Verlag herunterladen.
Im Vorwort des Buches, auf Seite XIV, ist hierzu zu lesen, dass diese Reduzierung notwendig gewesen wäre, ...um einen akzeptablen Verkaufspreis für das Buch zu gewährleisten.
Bei einem Buchpreis von immerhin 44,90 € können wir also froh sein, dass nicht noch mehr Kapitel unter den Radaktionstisch gefallen sind.

Nachbauhilfen

Nach einer Anfrage eines interessierten Lesers, habe ich mich, nach einer Projektpause von fast 2 Jahren, mal wieder mit dem Logger beschäftigt.

Mittlerweile hat sich an der Arduino-IDE so einiges getan, so dass ich mit meiner derzeit aktuellen Entwicklungsumgebung den alten Code nicht mehr kompilieren konnte. Mit der alten 1.3 hat es aber weiterhin funktioniert. Nur gut, dass ich die noch nicht gelöscht hatte. Für Versuche und zur Fehlereinkreisung ist so was immer wieder gut.

Mindestens ab der IDE 1.6 muss explizit die SPI-Library mit eingebunden werden. Aber das war es nicht alleine, denn danach hagelte es Fehlermeldungen im Zusammenhang mit der Time-Library. Diese musste ich also auch noch aktualisieren. Zuletzt habe ich dann meine IDE noch auf die 1.6.1 aktualisiert, die Kommentare im Code angepasst und dann erfolgreich die neue Version 13 kompiliert und auf den Logger geladen.

Es gab aber auch noch andere Probleme. So haben mir zum Beispiel bei meinem ersten Testlauf meine Akkus einen Strich durch die Rechnung gezogen. Die waren wohl doch nicht so voll wie angenommen. Der Nano war ständig im Bootmodus. Ein altes Handynetzteil am USB-Anschluss des Nano hat dann schnell und problemlos für Abhilfe gesorgt.

Als nächstes wurde keine csv-Datei auf der SD-Karte angelegt. Da ich eine micro-SD in einem Adapter für meine Versuche hervorgekramt hatte, unternahm ich einen letzten Versuch und steckte die Micro-SD ohne Adapter direkt in das Kartenmodul auf der Platine. Das war es dann, der Nano hat danach wie vorgesehen gearbeitet. Warum das Kartenmodul nicht mit der großen SD gearbeitet hat weiß ich im Moment noch nicht. Ich glaube mich aber zu erinnern, dass das vor zwei Jahren auch schon so war. Man wird ja langsam alt.

Zu meinen aktuellen Versuchen und der hier auf dieser Seite nun aktualisierten Version, habe ich hier noch ein paar Dateien zum Download zusammen gestellt:

Die ab IDE 1.6 erforderlichen Libraries
Eine config.txt für die ersten Versuche
Meine Ergebnis-csv
und die Grafik daraus
der aktuelle Code in der Version 13

Bilder zum Projekt

Hier folgen nun ein paar Bilder zum Projekt. Man möge mir an dieser Stelle die staubigen Bauteile verzeihen.

Arduino Nano

Das Arduino BoardTOP

Der erste Prototyp ist mit einem Arduino Nano ausgerüstet.

SD-Kartenmodul

SD-KartenmodulTOP

Hier sehen wir das SD-Kartenmodul.

Resettaster

ResettasterTOP

Der Schaltung habe ich einen zusätzlichen Resettaster spendiert.

Sensoren DS18B20 von Dallas

TemperatursensorenTOP

So sehen die von mir eingesetzten Sensoren aus. Bei ebay kann man unterschiedliche Ausführungen erwerben.

Der erste Prototyp

Der erste PrototypTOP

Der erste einsatzfähige Prototyp. Ein IP 65 tauglicher Abzweigkasten dient hier als Gehäuse.

Detail vom ersten Prototyp

Detail vom ersten PrototypTOP

Alles sieht sehr übersichtlich aus. Das Kabel für den Sensorbus wird über eine geeignete Verschraubung herausgeführt. Das Akkupack muss noch sicherer befestigt werden, so wie hier zu sehen, fehlt es noch an der notwendigen Stabilität.

Anwendungsbeispiel

Ein AnwendungsbeispielTOP

Als Anwendungsbeispiel habe ich hier mal eine mit gnuplot erstellte Datenauswertung eingefügt. Hierbei hatte ich drei Sensoren an meiner Zentralheizung installiert. Den Sensor am Vorlauf zum Brauchwasserspeicher habe ich dann in eine Eispackung gewickelt. Dies ist in der Grafik sehr schön zu sehen und die Zuordnung der Sensoren war damit geklärt.