Poolwasser mit der Sonne aufheizen.

Bernhard - Fony
Beiträge: 73
Registriert: Mo 12. Jun 2023, 17:49
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Bernhard - Fony »

Dan beeile dich ab Morgen soll schönes Wetter kommen ;)
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Admin »

Das wird nix. Die Lieferanten sind von der Firma Langsam. Ich habe noch nicht mal auf meine Anfrage eine Antwort. :(o):
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Admin »

So, die Solar-Wassertaschen sind installiert, die Pumpe ist drann, die Temperatur-Sensoren sind drann, es läuft soweit. Morgen passe ich noch ein bischen was am Programm an und mache erste Tests. Dann sollte es Selbsständig laufen, ohne dass ich irgendwie eingreifen muß. Gibt nur zwei Regler, einer für Max-Pooltemperatur und der zweite für Max-Temperaturdifferenz. :(oo):

Danach kümmere ich mich noch um Verbindung mit dem Solar-MPPT-Laderegler. Das wird der nächste Schritt. Ich mache morgen mal ein paar Bilder von den Aufbauten am Poolhaus. Es hat sich etwas geändert. Meine Solarpanels habe einen anderen Platz bekommen, weil die Wassertaschen mehr Platz als geplant eingenommen haben.

Aber alles gut. :(V):
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Admin »

Hier ist das PoolHaus jetzt mit den Solar-Wassermatten am Dach. Und die SolarPanels habe ich auf 24 Volt umgeklemmt. Die Wassermatten kann ich nicht empfehlen. Das Zeug ist offenbar neu schon undicht. Sogar meine Pumpe, die gerade mal 1000 Liter in der Stunde bringt, sorgt für genügend Druck, dass das Poolwasser vom Dach tropft. Wenn ich die Pumpe auf halber Leistung fahre, tropft nicht mehr so viel runter. Also dieses Zeug ist Müll. Wir hatte auch gewaltig viel zu tun, dass wir dieses Zeug gerade biegen konnten. Man kann den Müll kaum bändigen. Das war ein Griff ins Kloo :evil: :evil: Auch die Art mit Kunden umzugehen ist unterirdisch. Ich hätte noch ein paar Gummi Abschlusskappte gebraucht. Ich wollte die bestellen und natürlich bezahlen. Auf zwei Anfragen per Mail kam gar keine Antwort, auf meine dritte Mail, die dann etwas ungemütlicher ausgefallen ist, kamen Leere Sprüche, von wegen sie fragen bei den Lieferanten nach. Aber kam wieder keine Antwort mehr. :evil: :evil: "tillvex® Solarheizung Pool Solarkollektor Poolheizung Solarmatte Solarabsorber" bei Ebay. Den Link möchte ich nicht reinsetzen, weil die mit sonst unterstellen, dass ich gegen sie NegativWerbung mache. Positiv Werbung würde ich ja gerne machen, aber dazu fällt mir nichts vernünftiges ein. :evil: :evil:
.
Pool_Solarheizung.jpg
Pool_Solarheizung.jpg (446.32 KiB) 505 mal betrachtet
Bernhard - Fony
Beiträge: 73
Registriert: Mo 12. Jun 2023, 17:49
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Bernhard - Fony »

"Und die SolarPanels habe ich auf 24 Volt umgeklemmt"
Darf ich fragen warum?
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Admin »

Ja, weil du ja auch gemeint hast, dass man in Reihenschaltung auch bei wenig Sonne noch bessere Werte rausbekommt. Ich denke auch, dass das besser ist. Große Strom Anforderungen habe ich ja nicht, deshalb denke ich auch, dass es in Reihe besser als Parallel ist.

Franz
Bernhard - Fony
Beiträge: 73
Registriert: Mo 12. Jun 2023, 17:49
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Bernhard - Fony »

Das stimmt, mich hat gewundert die 24V Spannung, den es gibt komische Paneele welsche kann man so umklemmen.
Du hast die jetzt auf 36V / 42V (mit Last, ohne Last) geschaltet. Die meisten PV Module haben 18, 36, 72V (21, 42, 84V) mit höhere Spannung habe noch nicht gesehen
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Admin »

Ja, natürlich 18 Volt pro Panel, also auf 36 Volt umgeklemmt :(o): :(o):
Die werden nur als Panels für 12 Volt angeboten. Also um 12 Volt Akkus laden zu können. Aber ist natürlich verwirrend, wenn man die Echte Spannung kennt.

Ich muss dann noch das Thema, Messwerten aus dem MPPT Solarlader holen und auswerten, testen und fertig machen. Aber ich bin noch 1-2 Tage an der Pool-Heizung. Heute bin ich mit meinem Programm schon absolut zufrieden. Jetzt läuft seit 2 Std. ein Mitschnitt, der alle 5 Min. PumpenDrehzahl, Poolwasser-Temperatur, Solarwasser-Temperatur, Temp-Differenz, zum PC ausgibt. Dass ich sehe ob alles so läuft wie ich das will. Bis jetzt bin ich zufrieden. Ich habe das Gestern Abend nochmal überarbeitet, weil ich inzwischen immer wieder, an verschiedenen Stellen, Anpassungen gemacht habe. Da verliert man leicht mal den Überblick, wo, was, wie, eingreift. Jetzt habe ich daraus wieder einen stimmige Kontrolle gemacht.
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Admin »

Morgen werde ich mal noch bischen was an meinem Programm ändern und dann mal eine aktuelle Variante hier ist Forum kopieren. Ist sicher noch nicht die Endfassung, aber es läuft schon recht gut. Kann es auch schon Tag und Nacht alleine laufen lassen, ist schon zuverlässig. Ein paar Anpassungen wird es aber noch geben. Und die kommende Woche bin ich dann damit beschäftigt, den MPPT Solarlader seine Daten zu entlocken :(o): :(o): und das dann auch noch ins Programm einzubinden. Ja, dann denke ich es komplett.

Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Poolwasser mit der Sonne aufheizen.

Beitrag von Admin »

So, jetzt bin ich fürs erste zufrieden, mit dem was das Programm tut. Ich habe auch mal kontrolliert, wieviel Wasser diese kleine Pumpe in der Stunde übers Dach schickt. Es sind etwa 1000 Ltr. je Std. Die in den Daten der Pumpe angegebenen 1750 Liter sind wohl wenn das Wasser nicht ein paar Meter hochgepumpt werden muss. Ich muss ja von der Pumpe aus 4 - 5 Meter steigen.

Temperatur- und Poti-Werte werden jede Sekunde neu ausgelesen und auch aufs Display übertragen. Der Pumpe werden die Werte nur alle 5 Min. bereitgestellt.

Das Display wird beim Start eingeschalten und geht nach 15 Min aus. Mit dem Taster kann man das Display wieder für 15 Min. einschalten.

Die Pumpe ändert ihr Werte nur alle 5 Minuten, dass sie nicht dauernd ein/aus/ein/aus geschalten wird. Weil ein Wert gerade an der Kippe ist. Man hat da ja keine Eile.

Es gibt also 4 Programmteile mit verschiedenen Zeiten:
Das erste ist die Kontrolle über die Displaybeleuchtung und den Taster zum wieder einschalten, der Beleuchtung.
Das Zweite ist Daten von den 2 Sensoren und von den 2 Potis auslesen, auswerten und am Display darstellen.
Das Dritte ist die Daten für die Pumpeaufbereiten und die Pumpe entsprechend steuern.
Das Vierte ist der Teil, indem die Kontrolldaten alle 15 Minuten zum PC übertragen werden. Diese Serial-print() kann man, wenn sie nicht mehr gebraucht werden auskommentieren. Ich lassen sie dann auskommentiert im Programm, dass ich dann, wenn es irgend welchen Stress mit dem Programm gibt, doch nochmal drüberschauen kann. Auskommentiert sind sie ja auch nur Text, und wenn man sie nochmal braucht, nimmt man eben in den 9 Zeilen die // weg.

