Erfahrung mit "China" Relais- Zuverlässlichkeit

Hallo,
hat jemand bereits längere Erfahrung mit diesen Relais, die es haufenweise bei Ebay gibt?
zB SainSmart 4 Kanäle Relaismodul Brett 5v für Arduino Pic AVR DSP arm Relay Module online kaufen | eBay

Ich frage deshalb, weil mein Relais ein wenig spinnt.
Kanal 1 und 2 schalten sehr zuverlässlich.
Kanal 3 schaltet bei jedem 10 Mal nicht ein (es macht kurz klack und dann resettet der Arduino)
Kanal 4 schaltet sporadisch nicht aus und die Pumpe läuft einfach weiter. Da das nächste Relais dann allerdings auch nicht mehr einschaltet vermute ich, dass der Arduíno irgendwie abgeschmiert ist (wobei ich dann widerrum vermutet hätte, dass er resettet)

Was genau mach ich:

  • Ich habe ein Ardunio Breadboard gelötet.
  • Spannungsversorgung 12V
  • ich habe vier 12V Dosierpumpen, jeweils parallel schalte ich noch eine LED mit
  • über einen 7805 wird der Arduino versorgt
  • über den selben 7805 auch die Schaltspannung für die Relais
  • geschaltet wird bei LOW Pegel

Zum testen habe ich einen in 30 Sek erstellten ziemlich primitiven Copy&Paste Testcode benutzt,da ich 5 Durchläufe testen wollte:

void setup()
{  
  pinMode(7, OUTPUT);
  digitalWrite (7, HIGH);
  pinMode(8, OUTPUT);
  digitalWrite (8, HIGH);
  pinMode(9, OUTPUT);
  digitalWrite (9, HIGH);
  pinMode(10, OUTPUT);
  digitalWrite (10, HIGH); 
}

void loop() {
test();
}

void test() {
  delay(10000); /Startverzögerung
  digitalWrite (7, LOW);
  delay(30000);
  digitalWrite (7, HIGH);
  delay(1000);
  digitalWrite (8, LOW);
  delay(30000);
  digitalWrite (8, HIGH);
  delay(1000);
  digitalWrite (9, LOW);
  delay(30000);
  digitalWrite (9, HIGH);
  delay(1000);  
  digitalWrite (10, LOW);
  delay(30000);
  digitalWrite (10, HIGH); 
  delay(1000); 
  digitalWrite (7, LOW);
  delay(30000);
  digitalWrite (7, HIGH);
  delay(1000);
  digitalWrite (8, LOW);
  delay(30000);
  digitalWrite (8, HIGH);
  delay(1000);
  digitalWrite (9, LOW);
  delay(30000);
  digitalWrite (9, HIGH);
  delay(1000);  
  digitalWrite (10, LOW);
  delay(30000);
  digitalWrite (10, HIGH); 
  delay(1000);  
  digitalWrite (7, LOW);
  delay(30000);
  digitalWrite (7, HIGH);
  delay(1000);
  digitalWrite (8, LOW);
  delay(30000);
  digitalWrite (8, HIGH);
  delay(1000);
  digitalWrite (9, LOW);
  delay(30000);
  digitalWrite (9, HIGH);
  delay(1000);  
  digitalWrite (10, LOW);
  delay(30000);
  digitalWrite (10, HIGH); 
  delay(1000);  
  digitalWrite (7, LOW);
  delay(30000);
  digitalWrite (7, HIGH);
  delay(1000);
  digitalWrite (8, LOW);
  delay(30000);
  digitalWrite (8, HIGH);
  delay(1000);
  digitalWrite (9, LOW);
  delay(30000);
  digitalWrite (9, HIGH);
  delay(1000);  
  digitalWrite (10, LOW);
  delay(30000);
  digitalWrite (10, HIGH); 
  delay(1000);  
  digitalWrite (7, LOW);
  delay(30000);
  digitalWrite (7, HIGH);
  delay(1000);
  digitalWrite (8, LOW);
  delay(30000);
  digitalWrite (8, HIGH);
  delay(1000);
  digitalWrite (9, LOW);
  delay(30000);
  digitalWrite (9, HIGH);
  delay(1000);  
  digitalWrite (10, LOW);
  delay(30000);
  digitalWrite (10, HIGH); 
  delay(10000000);  
  
}

