Relais am Multi Function Shield

Das Multi Function Shield, das ich ja bereits vorgestellt habe und das mittlerweile ja auch um einen Drehgeber erweitert wurde, bietet mit der Möglichkeit zur einfachen Anzeige von Daten auf seinem 4-fach-7-Segment-Display und den freien Anschlusspins eine gute Grundlage, Sensoren ausprobieren.

In meiner 37-in-one-Sensoren-Bulk-Sammlung findet sich auch ein Relais-Modul, das KY-019

Hardware: Relais


Mit Relais wie auf dem Modul KY-019 (auf dem Foto ganz links) kann man mit dem Arduino Sekundärstromkreise mit höheren Spannungen und Stromstärken schalten. So lassen sich zum Beispiel auch Steckdosen schalten, ohne das der Ardunio durch die hohen Spannungen Schaden nehmen würde.

Es gibt auch Module mit einer extra LED-Anzeige des Schaltzustands (Exemplar in der Mitte) oder solche mit gleich 2 Relais und zusätzlichen Optokopplern (rechts).

Allen gemein sind, dass sie zwei getrennte Anschlussgruppen haben: Die Steueranschlüsse kommen an den Arduino, wobei Signal an einen beliebigen, digitalen GPIO-Ausgang angeschlossen wird. Ich habe dafür wieder den 4x3 Header und GPIO 5 gewählt (oberste Reihe).

Die Schaltanschlüsse fungieren als Schalter für den Sekundärschlatkreis, der über eine eigene Stromversorgung verfügt. Wie hoch hier der Strom und die Spannung sein darf, darüber gibt der Aufdruck auf dem Relais Auskunft. Meist sind es 10 Ampere bei 250 Volt. Das hieße bei 230 Volt könnten wir damit Geräte bis 2300 Watt schalten.

Der COM-Anschluss wird dabei immer verwendet. Je nach Anwendung wird als weiterer Anschluss der NO oder NC - Anschluss verwenden. Wollen wir mit dem Relais etwas schalten, dann normalerweise ausgeschaltet ist, wie etwas ein Licht, dann verwenden wir "normally open" = NO. Dann wird der Schaltkreis geschlossen, sobald der Signal-Anschluss des Steuerschaltkreises auf LOW (ist durch Pullup-Widerstand normalerweise auf HIGH) gesetzt wird. Das Relais klickt einmal und das Licht geht an. Setzen wir Signal wieder auf HIGH, klickt dann Realis noch einmal (entspannt wieder) und der Stromkreis wird unterbrochen.

Wollen wir allerdings einen normalerweise geschlossenen Kreislauf kurz unterbrechen, dann verwenden wir den "normally closed" = NC Anschluss. Am häufigsten wird wohl aber der erste Fall sein.

Im Relais, dem kleinen blauen Kasten, selbst ist ein kleiner Elektromagnet verbaut, der, wenn er geschaltet wird (Signal auf LOW) mit Strom versorgt wird. Dadurch baut die Spule im Relais ein magnetischen Feld auf, dass einen Eisenkern anzieht, der dann eine Art Wippe bewegt, die je nach Position eine Verbindung zwischen COM und NO oder COM und NC im Sekundärschaltkreis herstellt.

Die einzelnen Schaltkreise haben keine elektrische Verbindung, man nennt sie darum galvanisch getrennt. Außer diesem mechanischen Schalter mit dem Elektromagneten gibt es noch eine weitere Art, Schaltkreise galvanisch zu trennen. Sie ist in den Optokopplern im rechten Modul (die zwei kleinen schwarzen Kästchen oberhalb der Relais) verbaut. Hier drin kommen eine LED und eine Fototransistor zum Einsatz, um Schaltzuständen zu steuern. Auch hier gibt es keine elektrische (sondern nur eine optische) Verbindung. Mit diesen kleinen Optokopplern kann man allerdings keine tausende Watt schalten. Die Optokoppler schalten indes die Relais, die dann den Sekundarschaltkreis schalten. Somit sind Steuer- und Sekundärschaltkreis doppelt galvanisch getrennt.

Die Funktionsweise eines Relais lässt sich am Besten am Objekt selbst erklären. Ich habe ein älteres Modell, durchsichtiges Modell gefunden und führe es im folgenden Video vor:




Nun wollen wir aber auch eine Steuerschaltung für den Arduino aufbauen und programmieren. Wir wollen eine Blinkeranlage in einem Auto emulieren, bei der der Arduino die Steuerelekttronik / den Bordcomputer darstellen soll, mit dem wir ein Lämpchen ein- und ausschalten wollen, dass den Blinker im 12V-Kreislauf des Auto darstellen soll.

Es gibt also zwei Stromkreise. Den Arduino-Stromkreis schließen wir wie oben beschrieben an. Für den zweiten Schaltkreis benötigen wir ein Lämpchen und eine Spannungsquelle, die für dieses Lämpchen geeignet ist. Also z. B. ein 12 Volt-Netzteil und ein Autolämpchen. Von Experimente mit 230V rate es an dieser Stelle ausdrücklich ab. Da sollte man sich nur als Profi heranwagen, der ganz genau weiß, was er tut.

Wir wählen den NO (normally open) und den COM-Port des Relais, und schließen diese wie einen Schalter im Sekundärschaltkreis an. Man kann die Schaltung auch schon vorher ohne Relais testen, dann baut man statt Relais einen Taster oder Schalter ein.

Steht der Versuchsaufbau kann man mithilfe des untenstehenden Programms, dass auf den Arduino geladen wird, Taster S1 auf dem Multi Function Shield benutzen, um zwischen dem "offen" und "geschlossen" - Zustand hin und herzuschalten. Ein Druck auf S2 wechselt in den Blinkmodus, bei dem sich das Lämpchen dann wie bei einem Autoblinker verhalten sollte, inklusive des charakteristischen Klickens des Relais.

Auch dies habe ich in einem Video festgehalten:



Das Programm für den Blinker sieht wie folgt aus:

Source-Code

//////////////////////////////////////////////////////// // (C) 2019 by Oliver Kuhlemann // // Bei Verwendung freue ich mich über Namensnennung, // // Quellenangabe und Verlinkung // // Quelle: http://cool-web.de/arduino/ // //////////////////////////////////////////////////////// #include <TimerOne.h> // für Timings und Interrupts #include <MultiFuncShield.h> // API für das Multi Function Shield #define PinData 5 // wo ist Data angeschlossen? #define DurPause 10 // Pause in ms zwischen den Messungen void setup() { Timer1.initialize(); MFS.initialize(&Timer1); // initialize multi-function shield library pinMode (PinData, OUTPUT); //Serial.begin (115200); } void doSwitch(boolean closed) { if (closed){ digitalWrite(PinData, LOW); MFS.writeLeds(LED_1, OFF); MFS.writeLeds(LED_2, ON); MFS.write("clos"); } else { digitalWrite(PinData, HIGH); MFS.writeLeds(LED_1, ON); MFS.writeLeds(LED_2, OFF); MFS.write("open"); } } void loop() { boolean closed=false; int btn=0; MFS.beep(1, 5, 2); // bereit while (1) { btn=MFS.getButton(); if (btn == BUTTON_1_PRESSED) { // umschalten closed=!closed; } if (btn == BUTTON_2_PRESSED) { // Blinker-Modus an while (MFS.getButton() != BUTTON_3_PRESSED) { doSwitch (true); delay (500); doSwitch (false); delay (500); } closed=false; } doSwitch (closed); delay(DurPause); } }