• Hallo Zusammen, Aufgrund der aktuellen Situation setzten wir die Möglichkeit aus, sich mit Gmail zu registrieren. Wir bitten um Verständnis Das RCMP Team

Praxisbericht Selbstbau einer Solarwärmesteuerung mit Arduino

BAXL

Admin
Mitarbeiter
Kürzlich musste mein Solarwärmespeicher ausgetauscht werden, weil die Heizschleife für die Nachheizung durchgerostet war. In dem Zuge hat der Monteur auch den Solarkreislauf neu abgedichtet und befüllt.

Dabei bin ich auf die Idee gekommen, den Solarregler nachzubauen. Derzeit wird die Anlage durch eine Resol E1D gesteuert. Drei Temperatursensoren, von denen einer die Kollektortemperatur misst, einer die Speichertemperatur und der dritte die Aussentemperatur. Das muß man doch auch selbst bauen können.

Als Basis dient ein Arduinoklon von Funduino. Zu dem Zweck habe ich mir ein komplettes Set von Funduini gekauft, inkl. eines LCD-Displays einem TMP36 und eine Menge Kleinzeugs.

Zur Anzeige der Temperaturen dient das Display und eine LED, falls eine Temperatur überschritten wird.
Die Verkabelung war recht einfach, weil das Display ein so genanntes i2c Display ist, das heißt, dass ich über eine kleine Zusatzschaltung die Anzeigedaten seriell übertrage, also in Summe 4 Kabel. +5V, Masse, Datenleitung und Taktleitung. Am Pin A0 wird der TMP36 angeschlossen. Die LED ist am Digitalpin 3.

Kurz ein paar Codezeilen zusammenkopiert und modifiziert und klappt!

Und so sieht der Testaufbau aus.



Gestern Abend habe ich noch flux Temperatursensoren bestellt, DS18B20. Das sind Sensoren, die die Messdaten über einen Seriellen Bus übertragen. Damit kann man quasi beliebig viele Messstellen bedienen.



Wie das mit der Programmierung geht, muß ich noch sehen, weil die Sensoren vorher quasi unbekannte Adressen haben und ich ja definierte Messstellen brauche. Es gibt zwar Programmbeispiele, bei denen die Sensoren der Reihe nach eingelesen werden, ich müsste allerdings wissen, welcher Sensor wohin gehört.
 
Zuletzt bearbeitet:

jagged

Mitglied
Wow.
Das hört sich total interessant an.
Ich hab so ein Ding auch auf dem Dach.
Wieviel kostet denn so ein Sensor?
 

BAXL

Admin
Mitarbeiter
Ich zahle für 5 Sensoren 8,99€ bei Amazon. Das Fernziel ist, auch die Pumpe in Ihrer Drehzahl zu steuern, um eine optimale Sonnenernte hinzubekommen.
 

BAXL

