Arduino - Überwachung von Heizungs-, Warmwasser- und Solarkollektor-Temperaturen

Die Protokollierung sollte

  • die in den verschiedenen Vor- und Rücklaufrohren (Heizung, Warmwasserspeicher, Brauchwasser-Erwärmung durch Solarkollektoren) herrschenden Temperaturen erfassen,
  • möglichst wenig Strom verbrauchen,
  • weitestgehend automatisiert möglich sein (Logging, Daten-Abruf, grafische Auswertung),
  • das Datum und die Zeit der Aufzeichnungen enthalten,
  • eine optische Funktionskontrolle ermöglichen (LED blinkt)
  • einen möglichst geringen schaltungs- , verdrahtungs- und programmtechnischen Aufwand erfordern,
  • möglichst minütlich erfolgen, da die Temperaturwerte sich gerade bei der Aufheizung des Warmwasserspeichers per Gas sprunghaft ändern,
  • mit ausreichender Genauigkeit erfolgen.
  • Dafür getroffene / erforderliche Maßnahmen / Entscheidungen:

  • Microcontroller (hier z.B. Arduino-UNO / Mega256) statt PC,
  • LAN-Anschluss,
  • RTC (Real-Time-Clock),
  • Zwischenspeicherung der Messwerte mit Datum / Zeit auf einer SD-Karte,
  • Lesen der Log-Dateien auf der SD-Karte über Standardprogramm
  • I2C-Temperatursensoren Dallas DS18B20, welche die Temperatur selbst errechnen und für über 100 °C geeignet sind,
  • Verwendung von gnuplot für die grafische Auswertung (dazu später mehr),
  • der Betrieb der DS18B20-Sensoren mit 9- statt 12-Bit-Genauigkeit reicht aus (also "nur" 20,0, 20,5, 21,0 statt 20,01, 20,02 ... 20,98, 20,99, 21,00 °C). Dadurch erhöht sich auch die Auslesefrequenz.
  • Ausgangspunkt war ein Arduino Uno. Dieses konnte ich aber mit dem am Ende des Projektes vorhandenen Programm-Code nur dann betreiben, wenn ich sämtliche Debug-Ausgaben (siehe Programm, weiter unten) abgeschaltet ließ. Zum Testen aller Funktionalitäten musste ich ein Arduino Mega 2560 benutzen, das zwar über 256 KByte Flash-Speicher verfügte, von dem aber (z.Zt.) nur 128 KByte nutzbar waren (Arduino 021-Umgebung).

    Die DS18B20-Sensoren enthalten eine jeweils individuelle Hardware-Adressierung (ähnlich der MAC-Adresse von Netzwerkkarten). Diese Adressen müssen Sie herausfinden (Beispiel dazu im "Sketch" bei eingeschaltetem Debug-Modus), denn die Sensoren müssen einzeln angesprochen werden, um zu wissen, welcher Sensor welchen Wert denn nun misst. Wenn Sie gleich mehrere Sensoradressen ermitteln wollen, können Sie diese jeweils einzeln mit den Fingern erwärmen. Ich habe danach die Sensoren entsprechend verkabelt und jedes Kabel mit einem Beschriftungsschild versehen, damit ich die Adressen auch später noch nachvollziehen kann.

    Nachdem der Prototyp mittlerweile über 2 Wochen ohne Störung und / oder Unterbrechung durchgelaufen ist hier der mit Fritzing erstellte schematische Testaufbau:

    Fritzing-Schema
    Für großes Bild hier klicken.

    Sie sehen, dass im Endeffekt die DS18B20-Sensoren nur jeweils mit 2 Drähten angeschlossen sind. Sie werden im sogenannten "parasitären" Modus betrieben (ansonsten bräuchten sie jeweils 3 Anschlüsse).

    Nun der reale Testaufbau auf einem Breadboard bzw. Steckbrett:

    Breadboard-Aufbau
    Für großes Bild hier klicken.

    Das Programm (bei Arduino "Sketch" genannt) finden Sie hier <<== Klicken für Download.



    Hinweis: Der Code wurde für eine Arduino-Version < 1.0 erzeugt. Sie werden also beim Versuch, den Sketch mit einer der neueren Versionen zu übersetzen, auf Probleme stoßen. Ich empfehle daher die Version 0.23 mit den dazugehörigen "Libraries". Diese können Sie auf der entsprechenden Arduino-Seite finden. Da ich mittlerweile meine Temperaturen anders messe/logge, bitte ich um Verständnis, dass ich auch mangels Zeit keine Anpassung an die neueren Arduino Versionen vornehmen möchte.

    Für den realen Aufbau habe ich zusätzlich zum Arduino Uno ein "Prototype bzw. Install Shield" sowie ein Ethernet-Shield mit Micro-SD-Karten-Einschub benutzt (weiterer Aufbau siehe unten). Anmerkung: Sobald ich den Link zum abgebildeten Proto-Shield finde, werde ich ihn nachreichen. Der Aufbau dürfte aber auch mit anderen "Proto-Shields" kein großes Problem sein.

    Install bzw. Proto-Shield
    Für großes Bild hier klicken.

    Der rote und blaue Jumper (links unten in den Anschlusskabeln des RTC-Breakout-Boards) dient der Anpassung an die Testumgebung mit dem Mega 2560, da dessen SDA- / SCL-Leitungen auf anderen Pins liegen als beim Uno. Die rote LED ist die Kontroll-Anzeige. Sie blinkt alle 60 Sekunden für 5 Sekunden. Das gelbe und schwarze Kabel führt zu den (allen!) angeschlossenen DS18B20-Sensoren. Links oben sehen Sie das DS1307-RTC-BreakOut-Board. Ich habe es extra so überstehend montiert, damit ich auch noch ohne Probleme die Pufferbatterie (auf der Unterseite des BreakOut-Boards) wechseln kann.

    Anschluss der Sensoren (Verlöten und Schrumpfschlauch-Isolierung):

    Die Farben der Kabel (gelb / schwarz) stimmen mit denen zum Anschluss auf dem Protoshield überein. Alle Temperatur-Sensoren sind letztendlich an den Prototypen über eine Lüsterklemme verbunden. Bald wird das Ganze in ein Gehäuse verfrachtet und dann werden Steckkontakte für die Verbindung der Sensoren genommen.

    DS18B20 - Pin 2
    Für großes Bild hier klicken.

    DS18B20 - Pin 1 und 3
    Für großes Bild hier klicken.

    DS18B20 - fertig
    Für großes Bild hier klicken.

    Gesamtaufbau:

    Prototyp
    Für großes Bild hier klicken.

    Die Sensoren wurden dann alle unter die jeweilige Rohrisolierung gesteckt.

    Grafische Auswertung / Darstellung:

    Diese geschieht mittels gnuplot und einem bash-Skript.

    Eine Beispiel-Grafik im Format 1.400 x 600 Pixeln sehen Sie hier.

    Die (vorläufigen) Skripte zum Erzeugen der Grafiken (mit Beispiel-Dateien) finden Sie hier.

    Beachtenswert ist, dass die Basis-Parameter-Datei für den gnuplot-Aufruf zur Laufzeit vom Bash-Skript ergänzt wird. In den Dateien sollten entsprechende Kommentierungen alles Notwendige erklären.

    Hinweise:

  • Die Skripte / Beispiele stehen - soweit nicht andere Rechte dem entgegenstehen - unter der GNU GPL 3.0.
  • Ich habe mich bemüht, die Skripte ausführlich zu kommentieren.
  • Die Bilder und sonstigen Daten stehen - wie sonst auch - unter der Lizenz CC by-nc-sa 3.0 (siehe unten).
  • Erste Fassung. Korrekturen / Ergänzungen folgen noch.
  • Nach einer Uptime von ca. 1 1/2 Monaten gab es ein erstes und einmaliges Problem: Einer der Temperatur-Sensoren wurde mit -127,0 °C in der Log-Datei verewigt. Dies machte sich natürlich drastisch in der Grafik bemerkbar. Dieser Fehler ließ sich zwar einfach durch ein Editieren der Log-Datei (da Text-Format) beheben (der vorher- / nachher-Wert war identisch und plausibel), könnte aber in einer zukünftigen Version per Fehlerroutine abgefangen werden. Mal schauen ...