Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino Projekt: Relaiskarte mit Reedkontakten steuern

Posted on 27. April 20201. Mai 2023 by Stefan Draeger

In diesem kleinen Projekt möchte ich dir zeigen wie du eine 2fach Relaiskarte mit 2 Reedkontakten schalten kannst.

Aufbau der Schaltung: Reedkontakt und 2fach Relaismodul am Arduino UNO
Aufbau der Schaltung: Reedkontakt und 2fach Relaismodul am Arduino UNO

Eine 2fach Relaiskarte habe ich bereits in Arduino Lektion 13: 2 fach Relaisplatine ansteuern vorgestellt und ein Reedkontaktmodul in Arduino Lektion 90: Reed Kontakt Sensor Modul vorgestellt.

  • Benötigte Bauteile
  • Aufbau & Schaltung
  • Programmieren
    • Ausbaustufe 1
      • Quellcode
      • Video
    • Ausbaustufe 2
      • Video

Benötigte Bauteile

  • 1x Arduino UNO, (inkl. USB Kabel)
  • 1x 400 Pin Breadboard,
  • 4x Breadboardkabel, 20cm, männlich – weiblich,
  • 2x Breadboardkabel, 20cm, männlich – männlich,
  • 6x Breadboardkabel, 10cm, männlich – männlich

Aufbau & Schaltung

Das 2fach Relais Modul wird wie folgt angeschlossen.

2fach Relais ModulArduino UNO
GNDGND
In1digitaler Pin D9
In2digitaler Pin D8
VCC5V 

Die Reedkontakte agieren wie einfache Taster welche mit einem Magneten aktiviert / deaktiviert werden anstatt mit der Hand. In meiner Schaltung verwende ich einen 10k Ohm Pull Down Widerstand.

Reedkontakte mit 4fach Relais Modul am Arduino UNO
Reedkontakte mit 4fach Relais Modul am Arduino UNO

In der Zeichnung habe ich ein 4fach Relais Modul verwendet. Leider konnte ich kein 2fach Relais Modul finden, so das ich darauf zurück greifen musste. Es wurden auch nur 2 Relais angeschlossen!

Programmieren

Ausbaustufe 1

Der Sketch / das Programm zum betreiben ist relativ übersichtlich, jedoch wollen wir dieses dynamisch halten so das man ggf. mehr als 2 Reedkontakte & somit mehr Relais schalten kann.

Ich nutze dazu ein Mehrdimensionales Array:

//Anzahl der Schaltungen in der Liste
const int ANZAHL_SCHALTUNGEN = 2;

//Liste mit den Schaltungen, 
//erster Wert ist der Reedkontakt, 
//zweiter Wert ist das Relais welches gesteuert werden soll
int schaltungen[ANZAHL_SCHALTUNGEN][2] = {{REED_1,RELAIS_1}, {REED_2, RELAIS_2}};

Der erste Wert ist der Pin des Reedkontaktes und der zweite Wert der Pin des Relais.

In der Setup Funktion durchlaufe ich das Array um die jeweiligen Pins als Eingang bzw. als Ausgang zu definieren.

void setup() {
  for(int i=0;i<ANZAHL_SCHALTUNGEN;i++){
    //Der Reedkontakt dient als Eingangssignal
    pinMode(schaltungen[i][0], INPUT);
    //Das Relais soll als Ausgangssignal dienen
    pinMode(schaltungen[i][1], OUTPUT);
  }
}

Die Loop Funktion des Sketches sieht nun so ähnlich aus denn nun prüfen wir jeweils ob der Status des Reedkontaktes HIGH also aktiviert ist und diesen Wert weisen wir dem Relais zu. Das ganze lässt sich auch in nur einer Zeile verpacken somit ist der Code sehr übersichtlich.

void loop() {
  for(int i=0;i<ANZAHL_SCHALTUNGEN;i++){
    digitalWrite(schaltungen[i][1], digitalRead(schaltungen[i][0]));  
  }
}

Quellcode

//Reedkontakte
const int REED_1 = 6;
const int REED_2 = 7;

//Relais
const int RELAIS_1 = 8;
const int RELAIS_2 = 9;

//Anzahl der Schaltungen in der Liste
const int ANZAHL_SCHALTUNGEN = 2;