Admin
Mitarbeiter
Gestern sind die DS18B20 gekommen. Irgendwie steige ich noch nicht so ganz bei der Programmierung durch :(. Es gibt zwar unzähliche Beispiel-Sketches, trotzdem würde ich gerne verstehen was da passiert. Die Kommunikation läuft dabei über eine onewire Verbindung. D.h. dass die Sensoren quasi eine eigene Intelligenz besitzen und auf Anforderung ihren Messwert über die Eindrahtleitung übermittel. Das Ganze läuft biderektional. Der Sensor muß mit einer eindeutigen Adresse angesprochen werden und liefert sogleich das Ergebnis zurück. Das ist mit den beispielen im Prinzip keine große Sache, allerdings kann man dann nicht so einfach die Sensoren irgendwo platzieren oder beliebig austauschen. Im Zweifel muß man bei einem Sensorwechsel wieder in den Quellcode und die Adresse neu fest eintragen.

Bei der Messung der Differenztemperatur muß ich schon wissen, welcher Sensor oben im Speicher steckt und welcher unten, sonst funktioniert die Sache nicht. Mal sehen ob es eine Möglichkeit über einen Shield mit SD Karte geht. Da könnte man evtl. in einer Datei die Adressen hinterlegen und könnte bei einem Sensorwechsel dessen Adresse einfach mit einem Texteditor in dem Konfigfile ändern. Es würden sich auch weitere Möglichkeiten zur Feinjustierung ergeben, z.B. die Hysterese verändern und natürlich Logdaten mitschreiben.

Die erhältlichen SD-Shields beinhalten noch eine zusätzliche Echtzeituhr, womit natürlich das nächste Problem lauert, wenn diese mal eben neu gestellt werden muß. Eine Lösung könnte auch ein Atomuhrerweiterung bieten, die man einmal am Tag abruft. Arduino mit DCF77-Modul und RTC Echtzeituhr DS3231 Aber alles eins nach dem anderen. Zuerst müssen jetzt die neuen Sensoren zum Laufen gebracht werden.

Irgendwo habe ich auch gelesen, dass man mehrere Instanzen für die onwire Geschichte einrichten kann, dann müssten das aber soviele sein, wie ich Temperatursensoren des Typs DS18B20 habe. Fragen über Fragen....

Edit:

Ich konnte dem DS18B20 seine Geheimnisse entlocken und habe das in einem gesonderten Thema erklärt.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Heute hatte ich endlich wieder Zeit zum Spielen. Zuerst habe ich die DS18B20 mit einem kleinen Programm ausgelesen, um die einzelnen Adressen zu erfahren. Sensoren wurden nummeriert und die Adressen aufgeschrieben.

Dann kam der Test mit drei Sensoren, die ich gleichzeitig angeschlossen habe. Dazu gibt es diverse Progrämmchen, die über den seriellen Monitor am PC die gemessenen Temperaturen anzeigen. Programm gestartet und es sah alles ganz normal aus, drei Temperaturen wurden angezeigt. Je nach dem welchen Sensor ich in die Hand genommen habe, stieg auch die dazugehörige, angezeigte Temperatur.

Dann wollte ich sehen, ob alle drei in etwa den gleichen Wert anzeigen und habe die Dinger gleichzeitig in die Hand genommen. Für eine kurze Zeit lief auch alles ganz normal, bis plötzlich keine der Sensoren mehr erkannt wurden und das Programm Sensorfehler meldete. Irgenwie habe ich es gerochen und die Sensoren einzeln angefasst. Einer war brühend heiß! Sofort das USB-Kabel gezogen.

Die beiden kühl gebliebenen DS liefen wieder ganz normal durch. Den "Heißen DS" habe ich nach einer Wartezeit erneut (alleine) angeschlossen. Auch der läuft jetzt seit ein paar Minuten wieder unauffällig.

Die Recherche im Internet hat einige Ergebnisse ausgespuckt, wo dann darüber gemutmaßt wurde, ob die Datenleitung zu schwingen beginnt, wenn man mehrere Sensoren gleichzeitig, sternförmig an einen 4k7 anschließt. Einer hat als Lösung einen Kondensator parallel geschaltet, ein anderer empfahl einen kleineren Widerstand (so um die 3k) und wieder ein anderer empfahl die Sensoren nicht so oft abzufragen, weil dadurch eine Selbsterwärmung entstehen könne.

Am Abfrageintervall habe ich jetzt nichts verändert und auch nicht am 4k7 Ohm Widerstand. Es sind bei der Fehlersuche eben einmal nur zwei Sensoren angeschlossen gewesen und der "Heiße" jetzt alleine. Es spricht also etwas für den kleineren Widerstand, nur warum genau verstehe ich noch nicht.

Edit nach fast einer Stunde Testlauf.
Der "Heiße" läuft nun schon gut eine Stunde ohne Probleme. Ich werde jetzt mal die zwei noch nicht eingesetzten Sensoren mit den "Kalten" zusammenschalten und gucken was passiert.
 
Zuletzt bearbeitet:
D

Deleted member 1492

Gast
Eine Abfrage alle paar Minuten sollte doch eigentlich reichen bei so einem Projekt.

Mir geht wegen der beschriebenen Problematik gerade ein Multiplexer durch den Kopf:



Bei den Amazonen im Dreierpack für den Arduino: 16 Kanal Multiplexer

Gibt es auch mit nur 8 Kanälen.
 

BAXL

Admin
Mitarbeiter
Kurz zum Anschluß der Sensoren. Es gibt wohl zwei Ausführungen des Sensors, die eigentlich aber gleich sind. Man kann diese über drei Leitungen anschließen und auch mit zweien.

Bei der Dreileitungsvariante kommt ein Kabel an Masse, eins an +5V und ein Kabel an einen digitalen Eingang des Arduino. In den Beispielen ist das idR. Pin 3, der auch PWM-Signale ausgeben kann. Ob das einen besonderen Grund hat weiß ich nicht.

Auf jeden Fall soll dann noch ein 4k4 Widerstand zwischen +5V und den Signalleitungen als Pull-Up-Widerstand gelegt werden. Warum der interne Pull-Up des Arduinos nicht reicht weiß ich nicht. Vielleicht wird der sonst zu stark belastet und der Eingang liefetrt keine gescheiten Daten mehr.

Beim Zweidrahtanschluß werden die Anchlußleitunge für Plus und Masse, des Sensors gemeinsam auf Masse gelegt und das Signalkabel mit einem 4k7 Widerstand an +5V gelegt.
Wenn ich die Erklärungen richtig verstanden habe, soll sich der DS über den 4k7 quasi selbst aufladen (kling irgendwie doof, ich weiß es aber nicht anders zu erklären) und nutzt die gespeicherte Energie um funktionieren zu können, also eine Messung zu machen und das Ergebnis zu übermitteln. Genau habe ich das noch nicht verstanden.

Die Sensorvarianten nennen sich PAR (also parasitärer Widerstand), das bedeutet eben, dass der Sensor seinen "Arbeitsstrom" aus dem Widerstand nuckelt und die "normale" Version mit einem gesonderten +Vcc Anschluss. Man kann den normalen DS wohl auch wie die PAR-Version mit nur zwei Drähten betreiben. Darum schrieb ich ja, dass bei Versionen quasi gleich sind. Den Grund für die unterschiedliche Bezeichnung habe ich sogar irgendwo gelesen, doch ist das für diese Anwendung nicht von Belang.
 

BAXL

Admin
Mitarbeiter
Eine Abfrage alle paar Minuten sollte doch eigentlich reichen bei so einem Projekt.

Mir geht wegen der beschriebenen Problematik gerade ein Multiplexer durch den Kopf:



Bei den Amazonen im Dreierpack für den Arduino: 16 Kanal Multiplexer

Gibt es auch mit nur 8 Kanälen.
Danke für den Tipp :). Diese Art onewire Sensoren sollen einen MUX eigentlich überflüssig machen, weil jeder Sensor eine eigene Adresse hat. Es muß also etwas mit der Versorgung (Pull-Up) der Datenleitung zu tun haben. Verschiedentlich rät man bei längeren Leitungen zu kleineren Pull-Ups, weil längere Leitungen gewisse Kapazitäten erzeugen. Anderer Tipp ist auch einen Tiefpass zu nehmen, also einen sehr kleinen Kondensator parallel zur Datenleitung in der Nähe des Professors. So richtig (er)klären konnte das bisher aber keiner. Möglicherweise hängt das auch von den einzelnen Sensoren ab, die ggf. Fertigungstoleranzen aufweisen, weshalb es mal geht und mal nicht geht. Manch einer schaltet auch 10 Stück an einen 4k7 parallel und hat keine Probleme damit.
 
D

Deleted member 1492

Gast
Das was normalerweise Plus ist kommt gemeinsam mit Gnd an Minus?

Das muss ich erstmal verstehen ......... :confused:
 

BAXL

Admin
Mitarbeiter
Zuletzt bearbeitet:
D

Deleted member 1492

Gast
Da ist aber ein Mosfet zwischen, bei Deiner Schaltung auch?
 

BAXL

Admin
Mitarbeiter
Kurzer Zwischenstatus, der "Heiße" wurde durch einen anderen Sensor ersetzt. Bisher laufen 3 gleichzeitig ohne besondere Vorkommnisse.
 

BAXL

Admin
Mitarbeiter
Auch wenn es vielleicht nicht so aussieht, es geht aber weiter. Teilweise in kleinen Schritten.

Mittlerweile habe ich die Dallas-Sensoren DS18B20 zusammen mit dem TM36 in eine Schaltung und in ein Programm integriert. Das Programm fragt drei DS-Sensoren und den TM ab und zeigt die Werte auf einem LCD-Display an. Das ist aber erst die halbe Wahrheit. Werte anzeigen ist ganz interessant, man kann aber nicht allzuviel damit anfangen.

Die erste richtige Zwischenetappe soll das Abfragen der Temperaturen sein, die dann mit Datum und Uhrzeit in eine PC-lesbare Datei geschrieben werden sollen.
Dazu habe ich mir von AZ-Delivery ein neues Shield bestellt und schon bekommen. Das ist ein DatenLogger-Shield. Auf dem Shield ist eine DS1307 Echtzeituhr und ein SD-Kartenleser.

