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.
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.
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.
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.
Sollte das Relais (Modul) mit einer anderen Spannung als der Arduino betrieben werden hat der interne Pullup und ein externe verschiedene Funktionalitäten.
keine Spannungsversorgung: NO = open
Spannungsversorgung 5V, "in" unbelegt: NO = closed
Spannungsversorgung 5V, "in" LOW: NO = closed
Spannungsversorgung 5V, "in" HIGH: NO = open
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...)
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.
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
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.
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.
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.