//Liste mit den Schaltungen, 
//erster Wert ist der Reedkontakt, 
//zweiter Wert ist das Relais welches gesteuert werden soll
int schaltungen[ANZAHL_SCHALTUNGEN][2] = {{REED_1,RELAIS_1}, {REED_2, RELAIS_2}};

void setup() {
  for(int i=0;i<ANZAHL_SCHALTUNGEN;i++){
    //Der Reedkontakt dient als Eingangssignal
    pinMode(schaltungen[i][0], INPUT);
    //Das Relais soll als Ausgangssignal dienen
    pinMode(schaltungen[i][1], OUTPUT);
  }
}

void loop() {
  for(int i=0;i<ANZAHL_SCHALTUNGEN;i++){
    digitalWrite(schaltungen[i][1], digitalRead(schaltungen[i][0]));  
  }
}

Video

Ausbaustufe 2

In der zweiten Ausbaustufe wollen wir nun den Code so ändern das wir mit dem Magneten den Reedkontakt aktivieren und wenn dieser wieder deaktiviert wird soll das Relais für eine Zeit x angezogen sein und wieder deaktiviert werden.

Dazu müssen wir unser Mehrdimensionales Array um einen weiteren Wert für das speichern des Status des Reedkontaktes erweitern.

//Reedkontakte
const int REED_1 = 6;
const int REED_2 = 7;

//Relais
const int RELAIS_1 = 8;
const int RELAIS_2 = 9;

//Anzahl der Schaltungen in der Liste
const int ANZAHL_SCHALTUNGEN = 2;

//Liste mit den Schaltungen, 
//erster Wert ist der Reedkontakt, 
//zweiter Wert ist das Relais welches gesteuert werden soll,
//dritter Wert ist der Status des Reedkontaktes,
int schaltungen[ANZAHL_SCHALTUNGEN][3] = {{REED_1,RELAIS_1, 0}, {REED_2, RELAIS_2, 0}};

const int PAUSE = 1000;

void setup() {
  Serial.begin(9600);
  for(int i=0;i<ANZAHL_SCHALTUNGEN;i++){
    //Der Reedkontakt dient als Eingangssignal
    pinMode(schaltungen[i][0], INPUT);
    //Das Relais soll als Ausgangssignal dienen
    pinMode(schaltungen[i][1], OUTPUT);
  }
}

void loop() {
  //Für jeden Wert in dem Mehrdimensionalem Array mache...
  for(int i=0;i<ANZAHL_SCHALTUNGEN;i++){
    //lesen des neuen Status des Reedkontaktes
    int reedStatusNeu = digitalRead(schaltungen[i][0]);
    //lesen des alten Status des Reedkontaktes
    int reedStatusAlt = schaltungen[i][2];  
    //Wenn der Reedkontakt nicht mehr aktiviert ist,
    //jedoch der letzte Status aktiviert war, dann...
    if(reedStatusNeu == 0 && reedStatusAlt == 1){
      //aktiviere Relais
      digitalWrite(schaltungen[i][1], HIGH);  
      delay(PAUSE); //eine kleine Pause von 1 Sek.
      //deaktiviere Relais
      digitalWrite(schaltungen[i][1], LOW);  
      //Status zurücksetzen
      schaltungen[i][2] = 0;
      //Wenn der neue Status des Reedkontaktes aktiviert ist, und
      //der alte Status deaktiviert war dann...
    } else if(reedStatusNeu == 1 && reedStatusAlt == 0){
      //speichern des Status
      schaltungen[i][2] = 1;
      delay(PAUSE); //eine kleine Pause von 1 Sek.
    }    
  }
}

Video

