Forum: Projekte & Code Temperatur --> Relais aus --> verzögert wieder an


von Fibs2000 (Gast)


Lesenswert?

Hey Ho!

Bin ziemlicher Noob bezüglich Arduino und sketch.
Habe ein Mega2560 welches zwei DS18B20 ausliesst. Bei einer bestimmten 
Temperatur (die von 3W LEDs)schaltet das Relais den Strom für die LEDS 
ab. Funktioniert prima, nur schalten die Relais bei der selben Temp 
wieder ein. Das ist zu kurz zum abkühlen der LEDs / Kühlkörper.
Also Beispiel: Bei >50 Grad Celsius schaltet das Relais die LEDs aus. 
Sobald die Temp unter 50 Grad ist schalten die Relais gleich wieder ein, 
nun dauert es nicht lange bis die LEDs wieder zu warm werden und das 
Relais schaltet. Ich möchte dass sie wenigstens auf Bsp: 40 Grad 
absinken....

Bitte um Hilfe! Habe nix vergleichbares über SUFU gefunden.

Danke

von Fibs2000 (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch fix mein sketch:

Die LEDs bitte nicht verwechseln: Die 3Watt LEDs sind blau und grün. 
deren Temp wird über je eine blaue und rote LED angezeigt...

von Harald W. (wilhelms)


Lesenswert?

Fibs2000 schrieb:

> Habe ein Mega2560 welches zwei DS18B20 ausliesst. Bei einer bestimmten
> Temperatur (die von 3W LEDs)schaltet das Relais den Strom für die LEDS
> ab. Funktioniert prima, nur schalten die Relais bei der selben Temp
> wieder ein.

Bei ener analogen Lösung würde ein Widerstand reichen, um eine
Hysterese einzuführen. :-) In deinem Programm müsste das aber
auch gehen, indem Du unmittelbar nach dem Abschalten des Relais
den Temperaturwert passend veränderst.
Gruss
Harald

von Paul Baumann (Gast)


Lesenswert?

Ich kenne mich mit der Arduino-Sprache nicht aus, aber Du brauchst eine
Hysterese, damit die Temperatur weiter absinken kann.


Ich denke, daß diese Zeile:
>int blueBLED = 27;   // Temperatur fŸr blaue LEDs ok

nur nach unten hin verändert werden muß.

Das Gleiche noch einmal hier:
>int greenBLED = 29;  // Temperatur fŸr grŸne LEDs ok

MfG Paul

von Fibs2000 (Gast)


Lesenswert?

Das sind nur die Ausgänge (27 bis 39) für die "kleinen" LEDs welche mir 
nur anzeigen ob die Temperatur über oder unter bestimmten Punkt ist...

Das Thema Hysterese hatte ich mir schon einmal angesehen... komme da 
aber irgendwie net klar...

von Fibs2000 (Gast)


Lesenswert?

Fibs2000 schrieb:
> Das sind nur die Ausgänge (27 bis 39) für die "kleinen" LEDs
> welche mir
> nur anzeigen ob die Temperatur über oder unter bestimmten Punkt ist...
>
> Das Thema Hysterese hatte ich mir schon einmal angesehen... komme da
> aber irgendwie net klar...

UPS.... meinte Ausgänge 27 bis 30... nicht 39

von Fibs2000 (Gast)


Lesenswert?

Harald Wilhelms schrieb:

>
> Bei ener analogen Lösung würde ein Widerstand reichen, um eine
> Hysterese einzuführen. :-) In deinem Programm müsste das aber
> auch gehen, indem Du unmittelbar nach dem Abschalten des Relais
> den Temperaturwert passend veränderst.
> Gruss
> Harald

Oh, da bin ich nun wirklich zu "dumm" ;-)
---Temperaturwert passend verändern?---

von Max H. (hartl192)


Lesenswert?

Schuche mal nach Zweipunktregler.
Ich würde das ungefähr so Lösen:

if(temeratur>50)
  LED=0;
if(temperatur<40)
  LED=1;

von Paul Baumann (Gast)


Lesenswert?

Fibs schrabte:
>Das sind nur die Ausgänge (27 bis 39) für die "kleinen" LEDs...

Ach so. Ich habe mich noch nicht mit der Arduino-Sache befasst.

Aber dann muß es daran liegen:

if (greentemp >= 31)
Tralala....

if (greentemp >= 10 && greentemp <= 30.9)

Schneuf schnurz...

Wenn ich das richtig erkenne, hast Du eine Hysterese von 0,1 Grad.
(nämlich zwischen 30.9 und 31)
Den Abstand mußt Du größer machen.

MfG Paul

von Fibs2000 (Gast)


Lesenswert?

Ja, habe die Hysterese quasi gar nicht programmiert....

ich versuche es mal und poste...

von Fibs2000 (Gast)


Lesenswert?