Die Inbetriebnahme verlief relativ einfach. Eine entsprechende SD-Karte muß FAT32 formatiert sein, sonst kann sie mit der Arduino SD-Library nicht bschrieben werden.
Die Echtzeituhr muß man einmal stellen, damit sie funktionstüchtig ausgelesen werden kann. Als Hilfe bekommt man von AZ-Delivery PDF-Datenblätter mit sehr guten Anleitungen und direkt Links zu den benötigten Programmquellen.

Ich habe also im Moment einen Arduino mit der Temperaturmeßschaltung und einen zweiten, mit dem ich das DataLogger Shield ausprobiert und eingestellt habe.
Ich muß dafür jetzt das Meßprogramm um die Uhrzeit und Speicherroutinen erweitern. Dann könnte ich zumindest den Temperaturverlauf des Wärmespeichers in seinen drei Zonen (Wassereinlauf, Mittenbereicht, Ausflußbereich) mitschreiben.

Versuchsaufbau für die Temperaturmessung mit Display



Arduino mit DataLogger Shield von AZ-Delivery
Die SD-Karte liegt im Moment daneben, weil das laufende Testprogramm mir die Karte sonst mit unsinnigen Werten der Analogkanäle vollschreiben würde :)



Für eine noch bessere Aufzeichnung wäre es interessant noch zu wissen, wann jeweils die Solarwärmepumpe das heiße Wasser vom Kollektor zieht, also quasi wann ist sie an und wann aus ist.

Die Pumpe habe ich mal aus der Not heraus über Stecker und Steckdose an den aktuellen Solarregler (E1D von Resol) angeschlossen. Es wäre also sehr einfach möglich, über ein 230V Relais, galvanisch getrennt, einen Schaltkontakt zu betätigen, der vom Arduino abgefragt wird. Danach werde ich mal suchen und bis dahin das Programm verfeinern.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Wie man in dem Thema zu den Shields und Sensoren erkennen kann, bin ich schon ein ganzes Stück weiter gekommen. Im Moment läuft der Testaufbau seit drei Tagen getrennt vom PC. Es wird nur Betriebsspannung von einem USB-Ladegerät eingespeist.


Es gab einige Hürden zu umschiffen. Aber eigentlich ging es recht geschmeidig. Dadurch, dass immer mehr Module mit ihren Librarys zum Einsatz kommen und das Programm selbst auch an Umfang zugenommen hat, meckert der Compiler herum, dass der Speicherplatz eng würde und es zur Laufzeit zu unvorhersehbaren Programmabstürzen kommen könne. Darum habe ich den Arduino Mega (natürlich einen Clone) bestellt. Da sollte ich mit dem Programmspeicherplatz einstweilen zurecht kommen :D.

Das 4x20 Zeichen Display muß auch noch komplettiert und angeschlossen werden.

Im Moment ist der Programmablauf grob wie folgt:

Zuerst natürlich die Definition von Variablen und die Einbindung der Librarys

In der Setup Routine setze ich die Parameter für die serielle Schnittstelle zum PC, definiere die digitalen Ports nach Bedarf als Input oder Output-Port.
Die Dallas DS18B20 Temperatursensoren werden auf Vorhandensein überprüft.

Die Haupschleife ließt zuerst der Reihe nach die DS18B20 Sensoren ein und gibt den Wert jeweils auf das Display aus.
Dann messe ich die "Raumtemperatur" mit dem TMP36-Sensor ein und stelle den Wert ebenfalls auf dem Display dar.
Einmal kurz noch die Uhrzeit anzeigen, bevor ich eine Zeitschleife abfrage.

Alle 5 Minuten (Tagsüber) oder alle 10 Minuten (nachts), schicke ich das Programm in eine Subroutine, in der der Reihe nach alle Sensoren abgefragt und die Ergebnisse in eine Datei geschrieben werden. Die Daten lege ich mit Semikolon getrennt als Text in eine Reihe, zusammen mit Datum und Uhrzeit, auf die SD-Karte.

Danach springt das Programm wieder an den Anfang und zeigt erneut 5 Minuten lang abwechselnd die Temperaturen und Uhrzeit auf dem Display.
Eigentlich wäre das nicht erforderlich für den Zweck der Datenerfassung, man sieht dann aber schön ob der Prozessor noch lebt und die Messwerte plausibel sind.

Die Sache wird noch weiter aufgeblasen. Zur Abfrage, ob die Solarpumpe läuft, habe ich schon ein 230V Relais hier liegen, alternativ 230V Kontrollampen, die ich über einen Fotowiederstand abfragen kann. Also beide Varianten eine galvanische Trennung. Sobald das umgesetzt ist, versuche ich die Elektronik in eine provisorische Box unterzubringen und lasse die Messwerterfassung parallel mitlaufen bis ich mir sicher bin, dass mein Arduino nicht plötzlich aussteigt, außerdem ist noch das Problem mit dem Messensor am Kollektor, für den ich auch noch nach einer Lösung suche. Abel alles schön eins nach dem anderen. Eine mögliche Lösung liegt schon hier in Gestalt eines WLAN-fähigen, arduinokompatiblen ESP 8266 Moduls

 

BAXL

Admin
Mitarbeiter
Die Länge des Übertragungsweges bzw. das Nichtvorhandensein einer nutzbaren Kabelverbindung. Die aktuell aktive Steuerung, die ich aus Sicherheitsgründen nicht antasten will, arbeitet mit einem PT1000
 

BAXL

Admin
Mitarbeiter
Wenn ich parallel zum Fühler gehe verändere ich die bestehende Messschaltung, zumal ich einen eigenen Messtrom dadurch schicken oder den vorhandenen Spannungsfall interpretieren müsste, für den ich die virhandene Beschaltung nicht kenne. Wie gesagt, aus Gründen der Betriebssicherheit soll das existietende System nicht angetastet werden.
 
D

Deleted member 17

Gast
Das existierende System ist gewährleistungsrelevant?
Sorry das ich vielleicht gefühlt blöde
frage.;)
 
Top Bottom