9 thoughts on “Arduino Projekt: Relaiskarte mit Reedkontakten steuern”

  1. Johann Michels sagt:
    23. Februar 2021 um 09:43 Uhr

    Hallo,
    sehr schön erklärt vielen Dank dafür. Ich habe eine frage ist mit diesem Sketch auch möglich mit einem Reedkontakt mehrere Relais zu schalten? Ich benötige das für meine Modellbahn und möchte damit mehreren Kontakten jeweils mehrere Relais ansteuern. Über eine positive Antwort sowie Hilfe wie der Sketch verändert werden müsste würde ich mich sehr freuen.
    Mfg
    Johann

    Antworten
    1. Stefan Draeger sagt:
      23. Februar 2021 um 15:56 Uhr

      Hi,

      du kannst natürlich auch mit jeweils einem Reedkontakt auch mehrere Relaisschalten. Dazu musst du lediglich die Relais je nach Status des Reedkontaktes aktivieren oder deaktivieren (Signal HIGH oder LOW).
      Die Grenzen sind dir hier nur durch die vorhandenen Pins am Microcontroller gesetzt.

      Gruß,

      Stefan Draeger

      Antworten
  2. Kai Wikert sagt:
    27. Februar 2021 um 19:03 Uhr

    vielen Dank
    Super erklärt und für die Schaltung finde ich Super.
    Vielleicht können Sie mir bei der Schaltung Ausbau 2 weiter helfen, so dass nur ein Relais nach den deaktivieren des Reedkontakt noch 5s an bleibt und der andere Kontakt so reagiert wie bei Ausbau 1

    Vielen Dank

    Kai Wikert

    Antworten
    1. Stefan Draeger sagt:
      28. Februar 2021 um 14:05 Uhr

      Hallo Herr Wikert,

      die Schaltung ist sehr identisch ABER der Code wird deutlich anders aufgebaut werden müssen denn man kann die 5 Sekunden nicht mehr mit der Funktion „delay“ lösen.
      Hier muss mit millis geprüft werden ob die Zeit abgelaufen ist (generell eine bessere Lösung).

      Da meine Reedkontakte z.Zt. nicht auffindbar sind nehme ich einfach mal 2 kapazitive Touch Sensoren.
      Der Aufbau ist dann halt nicht mit einem Pull Up oder Pull Down Widerstand aber ich denke es wird dir vielmehr auf den Code ankommen.

      Gruß,

      Stefan Draeger

      Antworten
  3. Ralph Gast sagt:
    17. März 2021 um 17:17 Uhr

    Hallo Herr Draeger,
    wirklich sehr gut erklärt. Ich besitze mehrere 8-Fach Relaisplatinen und würde die gerne für meinen Schattenbahnhof einsetzen. Arduinos habe ich auch mehrere. Lässt sich das mit Arduino realisieren? Ein Zug fährt auf ein leeres Gleis, das Relais schaltet den Fahrstrom ab. Auf dem zweiten Gleis fährt ein Zug ein, das Relais schaltet den Fahrstrom ab und auf dem ersten Gleis wieder ein. Vielen Dank für eine Antwort.
    Gruß
    Ralph Gast

    Antworten
    1. Stefan Draeger sagt:
      18. März 2021 um 08:19 Uhr

      Hallo Ralph,

      ich denke die Schaltung hierzu ist recht einfach denn du musst wenn ich dich richtig verstehe „nur“ die Relais abwechselnd schalten.
      Wie möchtest du erkennen das der Zug auf Gleis X eingefahren ist?

      Gruß,

      Stefan Draeger

      Antworten
  4. Ralph Gast sagt:
    18. März 2021 um 12:07 Uhr

    Hallo Stefan,
    im Prinzip sind es zwei Schaltungen. Die eine schaltet über Reedkontakte die Servos der Weichen. Der zweite Reedkontakt dann den Arduino uns somit die Relais. Hab dazu eine kleine Schaltung entworfen mit Attinys.
    Gruß

    Ralph

    Antworten
  5. Ralph Gast sagt:
    18. März 2021 um 16:23 Uhr

    Hallo Stefan,
    lässt sich das überhaupt mit einem Arduino realisieren eine 8-fach Relaiskarte mit Reedkontakten zu steuern. Für jedes Relais ein Reedkontakt?
    Danke für eine Antwort
    Gruß Ralph

    Antworten
    1. Stefan Draeger sagt:
      23. März 2021 um 10:28 Uhr

      Hi,

      ein Arduino Mega sollte das können, du brauchst für die 8fach Relaiskarte 8 digitale Pins und für die zusätzlichen Reedkontakte auch welche.
      Der Arduino UNO R3 verfügt lediglich über 14 digitale Pins.

      Gruß,

      Stefan Draeger

      Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}