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
- 1× Arduino Uno Alternativ ein kompatibler Uno-Nachbau.
- 1× Reed-Kontakt (Schließer) Normally Open (NO), ohne Polung.
- 1× Kleiner Magnet Zum Auslösen des Reed-Kontakts.
- 1× Breadboard
- 2× Jumper-Kabel Es werden mindestens zwei Kabel benötigt; passend zum verwendeten Reed-Kontakt wählen.
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.

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.