Arduino friert ein nach 1-3h

Gast #3708952
Lesenswert?

Hallo,
ich habe das Problem das der Arduino Uno immer einfriert, hängen bleibt. 
Nur komischer weise nicht wenn ich ihn mit dem Notebook mit Strom 
versorge und dabei das Serielle Interface auf habe.
In der Regel hängt er sich (so nach 1-3h) auf wenn das Relais 230V 
wieder eingeschaltet wird. Ob sich irgendwie fehlerhafte Ströme 
einschleichen? Ich weis es nicht und bin ein bisschen ratlos.
Der Code ist eigentlich sehr simpel, es soll einfach ein Relais an und 
abgeschaltet werden, je nach dem ob die gewünschte Temperatur erreicht 
ist oder nicht.

Schonmal vielen dank.

Mit freundlichen Grüßen
Stefan
Angehängte Dateien:
#3709018
Lesenswert?

Stefan schrieb:
> Der Code ist eigentlich sehr simpel, es soll einfach ein Relais an und
> abgeschaltet werden, je nach dem ob die gewünschte Temperatur erreicht
> ist oder nicht.

Wenn Du in die Schaltung genau so viele und so fette Kinken eingebaut 
hast wie in diesen "sehr simpel" Code bei der Programmlogik, dann 
wundert mich gar nichts.

Beispiel:
1
float temp = 1.3; //1.2aus //1.4an
2
...
3
long interval = 2000;
4
...
5
    t = dht.readTemperature();
6
   //Gefriertruhesteuerung   
7
      if (t>temp) {digitalWrite(kuehlschrank, HIGH);
8
        Serial.print("Temperatur: "); 
9
        Serial.print(t);
10
        Serial.print(" *C ");
11
        Serial.println("Kuehlschrank AN");
12
      } else {
13
        digitalWrite(kuehlschrank, LOW);
14
        Serial.print("Temperatur: "); 
15
        Serial.print(t);
16
        Serial.print(" *C ");
17
        Serial.println("Kuehlschrank AUS");
18
      }

Wenn Deine Temperatur nun an der Schwelle zwischen 1.3 und 1.4 ist, und 
Dein Sensor infolgedessen immer abwechselnd springende Werte mißt, mal 
1.3 und mal 1.4, dann springt Dein Kühlschrank immer im Zweisekundentakt 
an und geht wieder aus.

Absicht?

Bei einer vernünftigen Temperaturregelung müßtest Du auch als 
Arduino-Programmierer eine Hysterese berücksichtigen, so dass am 
Umspringpunkt nicht ständig ein- und ausgeschaltet wird, weil die 
Sensormesswerte um eine Stelle springen.

Schalten mit Hysterese von +/-0.1° Hysterese:
1
    t = dht.readTemperature();
2
   //Gefriertruhesteuerung   
3
      if (t>temp+0.1) {digitalWrite(kuehlschrank, HIGH);
4
        Serial.print("Temperatur: "); 
5
        Serial.print(t);
6
        Serial.print(" *C ");
7
        Serial.println("Kuehlschrank AN");
8
      } else if (t<temp-0.1){
9
        digitalWrite(kuehlschrank, LOW);
10
        Serial.print("Temperatur: "); 
11
        Serial.print(t);
12
        Serial.print(" *C ");
13
        Serial.println("Kuehlschrank AUS");
14
      }

Mit dieser Logik würde Dein Kühlschrank dann
- bei t>temp+0.1 einschalten
- bei t<temp-0.1 ausschalten
Und bei t-0.1, t und t+0.1 würde der jeweils letzte Schaltzustand 
beibehalten werden, so dass das Gerät nicht ständig ein und aus 
geschaltet wird, wenn die Temperaturmessung in der Zehntelgrad Stelle 
hin und her springt.

Eine Hysterese von nur +/-0.1°C ist schon recht klein, normalerweise 
muss die Hysterese deutlich größer sein, besonders dann, wenn Du mit 
mechanischen Relais schaltest. Sonst wirst Du ein mechanisches Relais in 
kürzester Zeit wegen der Schalthäufigkeit ruiniert haben (Schau ins 
Datenblatt, wieviele Schaltzyklen Dein Relais schafft, wenn es ein 
mechanisches ist).

Bei der Steuerung des Luftbefeuchters übrigens genau dasselbe Problem, 
keine Hysterese und daher ständiges Ein- und Ausschalten bei springenden 
Messwerten am Schaltpunkt möglich.

Ansonsten zeige mal den vollständigen Schaltplan!
Die Abstürze dürften durch das Schalten Deiner induktiven Lasten 
("Motoren") mittels mechanischer Relais in Kombination mit fehlenden 
schaltungstechnischen EMV Schutzmaßnahmen zustande kommen.

Interessant ist insbesondere, was Du da am Relais verbaut hast:
- mechanisches Relais?
- "nacktes" Relais oder "Relais-Modul"?
- Snubber als Löschglied auf der 230V Seite?
Gast #3709045
Lesenswert?

Jürgen S. schrieb:
> Interessant ist insbesondere, was Du da am Relais verbaut hast:
> - mechanisches Relais?
> - "nacktes" Relais oder "Relais-Modul"?
> - Snubber als Löschglied auf der 230V Seite?

> Ja es ist ein mechanisches Relais (K1CK005W)
> Ja das Relais ist "nackt" bis auf ULN2003
> Nein habe ich nicht, habe ich jetzt ein bisschen etwas drüber gelesen werde ich 
einfügen

Mfg
Stefan
Angehängte Dateien:
Gast #3709090
Lesenswert?

Du solltest mit dem ULN2003 gegen GND schalten. Die Speisespannung für 
das Relais beziehst du besser nicht vom Regler des Arduino. So wirst du 
Störungen von der Relais-Seite los. Also an das Relais sollten
1. +5Volt
2. Ausgang des ULN2003