Was denkt ihr?

Gruß
Thorsten

Klingt für mich wie ein Problem mit der Stromversorgung. Klatsch die ganze Platine mit 100nF Kondensatoren voll und check mal, ob da nicht noch andere Spannungen einbrechen (z.B. beim Anlaufen der Pumpen)

Die Relaisplatine kann hier eig. nicht dran schuld sein, da sie durch die Optokoppler komplett galvanisch getrennt ist.

Könnte ein Masseproblem sein. Lies mal das hier:

http://forum.arduino.cc/index.php?topic=171722.0

Micky

Hallo,
werde ich alles mal prüfen und mir den Thread zur Masse anschauen.
Dennoch frage ich mich, wieso das Problem nur bei Relais 3 und 4 auftritt. Daher war bei mir eher die Vermutung eines Defekts.

Andere Frage:
Könnte ich das ggfs. doch BESSER und stabiler mit einem ULN2003 aufsetzen? Der hat ja auch schon Kondensatoren und Dioden verbaut (soweit ich weiß).
Was meint ihr?

Oder vielleicht einfach mit dem ULN die Relais ansteuern?

VG
Thorsten

Du musst bedenken dass da Optokoppler zwischen den Inputs in den Relais hängen (die 4-poligen Dinger). Der ULN würde nicht die Relais direkt treiben.

currymuetze:
Dennoch frage ich mich, wieso das Problem nur bei Relais 3 und 4 auftritt. Daher war bei mir eher die Vermutung eines Defekts.

Aufgrund von Bauteile-Toleranzen fallen bei einer mangelhaften Stromversorgung nicht alle gleichartigen Bauteile auch gleichzeitig aus, sondern ein Bauteil kann es im Grenzbereich "gerade noch" machen, während ein anderes "gerade schon" ausgefallen ist.

Beachten mußt Du unter anderem, dass an den meisten Arduino-Boards nur max 200mA am 5V-Pin entnommen werden dürfen. Die meisten billigen Multimeter haben einen 200 mA Messbereich, so dass Du selbst mit minimaler Messausrüstung leicht nachprüfen kannst, ob Deine Schaltung unter 200 mA am 5V-Pin bleibt (bei geschalteten Relais).

Brauchst Du für ein Multi-Relaisboard mehr Strom an 5V, dann benötigst Du eine andere Stromversorgung und kannst den Strom nicht einfach am 5V Pin des Arduino abzapfen.

Außerdem bin ich am Zweifeln, ob Deine Schaltung überhaupt korrekt ist.

Hast Du beim Schalten Deiner Gleichstrom-Dosierpumpen beispielsweise sogenannte "Freilaufdioden" an der Lastseite vorgesehen?

Hallo Jurs,

also der Strom für die Schaltspannung kommt nicht vom Arduino sondern wird direkt hinterm 7805 (12v auf 5V) abgezweigt.
Freilaufdioden habe ich in der Tat nicht geschaltet, wobei diese auf der Relaisplatine verbaut sein müssten....das prüfe ich noch mal. Oder wo würdest du die DIoden einbauen?

Ich habe mal eben nen Schaltplan erstellt (Powerpoint, kein Eagle zur Hand), wie ich das mit einem ULN schalten würde. Der hat doch meines Wissens Freilaufdioden drin oder nicht?
Ist das so sinnvoll?
AUch hier könnte ich alternativ zum 5V AUsgang des Arduino die 5V direkt hinterm Spannungswandler abzweigen, dann wäre ja keine Strombegrenzung vorhanden.
Das mess ich ggfs trotzdem mal nach.

Gruß

Hier noch mal die Aktuelle Schaltung (die parallel anliegenden LEDs habe ich nicht eingezeichnet, die werde ich auch ab jetzt über einen eigenen digitalen Output steuern)

Eine komplette galvansche Trennung habe ich hier vermutlich eh nicht, da ich zwar den Jumper bei JD VCC entfernt habe und somit die 5V Versorgung autark vornehme, diese aber spätestens am uC beim 7805 auf GND vom uC zusammenläuft.

finder,omron und siemens relais sind alles made in china. :slight_smile:
es gibt halt welche die besser und schlechter sind.
Gurß
Der Dani

Der ULN bringt dir gar nichts! Die Relais werden (laut deinem ebay Bild zumindest) über Optokoppler gesteuert. Die brauchen vielleicht 10-30 mA pro Eingang. Das kann auch der Arduino direkt. Darüber hast du auch galvanische Trennung zwischen den Relais Eingängen und dem Arduino.

Der ULN ist ein Darlington-Array. Wenn man da Relais direkt dranhängt ist das super, da die riesige Stromverstärkungen machen (mehrere Hundert bis Tausend), aber für einen Optokoppler völlig überdimensioniert.

currymuetze:
Hier noch mal die Aktuelle Schaltung

Die zwei 100 µF Kondensatoren am 7805 Spannungsregler aus dem Arduino Board-Design meinst Du einfach so weglassen zu können? Da wäre ich vorsichtig. Diese sind meines Erachtens nach dazu da, die Spannung zu stabilisieren, wenn schnelle Stromänderungen an der Schaltung entstehen (z.B. beim Ein-/Abschalten des Spulenstroms).

Weiterhin ist Deine "Pumpe" eine sogenannte "induktive Last", und beim Schalten einer induktiven Last per Gleichstrom mit Relais benötigst Du am Relaisausgang eine antiparallel (in Sperrrichtung) geschaltete Freilaufdiode.

Dein China-Relais-Board hat nur im Eingang je eine Freilaufdiode pro Schaltkanal, um unerwünschte Spannungsspitzen als Rückwirkung auf Deine Arduino-Pins zu vermeiden, die aus dem Schalten des Relais-Spulenstroms resultieren. Am Ausgang haben solche Relaisboards keine Beschaltung, weil der Relaishersteller gar nicht wissen kann, ob Du induktive Lasten schalten möchtest und wenn ja, ob Du induktive Gleichstrom- oder Wechselstromlasten schaltest.

Wenn Du induktive Gleichstrom-Lasten ohne Freilaufdiode schaltest, können beim Abschalten solche Schaltfunken entstehen, dass jedes kleine Drahtstück in der Umgebung als Empfangsantenne wirkt und einen Spannungsimpuls erhält. Das kann trotz der Trennung mit Optokoppler zu unerwünschtem Verhalten der Schaltung führen, je nach Stärke des geschalteten Stroms.

Freilaufdioden gehören nur in den Eingang, da dir die Spule beim Abfallen eine entgegenlaufende Spannung induziert.

Um den Schaltfunken und sonstige Störungen am Ausgang zu minimieren gibt es RC-Snubber-Glieder:

Serenifly:
Um den Schaltfunken und sonstige Störungen am Ausgang zu minimieren gibt es RC-Snubber-Glieder:
Snubber – Wikipedia

Snubber-Löschschaltungen werden beim Schalten von Wechselstrom am Ausgang verwendet.

Dieser Schaltungsfall liegt bei currymuetze allerdings nicht vor.

Hi Jurs,

jurs:
Die zwei 100 µF Kondensatoren am 7805 Spannungsregler aus dem Arduino Board-Design meinst Du einfach so weglassen zu können? Da wäre ich vorsichtig. Diese sind meines Erachtens nach dazu da, die Spannung zu stabilisieren, wenn schnelle Stromänderungen an der Schaltung entstehen (z.B. beim Ein-/Abschalten des Spulenstroms).

Nene, die habe ich schon verbaut, nur nicht auf diesem Schnellschuss Powerpoint Plan eingezeichnet.

jurs:
Weiterhin ist Deine "Pumpe" eine sogenannte "induktive Last", und beim Schalten einer induktiven Last per Gleichstrom mit Relais benötigst Du am Relaisausgang eine antiparallel (in Sperrrichtung) geschaltete Freilaufdiode.

Dein China-Relais-Board hat nur im Eingang je eine Freilaufdiode pro Schaltkanal, um unerwünschte Spannungsspitzen als Rückwirkung auf Deine Arduino-Pins zu vermeiden, die aus dem Schalten des Relais-Spulenstroms resultieren. Am Ausgang haben solche Relaisboards keine Beschaltung, weil der Relaishersteller gar nicht wissen kann, ob Du induktive Lasten schalten möchtest und wenn ja, ob Du induktive Gleichstrom- oder Wechselstromlasten schaltest.