Relais soll nun bei über 50 Grad schalten und erst bei 35 Grad 
zurückfallen.
1
// Schalten der Relais bei Übertemperatur
2
3
if (bluetemp <=35)
4
{
5
  digitalWrite(blue, HIGH);  //Relais an, blaue LED haben Strom
6
  digitalWrite(blueRLED, LOW); //Anzeige Hochtemperatur aus
7
  digitalWrite(blueBLED, HIGH); // Anzeige Normaltemperatur an
8
  lcd.setCursor(11,2);
9
  lcd.print("on "); 
10
11
if (bluetemp >= 35,1 && bluetemp <= 50)
12
13
{
14
  // Relais hier rausgenommen
15
  digitalWrite(blueRLED, LOW); // Anzeige Hochtemp aus
16
  digitalWrite(blueBLED, HIGH); //Anzeige Normaltemp an
17
 
18
}
19
20
if (bluetemp >= 50,1)
21
{
22
  digitalWrite(blue, LOW); //Relais aus, blaue LED ohne Strom
23
  digitalWrite(blueRLED, HIGH); // Anzeige Hochtemperatur an
24
  digitalWrite(blueBLED, LOW); // Anzeige Normaltemperatur aus
25
  lcd.setCursor(11,2);
26
  lcd.print("off");
27
}

von S. K. (hauspapa)


Lesenswert?

>bluetemp >= 35,1

int sollten auch in der Arduino Welt ganze Zahlen sein.

viel Erfolg
Hauspapa

von Fibs2000 (Gast)


Lesenswert?

Okay... Aber was macht die Schaltung zwischen den Ganzen Zahlen? da 
Temperatur in 0,25 Grad übertragen wird..

oder folgendermassen?:
1
// Schalten der Relais bei Übertemperatur
2
3
if (bluetemp <35)
4
{
5
  digitalWrite(blue, HIGH);  //Relais an, blaue LED haben Strom
6
  digitalWrite(blueRLED, LOW); //Anzeige Hochtemperatur aus
7
  digitalWrite(blueBLED, HIGH); // Anzeige Normaltemperatur an
8
  lcd.setCursor(11,2);
9
  lcd.print("on "); 
10
11
if (bluetemp >= 35 && bluetemp <= 50)
12
13
{
14
  // Relais hier rausgenommen
15
  digitalWrite(blueRLED, LOW); // Anzeige Hochtemp aus
16
  digitalWrite(blueBLED, HIGH); //Anzeige Normaltemp an
17
 
18
}
19
20
if (bluetemp > 50)
21
{
22
  digitalWrite(blue, LOW); //Relais aus, blaue LED ohne Strom
23
  digitalWrite(blueRLED, HIGH); // Anzeige Hochtemperatur an
24
  digitalWrite(blueBLED, LOW); // Anzeige Normaltemperatur aus
25
  lcd.setCursor(11,2);
26
  lcd.print("off");
27
}

von S. K. (hauspapa)


Lesenswert?

Entschuldige, da war ich zu schnell mit Quelltextlesen fertig.

Deine Temperaturwerte sind float, also Fliesskomma. Deine Kommazahlen 
haben also Ihre Berechtigung.
Nur die LED geschichten sind int.

fröhliches basteln
Hauspapa

von Route_66 (Gast)


Lesenswert?

S. K. schrieb:
> Entschuldige, da war ich zu schnell mit Quelltextlesen fertig.
>
> Deine Temperaturwerte sind float, also Fliesskomma. Deine Kommazahlen
> haben also Ihre Berechtigung.
> Nur die LED geschichten sind int.
>
> fröhliches basteln
> Hauspapa

Hallo!
Auch in der Generation "arduino" sollten float-Werte durch Dezimalpunkt 
und nicht durch Komma gekennzeichnet sein.

von Clorella Vulgaris (Gast)


Lesenswert?

Route 66 schrieb:
>Auch in der Generation "arduino" sollten float-Werte durch Dezimalpunkt
>und nicht durch Komma gekennzeichnet sein.

Es soll auch Sprachen geben, in denen ein Komma ein Komma ist...

von Martin M. (Gast)


Lesenswert?

Und füre eine Temperatur sollte man kein float, sonder Festkomma 
verwenden...

von S. K. (hauspapa)


Lesenswert?

>Bin ziemlicher Noob bezüglich Arduino und sketch.

>Und füre eine Temperatur sollte man kein float, sonder Festkomma
>verwenden...

Beim Wissensstand des TO würde das evtl. bedeuten Temperaturen nur in 
1°C Schritten darstellen zu können. Solange Speicher und Rechenzeit kein 
Problem darstellen ist float für Ihn vermutlich der schnelle, effiziente 
Weg zum Ziel.

fröhliches basteln
Hauspapa

von Fibs2000 (Gast)


Lesenswert?

Funktioniert jetzt ohne Probleme durch die Hysterese und ein setzen 
einer HighTemp. Float macht auch keine Probleme. Und ja, natürlich 
Punkte statt Komma. War zu schnell beim Tippen....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.