Suche Relais, das NO auch bei Reboot hält

Ich bastel eine Alarmanalge mit einem Arduino Mega 2560.
Ich möchte eine 12V-Sirene ansteuern.
Ich habe nun das weitverbreitete Relais SRD-05VDC-SL-C probiert.
Da habe ich nun ein Problem: der NO-Kontakt ist in stromlosen Zustand offen - wie es sein soll.
Sobald VCC +5V und GND anliegt, braucht das Relais einen HIGH-Pegel im Signaleingang, um NO auch offen zu halten.
Beim Reboot/Reset des Arduino kommt es aber kurzzeitig dazu, dass der OUTPUT-PIN = LOW sendet, was dazu führt dass die Sirene beim Boot/Reset kurz angeht, bis der PIN im setup() auf HIGH gezogen wird.

Gibt es empfehlenswerte Relais, die wirklich erst ziehen, wenn +5V Steuerspannung anliegen?

Ich hab auch keinen Bock mit Pullup-Widerstand zu arbeiten, das ist mir zu wackelig, zu "pfusch".

Ich suche also ein Relais das IMMER aus ist, außer es bekommt explizit +5V von meinem OUTPUT-PIN.

Du kannst jedes 5Volt (oder mehr) Relais dazu verwenden. In dem Fall musst du nur selbst einen Treibertransistor dazu einbauen.
Oder du suchst im Web nach Relaismodulen die "aktiv HIGH" angesteuert werden.

Für "aktiv Low Relais" gilt:

void setup()
{
  digitalWrite(relaispin,HIGH);
  pinMode(relaispin,OUTPUT);
}

Und ja: In genau der Reihenfolge!

PS:
Hast du nur das nackte Relais oder sitzt das auf einem geheimen Board?

Das kann nicht sein. Wenn im setup() steht

pinMode(rel, OUTPUT);
digitalWrite(rel, HIGH);

dann geht das so schnell, daß das Relais garkeine Zeit zum Schalten hat.

Ggf. hilft ein Widerstand gegen Masse (LOW) um das Relais auch bei abgeklemmtem Arduino nicht anziehen zu lassen. Näheres steht im Datenblatt zu Deinem Relais.

Edit: ersetze LOW durch HIGH, wenn das Relais dann aus ist.

Pfusch ist nur wenn Du es nicht ordentlich machst.
Ich sehe einen Pullup als praktikable Lösung.

Grüße Uwe

Noch sehe ich hier keine verständliche Problembeschreibung.
Das genannte Relais kann man nicht direkt an einem Arduino betreiben, nicht ohne Treiber usw.

Schaltplan geheim, Programm geheim. Relaisansteuerung geheim.

Nein!
Ich kann nicht sehen, dass ein Pullup (an welcher Stelle überhaupt?) hilfreich sein kann.
Zudem gibts ja die internen Pullup.

Wo seht ihr einen Pullup-Widerstand?

Das Relais muss mit einem Transistor angesteuert werden. Und der braucht einen Widerstand (mindestens)

Ein npn braucht einen Basis-Vorwiderstand, ein N-MOSFET braucht einen Pulldown am Gate, und optimalerweise um den µC zu schützen auch einen Gate-Vorwiderstand.

(@combie war schneller)

Sollte das Relais (Modul) mit einer anderen Spannung als der Arduino betrieben werden hat der interne Pullup und ein externe verschiedene Funktionalitäten.

Grüße Uwe

Hätte, hätte und sollte...
Zumindest das durften wir erfahren, dass das Relais mit 5V betrieben wird.
Ein Mega kann auch garnix anderes.

Hey @combie, hey Leute,

danke für Eure reichlichen Antworten und Tipps - und: sorry, ja, die Schilderung des Setups war lückenhaft bis mangelhaft. Asche auf mein Haupt.

Arduino Mega 2560
ETH-Shield (angeblich ein W5100)

Relais-Modul: geheim - habe kein Datenblatt oder Schaltplan dazu
Aber wenn die Abbildung stimmt, ist es dies hier: 1 Channel 5V Relais für Arduino 5/230V mit Zustands LEDs, 1,49 €

keine Spannungsversorgung: NO = open
Spannungsversorgung 5V, "in" unbelegt: NO = closed
Spannungsversorgung 5V, "in" LOW: NO = closed
Spannungsversorgung 5V, "in" HIGH: NO = open

void setup() {
  digitalWrite(4, HIGH);
  pinMode(4, OUTPUT);
  pinMode(5, INPUT_PULLUP); // Taster5
  pinMode(6, INPUT_PULLUP); // Taster6
}

void loop() {
  if (digitalRead(5) == LOW) { //Taster5 gedrückt
    digitalWrite(4, LOW); // Relais EIN
  }
  if (digitalRead(6) == LOW) { //Taster6 gedrückt
    digitalWrite(4, HIGH); // Relais AUS
  }
}