Signal invertieren nicht vergessen
#3709119
Lesenswert?

Stefan schrieb:
>> Ja es ist ein mechanisches Relais (K1CK005W)
>> Ja das Relais ist "nackt" bis auf ULN2003
>> Nein habe ich nicht, habe ich jetzt ein bisschen etwas drüber gelesen werde ich
> einfügen

Es fehlt offenbar nicht nur ein Snubber/Löschglied am Relaisausgang auf 
der 230V Seite.

Sondern es fehlt auch die antiparallel geschaltete Freilaufdiode über 
der Relaisspule.

Dein Relais produziert hinten und vorne nur EMV Störungen.

Damit beim Abschalten des Spulenstroms keine unzulässig hohe 
Induktionsspannung auf Deinen Controller bzw. ULN2003 zurückwirkt, 
benötigst Du für die Relaisspule eine Schutzdiode in der Schaltung.

Ich glaube, Du solltest mal einen Blick auf diese Seite werfen:
http://www.mikrocontroller.net/articles/Relais_mit_Logik_ansteuern
#3709128
Lesenswert?

@Jürgen S. (jurs)

>Sondern es fehlt auch die antiparallel geschaltete Freilaufdiode über
>der Relaisspule.

Nö, die ist im ULN2003 drin. COM ist angeschlossen.

@ Stromverdichter (Gast)

>Du solltest mit dem ULN2003 gegen GND schalten.

Das tut er.

>Die Speisespannung für
>das Relais beziehst du besser nicht vom Regler des Arduino.

Das ist weniger kritisch.

> So wirst du
>Störungen von der Relais-Seite los. Also an das Relais sollten
>1. +5Volt
>2. Ausgang des ULN2003

Liegt an.

>Signal invertieren nicht vergessen

Augen aufmachen nicht vergessen!
Gast #3709137
Lesenswert?

Falk Brunner schrieb:
> @ Stromverdichter (Gast)
>
>>Du solltest mit dem ULN2003 gegen GND schalten.
>
> Das tut er.

Das tut er nicht!

Falk Brunner schrieb:
>>Die Speisespannung für
>>das Relais beziehst du besser nicht vom Regler des Arduino.
>
> Das ist weniger kritisch.

sehe ich anders, die Speisespannung des Arduinos bekommt einen Klapps, 
das mag schonmal einen Reset auslösen oder im schlimmsten Fall den 
Controller "einfrieren" ;-)

Falk Brunner schrieb:
>> So wirst du
>>Störungen von der Relais-Seite los. Also an das Relais sollten
>>1. +5Volt
>>2. Ausgang des ULN2003
>
> Liegt an.
liegt nicht an

ich bin doch nicht blind?
#3709162
Lesenswert?

Stromverdichter schrieb:
> Falk Brunner schrieb:
>> @ Stromverdichter (Gast)
>>
>>>Du solltest mit dem ULN2003 gegen GND schalten.
>>
>> Das tut er.
>
> Das tut er nicht!
> Falk Brunner schrieb:
>>> So wirst du
>>>Störungen von der Relais-Seite los. Also an das Relais sollten
>>>1. +5Volt
>>>2. Ausgang des ULN2003
>>
>> Liegt an.
> liegt nicht an
>
> ich bin doch nicht blind?
doch ! Schau den Schaltplan noch mal genau an.

Sascha
Gast #3709510
Lesenswert?

Jürgen S. schrieb:
> Dein Kühlschrank immer im Zweisekundentakt
> an und geht wieder aus.


Als Tipp möchte ich meine einfache Strategie zu dem Thema mal kund tun.
Die ist sehr einfach gehalten:
Habe einen NTC am ADC des AVR mit einem Spindeltrimmer auf die 
gewünschte
Kühltemperatur abgeglichen.
Die Software fragt nun nur noch ab, ob der ADC kippt oder nicht.
Die Hystere erzeuge ich über einen Timer.
Nach dem initialen Einschalten wird immer 5 Minuten gewartet,
weil man ja nicht weiß, ob es ein Stromausfall
war (Stecker gezogen, o.ä.) oder nicht.
Denn die Kühlkompressoren mögen es garnicht, wenn man sie im 
betriebswarmen Zustand gleich wieder startet. Da gehen die Dinger sehr 
schnell kaputt, weil sie gegen den hohen Druck der Kühlflüssigkeit 
ankämpfen müssen.
Sind die 5 Minuten um, wird geschaut ob der ADC gekippt ist, also 
gekühlt werden muss.
Ist das der Fall, dann wird der Kompressor gestartet. Und zwar für 
mindestens 2 Minuten. Erst dann wird wieder der ADC abgefragt. Wenn der 
sagt, dass es kühl genug ist, dann wird noch eine Minute Nachlauf dran 
gehängt. Das bringt noch ein wenig Temperaturhysterese, d.h. ein klein 
wenig kühler als eingestellt.

Dann wird wieder 5 Minuten gewartet. Und das ganze Prozedere geht wieder 
von vorne los. Wie nach Power On.

Habe jetzt schon über 2 Jahre einen Kühlschrank mit dieser Technik am 
Laufen. Meine Messungen der Temperatur bestätigen meine Taktik als 
vernünftigen Ansatz, denn die Temperatur wird +-0.8 Grad konstant 
gehalten.
Und das ist aus meiner Sicht Ok.

Habe im Anhang den ASM-Code von meiner Lüftersteuerung für mein 
UMTS-Gateway, das im Freien ausgestellt ist, angehangen. Hier verwende 
ich die gleiche Taktik. Da der Code relativ ausführlich dokumentier ist, 
sollte er auch in C oder eine anderen Sprache umsetzbar sein.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren