alle Bilder: © Michael Brauckmann
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:
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)
Zeitbasis: Softwareuhr
Datenspeicher: SD-Karte
Schutzart: IP 65
Konfiguration: über Konfigurationsdatei auf der SD-Karte
Einstellung der Softwareuhr: Nach einem Reset mittels Startwert aus Konfigurationsdatei
Versorgung: 4 Akkus AA
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 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.
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.
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:
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.
Das Messintervall, b.z.w. die Zeit zwischen zwei Messungen wird in Millisekunden angegeben.
Die Startverzögerung, also die Zeit die nach einem Reset vergehen muss, bevor die Messung startet, wird in Sekunden eingetragen.
Die Dauer der eigentlichen Messung wird ebenfalls in Sekunden angegeben.
Sieht eigentlich recht übersichtlich aus.
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.
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.
Hier nun der komplette Quellcode:
Letztes Update: 22.03.2014
Innerhalb der IDE-Struktur müssen sich im Ordner Libraries noch zusätzliche Ordner befinden, die hier zum Download bereit stehen.
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.6Bei 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.
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.
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
Hier folgen nun ein paar Bilder zum Projekt. Man möge mir an dieser Stelle die staubigen Bauteile verzeihen.
Das Arduino BoardTOPDer erste Prototyp ist mit einem Arduino Nano ausgerüstet. | |
SD-KartenmodulTOPHier sehen wir das SD-Kartenmodul. | |
ResettasterTOPDer Schaltung habe ich einen zusätzlichen Resettaster spendiert. | |
TemperatursensorenTOPSo sehen die von mir eingesetzten Sensoren aus. Bei ebay kann man unterschiedliche Ausführungen erwerben. | |
Der erste PrototypTOPDer erste einsatzfähige Prototyp. Ein IP 65 tauglicher Abzweigkasten dient hier als Gehäuse. | |
Detail vom ersten PrototypTOPAlles 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. | |
Ein AnwendungsbeispielTOPAls 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. |