Beim Boot/Reset schaltet das Relais NO für ca. 1 Sek. auf "closed", bevor digitalWrite(4, HIGH); im setup() zieht und NO wieder auf "open" setzt.

Mache ich was grundlegendes falsch?

Ich habe gerade das Eth-Shield im Verdacht, das hat mir schon bei eine anderen Projekt trouble gemacht da es lange zum Initialisieren braucht (in meinem Setup ist es aufgesteckt, auch wenn es im Beispiel-Code nicht angesteuert wird).
Ich checke das die Tage mal, ob sich was verändert wenn ich das W5100 abstecke (und alles neu verkabele...)

Das ist eigentlich widersinnig, weil nicht Normally Open.
Wie schon vorgeschlagen bleibt nur ein Pullup um NO zu erreichen.

Sorry, fake news. Grad nochmal durchgetestet.
Wenn "in" unbelegt bleibt NO="open".
Abermals: Asche auf mein Haupt.
Solche Forumsuser wie mich liebe ich ja. Gefährliches Halbwissen, spärliche Infos und verwirrende Aussagen, die dann widerrufen und ggf. re-widerrufen werden.
SORRY

Also also:
keine Spannungsversorgung: NO = open
Spannungsversorgung 5V, "in" unbelegt: NO = open
Spannungsversorgung 5V, "in" LOW: NO = closed
Spannungsversorgung 5V, "in" HIGH: NO = open

Und beim Boot/Reset haut's mir immer ne Sekunde mit NO=closed rein, weil PIN4 wohl kurzzeitig LOW ist.

And that's the problem.

Falls das den Relais-Pin verwendet, einen anderen Pin nehmen. Ansonsten einfach den Pin vor dem Eth-Shield initialisieren. Sekundenlanges Anziehen des Relais ist alleine im Setup() zu suchen. Und wenn dafür ein LOW Pegel notwendig ist, dann kann das nur an einer Mehrfachverwendung des Pins liegen.

JACKPOT @DrDiettrich !
Mit PIN_21 läuft es einwandfrei.
PIN_21 ist direkt vom Mega-Board, ohne angestecktes Eth-Shield dazwischen.
PIN_4 aus den vorherigen Experimenten wird über das Eth-Shield geschleift.

void setup() {
  digitalWrite(21, HIGH); // Relais per default ausschalten
  pinMode(21, OUTPUT);  // Setze den PIN für das Relais für das BWG-Blitzlicht als Ausgang
  pinMode(5, INPUT_PULLUP); // BWG-Alarm Auslösekontakt
  pinMode(6, INPUT_PULLUP); // BWG-Alarm An-Aus-Taster
}

void loop() {
  if (digitalRead(5) == LOW) { // PIN 5 mit GND kurzgeschlossen (Taster gedrückt)
    digitalWrite(21, LOW); // Relais EIN
  }
  if (digitalRead(6) == LOW) { // PIN 6 mit GND kurzgeschlossen (Taster gedrückt)
    digitalWrite(21, HIGH); // Relais AUS
  }
}

THX, das Eth-Shield war's.

PS: Hätt ich mein Setup gleich zu Beginn ordentlich geschildert, wäre viell jm andres früher auf die Idee gekommen... @combie ich werde mich bei zukünftigen Posts bessern :wink:

Pin 4 wird für die SD Karte verwendet, und sollte HIGH bleiben, damit deren Treiber nicht auf SPI dem W5100 Dingen dazwischen quatscht,

und

Wäre die Angabe was an Hardware vorliegt und welcher Code verwendet wird, im Eingangspost gewesen, hätte man dir in 30 Sekunden mitteilen können, woran es liegt.

Merke:

  • Schaltplan posten
  • Code posten

Du weißt schon daß Pin 21 ein Teil das I2C Busses ist. Wenn Du den Bus brauchst mußt Du einen anderen Pin nehmen.
Grüße Uwe

Auf dem Mega ist es zudem auch so, dss Pin20 / Pin21 10kOhm Pullups dran haben. Darum hält sein Relais da ganz sicher die Füsse still, auch wenn der Pin noch nicht initialisiert ist. Allerdings erkauft er sich , wie du schon sagst, natürlich diesen Vorteil mit dem Verlust von Hardare I2C.

Hallo,

wenn der TO ganz sicher gehen will muss er ein nacktes Relais verwenden und das drumherum selbst bauen bzw. beschalten. Denn wenn der Arduino Stromlos ist aber die Sirene noch an Spannung hängt, hätte er wieder den ungewollten Zustand wegen dem Low Aktiv.

Es geht nicht um high/low aktiv, es kann immer dafür gesorgt werden, daß das Relais nicht versehentlich anzieht. Bei Kopplung über Optokoppler muß z.B. mehr Strom fließen als ein loses Kabel einfangen kann.