Hi
jetzt komme ich endlich an den Sketch.
/*
Differenztemperatursteuerung Sonnenkolektor mit 1XPT100 im Kollektor
1XDS18B20 im Speicher 1
1XDS18B20 im Speicher 2
*/
// Laden der Libary:
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// initialisieren der LCD Pins ( Für das Orginal Arduino-Pad )
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define ONE_WIRE_BUS A3
///char buffer[20] = ""; // Speicherbereich für Datenkonvertierung
OneWire oneWire(ONE_WIRE_BUS); // Library für Datenleitung des Tempatursensors Dallas DS18xx
DallasTemperature sensors(&oneWire);
//die Variablen deklarieren
float tempK;
float tempS1;
float tempS2;
int tempPin1 = 1;
int Pumpe1 = 13;
int Pumpe2 = 12;
int SpeichertempPin1 = A3; //Temperatur SpeichertempPin1 wird an Analogpin3 angeschlossen
int DifferenztemperaturS1 = 0; //Hier nichts eingeben
int DifferenztemperaturS2 = 0; //Hier nichts eingeben
int Schalttemperatur = 14; //Hier die Schalttemperatur der Differenz Kolektor -> Speicher, bei der die Pumpe gestartet wird, eingeben
int SpeicherTempAusStufe1 = 50; //Hier schaltet die Ladund auf den anderen Speicher um
int SpeicherTempladebereit = 70;//Hier schaltet die Ladepumpe wieder ein
int SpeicherTempAusVoll = 75; //Hier schaltet die Ladung entgültig aus
int SpeicheTempVollwiederBereit =31; //Hier ist der Speiche wieder bereit für die Ladung Stufe 1
int SpeicherTempMax = 85; //Hier die Maxtemperatur des Speichers, bei der die Pumpe ausgeschaltet wird und eine Fehlermeldung ausgegebeb wird ( muss quittiert werden ) eingeben
int KolektorTempMax = 130; //Hier die Maxtemperatur des Kolektors, bei der die Pumpe ausgeschaltet wird und eine Fehlermeldung ausgegebeb wird ( muss quittiert werden ) eingeben
int KolektorTempMaxHysterese = 2; //Hier die Hysterese der Ausschaltemperatur des Kolektors, bei der die Pumpe wieder eingeschaltet wird, eingeben
int SpeicherTempUnplausibel = 8; //Unter 8°C ist Meßwert im Speicher unplausibel
int FehlereldungSpeicher1MaxVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
int FehlereldungSpeicher2MaxVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
int FehlereldungSpeicher1UnplausibelVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
int FehlereldungSpeicher2UnplausibelVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
// Datendraht an Pin A3
#define ONE_WIRE_BUS A3
DeviceAddress SensorS1 = { 0x28, 0xB2, 0x4B, 0xA1, 0x03, 0x00, 0x00, 0x2C };
DeviceAddress SensorS2 = { 0x28, 0xF2, 0x75, 0xA1, 0x03, 0x00, 0x00, 0x7F };
[font=Verdana]hier oben sind die Zwei Sensoren die an einem Eingang hängen sie werden durch die Adresse identifiziert . Es müßte doch möglich sein über diese Adressen azufragen ob die Sensoren vorhanden sind[/font]
void setup(){
byte addr[8];
Serial.begin(9600);
sensors.begin();
sensors.setResolution(SensorS1, 10);
sensors.setResolution(SensorS2, 10);
pinMode (Pumpe1, OUTPUT);
pinMode (Pumpe2, OUTPUT);
}
void loop(){
//Start Abfrage DS18B20
sensors.requestTemperatures();
//Temperaturen DS18B20 in Variable ablegen
float tempS1 = sensors.getTempC(SensorS1); //zwischenspeichern in Variable tempZ1
float tempS2 = sensors.getTempC(SensorS2); //zwischenspeichern in Variable tempZ2
sensors.requestTemperatures();
lcd.begin(20, 4);//LCD hat 20 Zeichen und 4 Spalten
// das Ergebnis ans Display senden
if(DifferenztemperaturS1 > ( Schalttemperatur + 2 ) && tempS1 < SpeicherTempladebereit && tempK < KolektorTempMax - KolektorTempMaxHysterese) // Pumpe einschalten für Stufe1
digitalWrite(Pumpe1, HIGH); // Pumpe wird eingeschaltet Pin 13
if(DifferenztemperaturS1 > ( Schalttemperatur + 2 ) && tempS1 < SpeicheTempVollwiederBereit && tempK < KolektorTempMax - KolektorTempMaxHysterese) // Pumpe einschalten für Stufe1
digitalWrite(Pumpe1, HIGH); // Pumpe wird eingeschaltet Pin 13
if(DifferenztemperaturS1 < ( Schalttemperatur - 2 ) || FehlereldungSpeicher1MaxVariable == 1 || tempK > KolektorTempMax || tempS1 < SpeicherTempUnplausibel || tempS1 > SpeicherTempAusStufe1) // Pumpe abschalten
digitalWrite(Pumpe1, LOW); // Pumpe wird ausgeschaltet Pin 13
if(DifferenztemperaturS1 < ( Schalttemperatur - 2 ) || FehlereldungSpeicher1MaxVariable == 1 || tempK > KolektorTempMax || tempS1 < SpeicherTempUnplausibel || tempS1 > SpeicherTempAusVoll) // Pumpe abschalten
digitalWrite(Pumpe1, LOW); // Pumpe wird ausgeschaltet Pin 13
//Betriebsmeldung in Zeile 4
lcd.setCursor(13, 1);
if(tempS1 < SpeicherTempMax & FehlereldungSpeicher1MaxVariable == 0){ //wenn diese zwei Störungsmeldungen nicht anstehen werden die Betriebsmeldungen geschrieben
lcd.setCursor (3,2);
lcd.print(digitalRead(Pumpe1) == HIGH? "laden":"warten"); // Anzeige Beladen oder Standby
lcd.setCursor (0, 2);
lcd.write ("S1-");}
if (tempS1 > SpeicherTempAusStufe1){ //Die Betriebsmeldung Speicher Stufe1 wird geschrieben
lcd.write("Stufe1 ");}
(DifferenztemperaturS1 = tempK - tempS1);
(DifferenztemperaturS2 = tempK - tempS2);
lcd.setCursor(0, 3);
lcd.print("Diff=") ;
if (DifferenztemperaturS1 > 0){ // Der Differenztemperaturwert wird nur geschrieben wenn er positiv ist
lcd.setCursor(5, 3);
lcd.print(DifferenztemperaturS1,1); // Die Differenztemperatur wird geschrieben
lcd.print("K ");}
else
lcd.setCursor(6, 3);
lcd.print("<0"); //Wenn die Differenztemperatur negativ ist wird dies geschrieben
// Anzeige der Speichertemperatur und der Speicher1 Fehlermeldungen
lcd.setCursor(0, 1);
lcd.print("S1=");
lcd.setCursor(3, 1);
lcd.print(tempS1,1);// Ausgabe des Variablen S1 Inhalt, die 1 sind die Anzahl der Stellen nach Komma
lcd.write(0xD0 + 15); // das ° Zeichen wird geschrieben
lcd.write("C");
if(tempS2 < SpeicherTempMax & FehlereldungSpeicher1MaxVariable == 0){ //wenn diese zwei Störungsmeldungen nicht anstehen werden die Betriebsmeldungen geschrieben
lcd.setCursor (11,2);
lcd.write ("S2-");
lcd.print(digitalRead(Pumpe2) == HIGH? "laden":"warten"); // Anzeige Beladen oder Standby
}
lcd.setCursor(0, 2);
lcd.write("S1-");
if (tempS1 > SpeicherTempAusStufe1){ //Die Betriebsmeldung Speicher Stufe1 wird geschrieben
lcd.write("Stufe1");}
if (tempS1 > SpeicherTempAusVoll){ //Die Betriebsmeldung Speicher Voll wird geschrieben
lcd.write("Voll ");}
if(tempS1 > SpeicherTempMax)( // Die Fehlermeldung UebtmpSp wird geschrieben
FehlereldungSpeicher1MaxVariable = 1);
if (FehlereldungSpeicher1MaxVariable == 1){
lcd.setCursor(0, 3);
lcd.write("UebertempSp1");}
lcd.setCursor(11, 3);
lcd.print("Diff=") ;
if (DifferenztemperaturS2 > 0){ // Der Differenztemperaturwert wird nur geschrieben wenn er positiv ist
lcd.setCursor(16, 3);
lcd.print(DifferenztemperaturS2,1); // Die Differenztemperatur wird geschrieben
lcd.print("K");}
else
lcd.setCursor(17, 3);
lcd.print("<0"); //Wenn die Differenztemperatur negativ ist wird dies geschrieben
// Anzeige der Speichertemperatur und der Speicher2 Fehlermeldungen
lcd.setCursor(11, 1);
lcd.print("S2=");
lcd.setCursor(14, 1);
lcd.print(tempS2,1);// Ausgabe des Variablen S2 Inhalt, die 1 sind die Anzahl der Stellen nach Komma
lcd.write(0xD0 + 15); // das ° Zeichen wird geschrieben
lcd.write("C");
// Stufe1 Speicher1 wird bis zu 35°C geladen
if(DifferenztemperaturS2 > ( Schalttemperatur + 3 ) && tempS2 < SpeicherTempladebereit && tempK < KolektorTempMax - KolektorTempMaxHysterese && digitalRead(Pumpe1) == LOW && tempS2 < 35 ) // Pumpe einschalten
digitalWrite(Pumpe2, HIGH); // Pumpe2 wird eingeschaltet füe Stufe1Pin 12
if(DifferenztemperaturS2 < ( Schalttemperatur -2 ) || FehlereldungSpeicher2MaxVariable == 1 || tempK > KolektorTempMax || tempS2 < SpeicherTempUnplausibel || tempS2 > SpeicherTempMax || tempS2 > SpeicherTempAusStufe1 || digitalRead(Pumpe1) == HIGH || tempS2 > 30 ) // Pumpe abschalten
digitalWrite(Pumpe2, LOW); // Pumpe2 wird ausgeschaltet für Stufe1 Pin 12
if(DifferenztemperaturS2 > ( Schalttemperatur + 3 ) && tempS2 < SpeicherTempladebereit && tempK < KolektorTempMax - KolektorTempMaxHysterese && digitalRead(Pumpe1) == LOW && tempS1 > SpeicherTempladebereit ) // Pumpe einschalten
digitalWrite(Pumpe2, HIGH); // Pumpe2 wird eingeschaltet füe Stufe1Pin 12
if(DifferenztemperaturS2 < ( Schalttemperatur -2 ) || FehlereldungSpeicher2MaxVariable == 1 || tempK > KolektorTempMax || tempS2 < SpeicherTempUnplausibel || tempS2 > SpeicherTempMax || tempS2 > SpeicherTempAusStufe1 || digitalRead(Pumpe1) == HIGH ) // Pumpe abschalten
digitalWrite(Pumpe2, LOW); // Pumpe2 wird ausgeschaltet für Stufe1 Pin 12
ich habe den letzten Teil des Sketches weggelassen da er sonst zu groß ist.
Er ist auch ziemlich unübersichtlich aber ich bin gerade am überarbeiten.