Wenn Du induktive Gleichstrom-Lasten ohne Freilaufdiode schaltest, können beim Abschalten solche Schaltfunken entstehen, dass jedes kleine Drahtstück in der Umgebung als Empfangsantenne wirkt und einen Spannungsimpuls erhält. Das kann trotz der Trennung mit Optokoppler zu unerwünschtem Verhalten der Schaltung führen, je nach Stärke des geschalteten Stroms.

habe ich mal eingebaut, sollte von der RIchtung hoffentlich passen, siehe anhang.
HAbe noch einige 1N4001 rumliegen, die sollten ja ausreichen.

finder,omron und siemens relais sind alles made in china.
es gibt halt welche die besser und schlechter sind.
Gurß
Der Dani

Das ist richtig. Ich bezog mich damit auch eher nicht auf das Relais als solches sondern die PLatine, die relativ günstig aus Hogkong und China versendet wird (und vermutlich nicht nach deutschen Standards getestet und besiegelt wurde) Ich geh jedenfalls davon aus, dass die meisten wissen, was ich damit meine :wink:

Wegen der Qualität.

Ist das hier z.B. besser?

Oder kommt das letztlich auch wieder von den gleichen Firmen? Die Relais scheinen ja die gleichen zu sein, nur die Platine ist anders.

currymuetze:
habe ich mal eingebaut, sollte von der RIchtung hoffentlich passen, siehe anhang.

Ja. Wenn Du sie falsch einbaust, wird es eine Kurzschlussdiode sein und dann spricht entweder irgendwo eine Überstromsicherung an oder die Diode geht mit einer kleinen Explosion in einem Rauchwölkchen auf.

Übrigens, bei Deiner Relais-Initialisierung:

void setup()
{  
  pinMode(7, OUTPUT);
  digitalWrite (7, HIGH);
  pinMode(8, OUTPUT);
  digitalWrite (8, HIGH);
  pinMode(9, OUTPUT);
  digitalWrite (9, HIGH);
  pinMode(10, OUTPUT);
  digitalWrite (10, HIGH); 
}

hast Du da gar kein Problem mit einem "Einschalt-Klickern", also dass alle vier Relais einmal kurz schalten, wenn sie Strom bekommen, weil
pinMode(7, OUTPUT);
den Ausgang ganz kurz auf LOW setzt und
digitalWrite (7, HIGH);
das Relais dann erst wieder abschaltet?

Die sichere Methode beim Initialisieren von "active low" schaltenden Relais auf "OUTPUT HIGH" ist es, dass der Pin zuerst auf Input-High geschaltet wird und dann auf Output gesetzt wird,

  digitalWrite(7, HIGH); // prevents relay from activating after power-on
  pinMode(7, OUTPUT);

oder

  digitalWrite(7, INPUT_PULLUP); // prevents relay from activating after power-on
  pinMode(7, OUTPUT);

Ich weiß nicht, wie sich Deine Relais verhalten und ich selbst habe hier nur ein 2-fach Relais-Board, aber wenn ich nicht diese Initialisierungsreihenfolge einhalte, gibt es beim Einschalten des Stroms ein Relais-Klickern.

jurs:
Die sichere Methode beim Initialisieren von "active low" schaltenden Relais auf "OUTPUT HIGH" ist es, dass der Pin zuerst auf Input-High geschaltet wird und dann auf Output gesetzt wird,

Das Problem habe ich gerade mit Analogschaltern (HC4066). Die aber Active-HIGH sind. Dass Mikrocontroller-Pins nach dem Reset auf HIGH gehen ist glaube ich weitverbreitet, aber wenn sich das per Software unterbinden lässt wäre das super.

Das ist aber eben anders herum. Der Mikrokontroller geht am Anfang automatisch auf HIGH und erst dann kann man sie LOW schalten.

Ich habe aber später auch ein Relais in meiner Schaltung und habe schon überlegt einen PNP-Transistor zu nehmen, damit es nach dem Einschalten Aus ist.

gute Frage.
Ich werds jetzt erst mal mit einer Freilaufdiode und einem 0.1uF Cap testen. Das könnte hoffentlich schon abhilfe schaffen.

Hi,

habe heute die 1N4001 und einen 0.1uF Cap je Pumpe eingelötet, und es funktioniert einwandfrei.
Hätt ich auch selbst darauf kommen können, das Problem hatte ich schon mal vor 1-2 Jahren bei einer schaltung.
Danke für den Tipp.

Gruß
Thorsten