hallo
habe hier einen Temperatur Relais Script, mit welchen ich Probleme hab.
#include <SPI.h>
#include <Ethernet.h> // library for ethernet functions
#include <DallasTemperature.h> // library for temperature sensors
#include <OneWire.h> // library for the onewire bus
OneWire ds(2); // pin für Temperatursensoren
//DeviceAdressen der einzelnen ds1820 Temperatursensoren.
DeviceAddress sensor1 = { 0x28, 0x2D, 0x6D, 0x3C, 0x5, 0x0, 0x0, 0x70 };
DeviceAddress sensor2 = { 0x28, 0xE2, 0x86, 0x3C, 0x5, 0x0, 0x0, 0x61 };
//ETHERNET-SETTINGS
byte mac[] = { 0x88, 0x87, 0x17, 0x87, 0xD6, 0x67 }; // MAC-Adresse des Arduino
byte ip[] = { 192, 168, 178, 28 }; // IP-Adresse des Arduino
//byte gateway[] = { 192, 168, 178, 1 }; // Gateway
//byte subnet[] = { 255, 255, 255, 0 }; // SubNet
byte server[] = { 95, 143, 172, 134 }; // IP-Adresse des Servers
EthernetClient client;
char host[] = "ihrewaesche.de"; // Domain
char url[] = "/ARDUINO/Temperatur/SaveTempToMySQL.php"; // Pfad zur PHP-Datei
char key[] = "MEINPASSWORT123"; // Kennwort aus PHP-Datei
char c; // Variable für Rückgabe des Servers
long Interval = 60; // Upload-Interval in Minuten
DallasTemperature sensors(&ds);
int numSensors; // Variable zum speichern der Anzahl der Temperatur-Sensoren
float temp1,temp2; // Temperaturwerte der Sensoren
// #define Heizunganforderung 4
#define Kessel_ein 5
#define Ladepumpe_ein 6 //Kesselladepumpe
#define Heizkreis_ein 7
#define Mischer_AUF 8
#define Mischer_ZU 9
#define Umschaltventil_ein 10 //für die rücklaufanhebung Hydraulische weiche
#define WW_Ladepume_ein 11
//-------------------------------------------------------------------------------------
int tempsoll = 20;
int Aussentemp;
int Vorlauftemp;
int Vorlauftemp_soll;
int Puffer;
int Puffertemp=20; //mindest Puffertemperatur oben - Temp drunter --> Kessel an
// int Ladepumpe=30000; //warte Zeit nach "Kessel an" bis zum einschalten der Ladepumpe
int Ladetemp=30; //Temperatur bis wieviel Grad der Puffer vom Kessel geladen werden soll
int hyst = 2; //Hysterse Mischerkreis
unsigned long MischenA;
unsigned long WartenA,WartenB;
void setup()
{
delay(1000);
Serial.begin(9600);
Serial.flush();
delay(200);
Serial.println("Arduino TemperaturLogger");
Serial.println("Ethernet initialisieren...");
Ethernet.begin(mac, ip);
Interval = Interval * 1000 * 60; // Das in Minuten angegebene Interval in Millisekunden umrechnen
delay(1000); // warten, bis Ethernet gestartet
//Sensoren abfragen
sensors.begin();
Serial.println("Temperatur-Sensoren ermitteln...");
numSensors = sensors.getDeviceCount(); // Anzahl der angeschlossenen Sensoren in numSensors speichern
if(numSensors > 0) // Es wurde mindestens 1 Sensor gefunden
{
Serial.print(numSensors);
Serial.println( " Temperatur-Sensoren gefunden.");
sensors.setResolution(sensor1, 10);
sensors.setResolution(sensor2, 10);
}
else // Es wurde kein Sensor gefunden
{
Serial.println("Keine Temperatur-Sensoren gefunden.");
}
}
void loop()
{
MISCHEN();
sensors.requestTemperatures();
temp1 = sensors.getTempC(sensor1);
temp2 = sensors.getTempC(sensor2);
if (temp1 == -127.00) Serial.print("Fehler Sensor1");
else {
Serial.print("Temp1: ");
Serial.println(temp1);
}
if (temp2 == -127.00) Serial.print("Fehler Sensor2");
else {
Serial.print("Temp2: ");
Serial.println(temp1);
}
if (temp1!= -127.00 && temp2!=-127.00) Daten_senden(temp1, temp2); // Temperaturdaten an Server übertragen
delay(700);
byte maxReads = 10; //Seconds
while ((maxReads-- > 0) && client.connected()) // Antwort des Servers lesen
{
delay(1000);
while (client.available())
{
char response = client.read();
Serial.print(response);
}
}
client.stop();
Serial.println("Done.");
client.flush();
delay(Interval);
}
/******************************
*
* Daten an Server schickenn *
*
*******************************/
void Daten_senden(float T1, float T2)
{
if (client.connect(server, 80)) // Verbindung zum Server aufbauen
{
Serial.println("Verbunden, Sende Daten...");
client.print("GET " + String(url));
Serial.println("GET " + String(url));
client.print("?T1=");
Serial.print("?T1=");
client.print(T1);
Serial.println(T1);
client.print("&T2=");
Serial.print("&T2=");
client.print(T2);
Serial.println(T2);
client.print("&key=" + String(key));
Serial.print("&key=" + String(key));
client.println(" HTTP/1.1");
Serial.println(" HTTP/1.1");
client.print("Host: " + String(host));
Serial.print("Host: " + String(host));
client.println();
Serial.println();
client.println("User-Agent: Arduino");
Serial.println("User-Agent: Arduino");
client.println("Connection: close");
Serial.println("Connection: close");
client.println();
Serial.println();
}
else
{
Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
}
}
-----------------------------------------------------
void MISCHEN() {
WartenA = millis(); // Alle 10 Sekunden den "Regelkreis" starten
if (WartenA - WartenB > 10000)
{
// Abfrage aller Temperaturen für den "Regelkreis"
sensors.requestTemperatures();
temp[0] = sensors.getTempCByIndex(0);
temp[1] = sensors.getTempCByIndex(1);
temp[2] = sensors.getTempCByIndex(2);
Vorlauftemp = temp[0];
Puffer = temp[1];
Aussentemp = temp[2];
//Vorlauftemp = sensors.getTempCByIndex(0);
// Puffer = sensors.getTempCByIndex(1);
// Aussentemp = sensors.getTempCByIndex(2);
Serial.print("Puffer:");
Serial.println(Puffer);
Serial.print("Vorlauftemp:");
Serial.println(Vorlauftemp);
Serial.print("Aussentemp:");
Serial.println(Aussentemp);
//----------------------------------------------------------------------------------
// Umwandeln der Aussenfühlertemperatur in Vorlauftemperaturen
Vorlauftemp_soll = (Aussentemp + 273); //Umwandlung der gemessenen Temperatur in Kelvin um positive Werte zu erhalten
Vorlauftemp_soll = map (Vorlauftemp_soll , 303, 263, 10, 45);
Serial.print("Vorlauftemp_soll:");
Serial.println(Vorlauftemp_soll);
//----------------------------------------------------------------------------------
// Entscheiden ob der Kessel gestartet wird oder erstmal der Pufferinhalt "genutzt" wird, Heizkreis bei Mindesttemp einschalten.
if (Puffer <= Ladetemp)
{
digitalWrite(Kessel_ein, HIGH);
digitalWrite(Ladepumpe_ein, HIGH);
(Ladetemp = 29); // Wenn der Kessel anspringen muß, die Puffertemp hoch setzten, damit der Kessel eine gewisse Laufzeit bekommt
Serial.println ("Puffertemp niedrig, Kessel eingeschaltet");
}
else
{
digitalWrite(Kessel_ein, LOW);
digitalWrite(Ladepumpe_ein, LOW);
(Ladetemp = 22); // Muß der Kessel nicht anspringen, kann der Puffer bis zur Mindesttemp leer gefahren werden
Serial.println ("Puffertemp ausreichend, Kessel aus");
}
if (Puffer >= 25) // Heizkreis erst einschalten wenn eine gewisse Mindesttemperatur vorhanden ist
{
digitalWrite (Heizkreis_ein, HIGH);
Serial.println ("Heizkreis Ein");
}
//------> MISCHEN Anfang
if (Vorlauftemp > (Vorlauftemp_soll + hyst)) // Mischer zu - Temperatur runter
{
MischenA = millis();
while (millis() - MischenA < ((Vorlauftemp - Vorlauftemp_soll) * 500)) //Differenztemp *500ms = Ansteuerzeit des Mischers
{
digitalWrite(Mischer_ZU, HIGH);
}
digitalWrite(Mischer_ZU, LOW);
Serial.print("Mischzeit ist ");
Serial.println(((Vorlauftemp - Vorlauftemp_soll) * 500));
Serial.println("Mischer faehrt ZU");
}
if (Vorlauftemp < (Vorlauftemp_soll - hyst)) // Mischer auf - Temperatur erhoehen
{
MischenA = millis();
while (millis() - MischenA < ((Vorlauftemp_soll - Vorlauftemp) * 500))
{
digitalWrite(Mischer_AUF, HIGH);
}
digitalWrite(Mischer_AUF, LOW);
Serial.print("Mischzeit ist ");
Serial.println(((Vorlauftemp_soll - Vorlauftemp) * 500));
Serial.println("Mischer faehrt AUF");
}
WartenB = millis();
} //--------MISCHEN Ende-----------------
} //MISCHER End
Jedes mal wenn Daten übertragen werden, wird die Relaissteuerung unterbrochen.
Wie bekomme ich das hin ohne das nun hin ohne diese Unterbrechung?