Nach meinen Kontrollen macht das Programm jetzt recht sicher das, was es soll. Heute und Morgen Schneide ich die Daten noch alle 5 Min. am PC mit. Und hier ist jetzt mal das vorläufige Programm für diese Solar-Heizung:

Code: Alles auswählen

// Arduino Pool_Solarheizung_Pumpensteuerung
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
//-----Motortreiber----
const byte RPWM = 10;
const byte LPWM = 11;
//-------Potis---------
const byte Poti1 = A0;
const byte Poti2 = A1;
//-------Taster--------
byte Tasterstatur = 0;
const byte Taster = 4;// Display einschalten
//-------Merker--------
byte Pumpe = 0;
int P1 = 0;
int P2 = 0;
int Drehzahl = 0;
int Solldrehzahl = 0;
int Sollalt = 10;
byte Anfahren = 0;
int Drehzahlmin = 150;
int Drehzahlmax = 255;
unsigned long millisekunden = 0;
//-------------------------------Zeiten---------------------------------------
unsigned long Sekundenablauf01 = 0;      // Messung Potis und Ausgabe Display
const unsigned long Pausezeit01 = 1000;
unsigned long Sekundenablauf02 = 0;      // Display nach Zeit ausschalten
const unsigned long Pausezeit02 = 60000 * 15;
unsigned long Sekundenablauf03 = 0;      //Serial Werte Ausgabezeit
const unsigned long Pausezeit03 = 60000 * 5;
unsigned long Sekundenablauf04 = 0;      // Werte für Pumpe und Pumpe ansteuern
const unsigned long Pausezeit04 = 30000; //Alle 30 Sekunden Daten für Pumpe
const unsigned char One_Wire_Bus = 2;    // Sensoren auf Pin 2
OneWire oneWire(One_Wire_Bus);
DallasTemperature sensoren (&oneWire);
int Anzahl_Sensoren = 0;
int is = 0; // Zähler für die Sensoren
int ia = 0; // Zähler für die Adressstellen 0-7
int Sensor = 0;
float temppool = 0;
float tempsolar = 0;
float tempdif = 0;
DeviceAddress tempDeviceAddress; // Für die Adressausgabe
int numberOfDevices; // Für die Adressausgabe
//##########################################################################
//################################  Setup ##################################
//##########################################################################
void setup() {
  Wire.begin();
  sensoren.begin();
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.setCursor (0, 0);
  lcd.print (F("Solarheizung - Pool"));
  lcd.setCursor (0, 1);
  lcd.print (F("Soll"));
  lcd.setCursor (10, 1);
  lcd.print (F("Ist"));
  lcd.setCursor (0, 2);
  lcd.print (F("Soll"));
  lcd.setCursor (10, 2);
  lcd.print (F("Ist"));
  lcd.setCursor (0, 3);
  lcd.print (F("Soll      Ist"));
  // Anzahl der Sesoren ermitteln-------------------------------------
  Anzahl_Sensoren = sensoren.getDeviceCount();
  // Ermitteln der Sensor-Adressen------------------------------------
  for (is = 0; is < Anzahl_Sensoren; is++)
  {
    if (sensoren.getAddress(tempDeviceAddress, is))
    {
      Serial.println ();
      printAddress(tempDeviceAddress);
    }
  }
  //-----------Aus-/Eingänge einrichten-------------------------------------
  pinMode(RPWM, OUTPUT);              // PWM Pumpensteuerung
  pinMode(LPWM, OUTPUT);              // PWM Pumpensteuerung
  pinMode(Poti1, INPUT);
  pinMode(Poti2, INPUT);
  pinMode(Taster, INPUT_PULLUP);
}
// Ausgabe der Sensor-Adressen
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t ia = 0; ia < 8; ia++)
  {
    if (deviceAddress[ia] < 16)
    {
      Serial.print("0"); //ist die Hex Adresse kleiner 16 dann erste Stelle eine "0"
    }
    Serial.print(deviceAddress[ia], HEX);
  }
  Serial.println();
}
//###########################################################################
//################################## LOOP ###################################
//###########################################################################
void loop()
{
  millisekunden = millis();
  //--------------------------Display Lichtkontrolle -------------------------
  Tasterstatur = digitalRead(Taster);
  if (Tasterstatur == LOW)
  {
    lcd.backlight();
    Sekundenablauf02 = millisekunden;
  }
  if (millisekunden - Sekundenablauf02 >= Pausezeit02) // Dislay Zeit abgelaufen?
  {
    lcd.noBacklight();
  }
  //--------------------------Display Licht kontrolle Ende-------------------
  //#########################################################################
  //-------------------------Daten auswerten und aufs Display----------------
  if (millisekunden - Sekundenablauf01 >= Pausezeit01) // Eine Sekunde abgelaufen?
  {
    P1 = analogRead (Poti1);
    P1 = map(P1, 0, 1023, 0, 40); // -------Solltemperatur Einstellung-------
    P2 = analogRead (Poti2);
    P2 = map(P2, 0, 1023, 0, 10); // -------Solldiffderenz Einstellung-------
    lcd.setCursor (5, 1);
    lcd.print (P1);
    lcd.print ("  ");
    lcd.setCursor (5, 2);
    lcd.print (P2);
    lcd.print ("  ");
    lcd.setCursor (5, 3);
    lcd.print (Solldrehzahl);
    lcd.print (F("  "));
    lcd.setCursor (14, 3);
    lcd.print (Drehzahl);
    lcd.print (F("  "));
    Sekundenablauf01 = millisekunden;
    // -------------------------Temperatur Sensoren Auswerten---------------------------
    //Temperaturen Aulesen
    sensoren.requestTemperatures();

    // Hier werden die Temp-Sensoren ausgelesen und aufs Display gebracht
    if (Sensor < 2)
    {
      Sensor ++;
      float temperatur = sensoren.getTempCByIndex(Sensor - 1);
      if (Sensor == 1)
      {
        tempsolar = temperatur + 1; // -----------Temperatur Messung 1------------------
      }
      if (Sensor == 2)
      {
        temppool = temperatur - 1; // -----------Temperatur Messung 2------------------
        //--------------------------------------Temperatur aufs Display----------------
        lcd.setCursor (14, 1);
        lcd.print (temppool);
        lcd.print (F(" "));
        tempdif = (tempsolar * 10) - (temppool * 10); //---Themperatur Differenz----
        if (tempdif < 0)
        {
          tempdif = 5;
        }
        lcd.setCursor (14, 2);
        lcd.print (tempdif / 10);
        lcd.print (F(" "));
      }
    }
    // ---Alle Sensoren ausgelesen? Dann für nächste Messungen auf Null Stellen---
    if (Sensor == Anzahl_Sensoren)
    {
      Sensor = 0;
    }
  }
  //-------------------------Daten auslesen und Aufs Diplay Ende------------------
  //##############################################################################
  // ------Daten für Pumpensteuerung auswerten und an Pumpe übergeben-------------

  if (millisekunden - Sekundenablauf04 >= Pausezeit04) // 30 Sekunden abgelaufen?
  {
    // -------Prüfen ob Solartemperatur zum Anlauf der Pumpe sinnvoll ist---------
    if ((tempsolar > 28) && (tempsolar < 33) && (tempdif < 10))
    {
      tempdif = 10;
    }
    if ((tempsolar < 26) && (tempdif < 10))
    {
      tempdif = 0;
    }
    //-------------Solldrehzahl aus Temperaturdifferenz ermitteln--------------
    Solldrehzahl = map(tempdif, 10, 40, 150, 255);
    if (Solldrehzahl > Drehzahlmax)
    {
      Solldrehzahl = Drehzahlmax;
    }
    else
    {
      if (Solldrehzahl < Drehzahlmin)
      {
        Solldrehzahl = Drehzahlmin;
      }
    }
    // Ist gemessene tempdif gleich/größer Solldifferenz, dann Max Drehzahl
    if (tempdif >= (P2 * 10))
    {
      Solldrehzahl = Drehzahlmax;
    }
    //------------------Pumpen Ansteuerung------------------------------------
    // Gibt es keine brauchbare TemperaturDifferenz mehr, dann Pumpe auf PWM 0
    if (Anfahren == 0)
    {
      if (tempdif < 10) //---Temp.Differenz kleiner 1 Grad, dann Pumpe aus----
      {
        Solldrehzahl = 0;
      }
      // Ist aber die Wunsch-Temperatur +2 erreicht, dann keine Solar Unterstützung mehr
      if (temppool > (P1 + 2))
      {
        Solldrehzahl = 0;
      }
      // Ist Solldrehzahl erreicht ? Dann Drehzahl auf die Solldrehzahl einstellen
      if (Solldrehzahl < Sollalt)
      {
        Drehzahl = Solldrehzahl;
        Sollalt = Solldrehzahl;
      }
    }
    // Ist Solldrehzahl nicht erreicht dann Drehzahl um 10 erhöhen
    if ((Solldrehzahl > Sollalt) && (tempdif > 13))
    {
      if (Drehzahl < 120)
      {
        Drehzahl = 130;
      }
      Drehzahl = Drehzahl + 10;
      // Wenn über Max, dann die Drehzahl auf Maxdrehzahl anpassen
      if (Drehzahl > Drehzahlmax)
      {
        Drehzahl = Drehzahlmax;
      }
      Sollalt = Drehzahl;
      Anfahren = 1;
    }
    else
    {
      Anfahren = 0;
    }
    analogWrite(RPWM, Drehzahl);
    analogWrite(LPWM, 0);
    Sekundenablauf04 = millisekunden;
  }
  //------------------------Pumpensteuerung Ende-------------------------------
  //###########################################################################
  // ------------------------Serial Print Ausgabe------------------------------
  if (millisekunden - Sekundenablauf03 >= Pausezeit03) // Serial Ausgabezeit abgelaufen?
  {
    Serial.println("--------------------");
    Serial.print("Drehzahl Pumpe = ");
    Serial.print(Drehzahl);
    Serial.print(" - ");
    Serial.println(Solldrehzahl);
    Serial.print("Temp Pool = ");
    Serial.println(temppool);
    Serial.print("Temp Solar = ");
    Serial.println(tempsolar);
    Serial.print("Temp Differenz = ");
    Serial.println(tempsolar - temppool);
    Sekundenablauf03 = millisekunden;
  }
  //-------------------------Seriale Ausgabe Ende-----------------------------
}
Am Schaltplan hat sich nichts mehr geändert. Die Solar-Panels habe ich doch wieder in Reihe geschalten, weil es da auch bei rel. wenig Sonne noch gute Stromwerte gibt. Mir war wichtiger, genug Leistung bei gedämpfter Sonne zu bekommen, also große Leistung bei viel Sonne. Meine Pumpe braucht maximal 3,2 Ampere, das bekomme ich locker auch Serial aus den Panels. Und bei weniger Sonne klappts auch noch recht gut. Der MPPT Regler ist da schon nicht unwichtig. Gerade bei weniger Sonnenleistung. Ja, ich werde morgen mal versuchen, mit dem Arduino Batterie-Daten aus dem MPPT Regler zu bekommen. Erst mal mit nem extra Arduino, und wenn das klappt, dann möchte ich das noch in meine Solar-Heizungs-Steuerung integrieren. Dann weiß meine Steuerung auch, was sie der Batterie noch zutrauen kann, wann besser die Anforderungen der Pumpe etwas gedrosselt werden sollten. Also vorrausschauend, bevor die Batterie aus dem letzten Loch pfeift. :(o): :(o):
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 29 Gäste