Damit es etwas anschaulicher wird
Beim Mischer sieht man Vorlauf und Rücklauf des Pufferspeicher und
Vor und Rücklauf zu den Heizkörpern.
Das würde bedeuten, das du einen Kreislauf bildest mit dem Kessel und Pufferspeicher und einen Kreislauf zu den Heizkörpern.
Im Kreislauf zu den Heizkörpern hängt auch die Terme drin und steuert die Heizungspumpe an.
Der Mischer muss gesondert angesteuert werden. zusätzlich braucht du einen vom Mischer unabhängigen Kreislauf Kessel Pufferspeicher.
Nur warum hast du einen 800L Pufferspeicher ? Ist der nicht etwas groß ? außer du hast noch Solarkollektoren wie ich, die heizen dir an einem sonnigen Tag wie Heute den Pufferspeicher auf 70 Grad auf
Andi
Nur so als Beispiel, da wird sich jeder der Programmieren kann, mit schaudern abwenden, aber dieses Provisorium funktioniert jetzt schon fast ein Jahr .
// DS18B20 1-Wire digital temperature sensor with Arduino
// Include the required Arduino libraries:
#include <OneWire.h>
#include <DallasTemperature.h>
// Aussentemperatur geführter Mischerkreis
// - 20 bis +20 Grad Celsius
// Vorlauf = (-1)* Aussen + 20 -- in Celsius
#define ONE_WIRE_BUS 2
byte Pumpe = 12;
byte Mischer_auf = 11;
byte Mischer_zu = 10;
float Aussen;
float Vorlauf;
float Vorlauf_Soll;
float Kenlinie_Verschieben = 1.00; // kleiner ist Wärmer
// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);
// Pass the oneWire reference to DallasTemperature library:
DallasTemperature sensors(&oneWire);
void setup() {
// Setzen Pumpenausgang
pinMode(Pumpe, OUTPUT);
// Setzen Mischer
pinMode(Mischer_auf, OUTPUT); digitalWrite(Mischer_auf, LOW);
pinMode(Mischer_zu, OUTPUT); digitalWrite(Mischer_zu, LOW);
// Begin serial communication at a baud rate of 9600:
Serial.begin(9600);
// Start up the library:
sensors.begin();
}
void loop() {
// Send the command for all devices on the bus to perform a temperature conversion:
sensors.requestTemperatures();
// Fetch the temperature in degrees Celsius for device index:
Aussen = sensors.getTempCByIndex(0); // the index 0 refers to the first device
Vorlauf = sensors.getTempCByIndex(1); // the index 0 refers to the first device
//Ermittlung der Solltemperatur Des Vorlauf
Vorlauf_Soll = (Aussen * (-1.00) + 20.00) ;
if (Aussen >= 0.00 && Aussen < 18.00) { Vorlauf_Soll = 35 - (Aussen * Kenlinie_Verschieben); };
if (Aussen >= 16.00) { Vorlauf_Soll = 0.00; digitalWrite(Mischer_auf, LOW); digitalWrite(Mischer_zu, LOW);} ;
// Umwälzpumpe Ansteuern
if (Vorlauf_Soll > 0.00)
{
digitalWrite(Pumpe, HIGH); // Umwälzpumpe einschalten
// Ansteuerung Mischer
if ((Vorlauf_Soll - Vorlauf) > 0.50) { M_auf(); }; // Mischer_auf = Pin 10
if ((Vorlauf - Vorlauf_Soll) > 0.50) { M_zu(); }; // Mischer_zu = Pin 11
}
else
{ // Umwälzpumpe und Mischer ausschalten
digitalWrite(Pumpe, LOW);
digitalWrite(Mischer_auf, LOW);
digitalWrite(Mischer_zu, LOW);
};
// Anzeige im seriellen Monitor
// Serial.print(tempC);
Serial.print("Aussen: ");
Serial.print(" \xC2\xB0"); // shows degree symbol
Serial.print(Aussen);
Serial.print(" \xC2\xB0"); // shows degree symbol
Serial.print("Vorlauf: ");
Serial.print(Vorlauf);
Serial.print(" \xC2\xB0"); // shows degree symbol
Serial.print("Vorlauf_Soll: ");
Serial.print(Vorlauf_Soll);
Serial.print(" \xC2\xB0"); // shows degree symbol
Serial.println();
// Wait
// delay(1000);
}
void M_auf() {
// Mischer_auf = Pin 10; Mischer_zu = Pin 11;
digitalWrite(Mischer_auf, HIGH);
digitalWrite(Mischer_zu, LOW);
Serial.print("| Mischer A: " );
Serial.print(digitalRead(Mischer_auf));
Serial.print("| Mischer Z: " );
Serial.print(digitalRead(Mischer_zu));
Serial.println();
delay(1000); // milli Sekunden -- Bewegen des Mischers
digitalWrite(Mischer_auf, LOW);
// Serial.print("| Mischer A: " );
// Serial.print(digitalRead(Mischer_auf));
// Serial.print("| Mischer Z: " );
// Serial.print(digitalRead(Mischer_zu));
// Serial.println();
// warten auf die Wirkung
delay(20000); // 30 Sekunden
return;
}
void M_zu() {
// Mischer_auf = Pin 10; Mischer_zu = Pin 11;
digitalWrite(Mischer_auf, LOW);
// Ansteuerung Mischer als Funktion der Temperaturdifferenz "Vorlauf" und "Vorlauf_Soll"
float diff = (Vorlauf - Vorlauf_Soll) + 0.50;
byte x = (byte)(diff);
// if (x > 5) { x = 5; };
for (byte z = 0; z < x; z++ )
{
digitalWrite(Mischer_zu, HIGH);
Serial.print("| z: " );
Serial.print(z);
Serial.print("| Mischer A: " );
Serial.print(digitalRead(Mischer_auf));
Serial.print("| Mischer Z: " );
Serial.print(digitalRead(Mischer_zu));
Serial.println();
delay(800); // milli Sekunden -- Bewegen des Mischers
digitalWrite(Mischer_zu, LOW);
delay(400); // milli Sekunden -- Pause
}
delay(20000); // 20 Sekunden
return;
}