Hallo zusammen,
ich könnte etwas Hilfe bei meinem ersten Arduino Projekt gebrauchen.
Ich möchte meine Solarzirkulationspumpe, welche mit vier Geschwindigkeiten laufen kann, gerne abhängig von der Vorlauftemperatur der Solaranlage über vier Relais ansteuern.
Soll heißen, wenn die Vorlauftemperatur nach zwei Minuten bei Pumpenstufe 2 immer noch über 64°C beträgt soll auf Stufe 3 geschalten werden, wenn Vorlauftemperatur nach 2 Minuten unter 58°C fällt auf Stufe 1 usw.
Mein Sketch funktioniert schon mal nicht schlecht aber ich würde gerne die "delay´s", die gebraucht werden um die Wassertemperatur im Solarvorlauf zeitverzögert abzunehmen, mit der "millis" Funktion ersetzen.
Ich check aber die Sache mit den "millis" nicht.
Oder gibt es noch ne andere Zeitfunktion mit der das programm nicht komplett angehalten wird?
Hier mein Projekt, vielleicht hat jemand Lust sich das mal anzuschauen.
Danke schon mal.
int TMP36= A0; //Der Sensor am Pin A0 "TMP36"
int sensorwert;
int temperatur = 0; //Unter der Variablen "temperatur" wird später der Temperaturwert abgespeichert.
int t=500; //Der Wert für „t“ gibt im Code die zeitlichen Abstände zwischen den einzelnen Messungen vor.
int rel1 = 2;
int rel2 = 3;
int rel3 = 4;
int rel4 = 5;
int rel1a=digitalRead(rel1);
int rel2a=digitalRead(rel2);
int rel3a=digitalRead(rel3);
int rel4a=digitalRead(rel4);
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(9600); //Im Setup beginnt die serielle Kommunikation, Temperatur an den serial monitor.
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight(); //Hintergrundbeleuchtung einschalten (lcd.noBacklight(); schaltet die Beleuchtung aus).
}
void loop()
{
sensorwert=analogRead(TMP36); //Auslesen des Sensorwertes.
temperatur= map(sensorwert, 0, 409, -50, 150); //Umwandeln des Sensorwertes mit Hilfe des "map" Befehls.
Serial.print(temperatur); //Nun wird der Wert „temperatur“ über die serielle Kommunikation an den PC gesendet.
Serial.println(" Grad Celsius"); // Im seriellen Monitor wird hinter der Temperatur die Einheit eingeblendet.
delay(t); // Nach jeder Messung ist je eine kleine Pause mit der Dauer „t“ in Millisekunden.
lcd.setCursor(0, 0);//Position des ersten Zeichens (0,0) bedeutet das erste Zeichen in der ersten Zeile.
lcd.print("Solartemperatur");
lcd.setCursor(0, 1);
lcd.print(temperatur);
lcd.setCursor(3, 1);
lcd.print("C");
rel1a=digitalRead(rel1);
rel2a=digitalRead(rel2);
rel3a=digitalRead(rel3);
rel4a=digitalRead(rel4);
if (rel1a == 0 && rel2a == 0 && rel3a == 0 && rel4a == 0) //Relais 1 einschalten
{
digitalWrite(rel1, HIGH);
digitalWrite(rel2, LOW);
digitalWrite(rel3, LOW);
digitalWrite(rel4, LOW);
lcd.setCursor(7, 1);
lcd.print("Stufe 1");
}
Serial.println(rel1a);
Serial.println(rel2a);
Serial.println(rel3a);
Serial.println(rel4a);
if (temperatur > 64 && rel1a == 1 && rel2a == 0 && rel3a == 0 && rel4a ==0) //Relais 2 einschalten
do
{
digitalWrite(rel1, LOW);
digitalWrite(rel2, HIGH);
digitalWrite(rel3, LOW);
digitalWrite(rel4, LOW);
sensorwert=analogRead(TMP36);
temperatur=map(sensorwert, 0, 409, -50, 150);
Serial.print(temperatur);
Serial.println(" Grad Celsius");
lcd.setCursor(7, 1);
lcd.print("Stufe 2");
delay(120000);
}
while (temperatur > 58 && temperatur <= 65 && rel1a == 0 && rel2a == 1 && rel3a == 0 && rel4a == 0);
//delay(5000);
if (temperatur <= 58 && rel1a == 0 && rel2a == 1 && rel4a == 0 && rel4a == 0) //Relais 2 ausschalten
{
digitalWrite(rel1, HIGH);
digitalWrite(rel2, LOW);
digitalWrite(rel3, LOW);
digitalWrite(rel4, LOW);
lcd.setCursor(7, 1);
lcd.print("Stufe 1");
}
if (temperatur > 64 && rel1a == 0 && rel2a == 1 && rel3a == 0 && rel4a == 0) //Relais 3 einschalten
do
{
digitalWrite(rel1, LOW);
digitalWrite(rel2, LOW);
digitalWrite(rel3, HIGH);
digitalWrite(rel4, LOW);
sensorwert=analogRead(TMP36);
temperatur=map(sensorwert, 0, 409, -50, 150);
Serial.print(temperatur);
Serial.println(" Grad Celsius");
lcd.setCursor(7, 1);
lcd.print("Stufe 3");
delay(120000);
}
while (temperatur > 58 && temperatur <= 65 && rel1a == 0 && rel2a == 0 && rel3a == 1 && rel4a == 0);
//delay(5000);
if (temperatur <= 58 && rel1a == 0 && rel2a == 0 && rel3a == 1 && rel4a == 0) //Relais 3 ausschalten
{
digitalWrite(rel1, LOW);
digitalWrite(rel2, HIGH);
digitalWrite(rel3, LOW);
digitalWrite(rel4, LOW);
lcd.setCursor(7, 1);
lcd.print("Stufe 2");
}
if (temperatur > 64 && rel1a == 0 && rel2a == 0 && rel3a == 1 && rel4a == 0) //Relais 4 einschalten
do
{
digitalWrite(rel1, LOW);
digitalWrite(rel2, LOW);
digitalWrite(rel3, LOW);
digitalWrite(rel4, HIGH);
sensorwert=analogRead(TMP36);
temperatur=map(sensorwert, 0, 409, -50, 150 );
Serial.print(temperatur);
Serial.println(" Grad Celsius");
lcd.setCursor(7, 1);
lcd.print("Stufe 4");
delay(120000);
}
while (temperatur > 58 && rel1a == 0 && rel2a == 0 && rel3a == 0 == rel4a == 1);
//delay(5000);
if (temperatur <= 58 && rel1a == 0 && rel2a == 0 && rel3a == 0 && rel4a == 1) //Relais 4 ausschalten
{
digitalWrite(rel1, LOW);
digitalWrite(rel2, LOW);
digitalWrite(rel3, HIGH);
digitalWrite(rel4, LOW);
lcd.setCursor(7, 1);
lcd.print("Stufe 3");
}
Serial.print(temperatur);
Serial.println(" Grad Celsius");
}
Das Serial print kommt dann irgendwann mal raus.