Zum Inhalt springen
Arduino Tutorials Anfänger · 30 Min. · Aktualisiert am 24. Juli 2026

Magnetschalter am Arduino: den Reed-Kontakt verwenden

Reed-Kontakt Tutorial

Ein Reed-Kontakt ist einer der einfachsten Sensoren überhaupt: ein winziger Schalter, der auf Magnetismus reagiert. Damit erkennst du zum Beispiel, ob eine Tür oder ein Fenster geöffnet ist – oder ob sich die Klappe deines Briefkastens bewegt hat.

In diesem kurzen Tutorial schließt du einen Reed-Kontakt an deinen Arduino Uno an, liest seinen Zustand aus und zählst am Ende sogar, wie oft er ausgelöst wurde.

Was ist ein Reed-Kontakt?

Ein Reed-Kontakt (englisch reed switch) besteht aus zwei dünnen, ferromagnetischen Kontaktzungen, die in einem kleinen, gasgefüllten Glasröhrchen sitzen. Kommt ein Magnet in die Nähe, ziehen sich die beiden Zungen an und berühren sich – der Kontakt schließt. Entfernst du den Magneten wieder, federn sie auseinander und der Kontakt öffnet.

Die meisten Reed-Kontakte sind Schließer (englisch normally open): Ohne Magnet ist der Stromkreis offen, mit Magnet geschlossen. Es gibt auch Öffner und Wechsler – in diesem Tutorial gehe ich vom häufigen Schließer aus.

Zwei Dinge machen den Sensor so praktisch: Er braucht weder eine eigene Stromversorgung noch zusätzliche Elektronik, und er kennt keine Polung – du kannst die beiden Anschlüsse beliebig vertauschen. Ein Reed-Kontakt ist übrigens etwas anderes als ein Hall-Sensor: Der Reed-Kontakt schaltet rein mechanisch, der Hall-Sensor misst das Magnetfeld elektronisch.

Diese Bauteile brauchst du

Affiliate-Links: Kaufst du über diese Links, erhält Pollux Labs eine kleine Provision – für dich ohne Mehrkosten.

Den Reed-Kontakt am Arduino anschließen

Du brauchst nur zwei Kabel. Verbinde einen Anschluss des Reed-Kontakts mit GND und den anderen mit Digitalpin 2. Welcher Anschluss wohin kommt, ist egal – der Sensor hat keine Polung.

Ein Reed-Kontakt am Arduino UNO

Einen Widerstand brauchst du nicht. Stattdessen nutzt du den internen Pull-up-Widerstand des Arduino. Er sorgt dafür, dass der Pin einen sauberen Zustand hat, wenn der Kontakt offen ist: Der Eingang liegt dann auf HIGH. Schließt der Kontakt, verbindet er den Pin mit GND und der Arduino liest LOW. Die Logik ist also umgekehrt, als man zunächst denkt – daran gewöhnst du dich aber schnell.

Der Sketch

Der folgende Sketch liest den Reed-Kontakt aus und gibt im seriellen Monitor aus, ob er offen oder geschlossen ist. Zusätzlich leuchtet die eingebaute LED des Arduino (an Pin 13), solange ein Magnet in der Nähe ist.

// Reed-Kontakt am Arduino Uno auslesen
// Ein Anschluss an Pin 2, der andere an GND

const int reedPin = 2;   // Reed-Kontakt an Digitalpin 2
const int ledPin  = 13;  // die eingebaute LED des Arduino Uno

void setup() {
  Serial.begin(9600);
  pinMode(reedPin, INPUT_PULLUP);  // interner Pull-up: offen = HIGH
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // Bei geschlossenem Kontakt (Magnet in der Nähe) liegt der Pin auf LOW
  bool geschlossen = (digitalRead(reedPin) == LOW);

  if (geschlossen) {
    digitalWrite(ledPin, HIGH);
    Serial.println("Magnet erkannt - Kontakt geschlossen");
  } else {
    digitalWrite(ledPin, LOW);
    Serial.println("Kein Magnet - Kontakt offen");
  }

  delay(200);
}

Lade den Sketch hoch und öffne den seriellen Monitor (9600 Baud). Hältst du nun einen Magneten an den Reed-Kontakt, wechselt die Ausgabe und die LED auf dem Board leuchtet. Der entscheidende Punkt steckt in pinMode(reedPin, INPUT_PULLUP): Ohne diesen internen Pull-up würde der offene Eingang „in der Luft hängen“ und zufällige Werte liefern.

Nur auf das Schließen reagieren und Ereignisse zählen

Im ersten Sketch gibt der Arduino ununterbrochen den aktuellen Zustand aus. Meistens interessiert dich aber nur der Moment, in dem sich etwas ändert – also genau dann, wenn der Kontakt gerade schließt. Dafür merkst du dir den vorherigen Zustand und vergleichst ihn mit dem aktuellen. So kannst du zum Beispiel zählen, wie oft eine Tür geöffnet wurde:

// Reed-Kontakt: nur auf das Schließen reagieren und Ereignisse zählen

const int reedPin = 2;

int letzterZustand = HIGH;  // offen dank Pull-up
int zaehler = 0;

void setup() {
  Serial.begin(9600);
  pinMode(reedPin, INPUT_PULLUP);
}

void loop() {
  int zustand = digitalRead(reedPin);

  // Wechsel von offen (HIGH) auf geschlossen (LOW)?
  if (zustand == LOW && letzterZustand == HIGH) {
    zaehler++;
    Serial.print("Kontakt geschlossen! Anzahl: ");
    Serial.println(zaehler);
  }

  letzterZustand = zustand;
  delay(20);  // einfache Entprellung
}

Der Trick ist die Variable letzterZustand: Nur wenn der Kontakt vorher offen (HIGH) war und jetzt geschlossen (LOW) ist, zählt der Arduino ein Ereignis. Ein dauerhaft anliegender Magnet löst den Zähler also nicht ständig aus. Das kurze delay(20) entprellt den Kontakt – mechanische Schalter „prellen“ beim Schließen kurz, was sonst zu Doppelzählungen führen kann.

Wie geht es weiter?

Mit diesem Wissen baust du im Handumdrehen eine Tür- oder Fensterüberwachung, einen Fahrrad-Tacho (Magnet am Rad, Reed-Kontakt am Rahmen) oder einen Post-Melder für deinen Briefkasten.

Besonders reizvoll wird es mit einem ESP8266 statt eines Arduino Uno: Der kann den Reed-Kontakt sogar aus dem Deep Sleep heraus als Wecksignal nutzen – und dir bei jedem Öffnen der Klappe eine Nachricht aufs Smartphone schicken, während er dazwischen fast keinen Strom verbraucht.

Mehr Projekte für Arduino, ESP32, Raspi & Co
Werde Mitglied bei Pollux Labs und finde dein nächstes Projekt. Zum Beispiel:
Über 100 Maker sind bereits Mitglied bei Pollux Labs
  • ESP32 Internetradio
  • Arduino Wetterstation
  • ESP8266 & Raspi Webserver
  • Automatische Bewässerung
  • ... und viele mehr!