Ist ja nicht so, dass ich völlig im dunkeln Tappe.
Das Ding lief ja schonmal (gut, hab es da über die Heizungstemp und entsprechenden Offset geregelt).
Ist mein Säurebad, welches ich nun neu aufbaue, da das alte das zeitliche gesegnet hat.
Die Platine hab ich neu aufgebaut und schon fertig. Vorher hatte ich das zusammengefrickelt und mit einem Nano am laufen.
Sicherlich interessant das über ein PID zu machen. Kenne Regler zu genüge (War mal in der Reglerentwicklung für Dampfgarer bei Miele tätig)
Lege da aber (zurzeit) nicht so großen wert drauf. Ist wie gesagt nur um Platinen zu ätzen und läuft nicht 24/7 Betrieb und dient nicht als Destille o.ä.
Wenn ich das Teil erst mal am Laufen hab, dass ich endlich wieder Boards machen kann, sieht das alles anders aus.
Anbei der (fast) fertige Code.
Habe da nun noch eine Laufzeit drinnen, bei der ich nicht weiß, ob es so klappt, wie ich es vorhabe.
Funktion Soll: Bei Tastendruck startet eine Laufzeit (einstellbar über Poti), während der Die Beleuchtung des Behälters sowie eine LED leuchten.
(Später kommt noch eine "Luftpumpe" dazu, welche die Säure mit Sauerstoff anreichert)
//Pin Definition
int Beleuchtung = 7; //output relais Beleuchtung
int Heizung = 8; //output relais Heizung
int LED_Ablauf = 0; //output Ablauf LED
int Taster_Start = 1; //input Start-Taster
int LED_Heizung = 2; //output LED Heizung
//Variablen
int temp1 = 0; //Temperatur im Behälter
int temp2 = 0; //Temperatur Heizung
int Soll_Temp = 0; //Sollwert Temperatur skaliert
int Soll_Zeit = 0; //Zeitvorgabe skaliert
boolean Freigabe_Heizung = 0; //Heizungsfreigabe
boolean Merker_Ablauf = 0; //Zeit läuft
unsigned long Zeit_Tdruck = 0; //Zeitpunkt Taster betätigt
int max_Heizung = 80; //Grenztemperatur für Heizkörper
int hys_h = 2; //Hysterese High
int hys_l = 2; //Hysterese Low
void setup()
{
pinMode(Heizung, OUTPUT);
pinMode(Beleuchtung, OUTPUT);
pinMode(LED_Ablauf, OUTPUT);
pinMode(Taster_Start, INPUT); //Pulldown Hardwaremäßig, HIGH bei betätigtem Taster
pinMode(LED_Heizung, OUTPUT);
digitalWrite(Heizung, LOW);
digitalWrite(Beleuchtung, LOW);
digitalWrite(LED_Heizung, LOW);
}
void loop() {
/*******************************************************************************************************************************************************/
//Berechnung der Temperaturen je Dezimalwert (10-Bit A/D), Faktor hundert, da 10mV SesorSignal = 1°C (LM35 ohne Verstärkung)
temp1 = analogRead(A5) * (5.00/1023) * 100;
temp2 = analogRead(A4) * (5.00/1023) * 100;
//Einlesen und Skalieren der Poti-Werte
Soll_Temp = map(analogRead(A3),0,1023,25,70 ); //Sollwert Auswahl über Potentiometer. Möglich von 25°C bis 70°C
Soll_Zeit = map(analogRead(A2),0,1023,60,1200); //Zeitvorgabe über Potentiometer von 60s bis 1200s [1-20 min]
/*******************************************************************************************************************************************************/
//Ablauf starten bei Tastendruck, Ablaufmerker setzen, Zeit wegspeichern und LED setzen
if(digitalRead(Taster_Start) == HIGH && Merker_Ablauf == LOW)
{
Merker_Ablauf = HIGH;
LED_Ablauf = HIGH;
Beleuchtung = HIGH;
Zeit_Tdruck = millis();
}
//Ablauf beenden, wenn eingestellte Zeit vom Poti überschritten wurde, Ablaufmerker zurücksetzen, LED ausschalten, gespeicherte Zeit löschen
if(millis() >= (Zeit_Tdruck + (Soll_Zeit * 1000)) && Merker_Ablauf == HIGH)
{
Merker_Ablauf = LOW;
LED_Ablauf = LOW;
Beleuchtung = LOW;
Zeit_Tdruck = 0;
}
/*******************************************************************************************************************************************************/
//Heizungsfreigabe erteilen
if(temp2 <= max_Heizung - 5) Freigabe_Heizung = HIGH;
if(temp2 >= max_Heizung + 5) Freigabe_Heizung = LOW;
//Heizungs-Regler Zweipunkt
if (temp1 <= Soll_Temp - hys_l && Freigabe_Heizung == HIGH) //Wenn Temperatur im Bad kleiner gleich Sollwert - Hystere Low und freigabe, schaltet Heizung ein
{
digitalWrite(Heizung, HIGH);
digitalWrite(LED_Heizung, HIGH);
}
else if (temp1 >= Soll_Temp + hys_h || Freigabe_Heizung == LOW) //Wenn Temperatur im Bad größer gleich Sollwert + Hystere High oder keine freigabe, schaltet Heizung aus
{
digitalWrite(Heizung, LOW);
digitalWrite(LED_Heizung, LOW);
}
}