Lektion 7/31-2 : Erkennung des Magnetfelds mit einem Reed-Schalter | SunFounder Kit
Ein Magnetfeld zu erkennen ist eine der einfachsten und erfüllendsten Möglichkeiten, mit digitalen Eingängen am Arduino zu beginnen. In diesem Projekt baust du einen Magnetfelddetektor mit einem Reed-Schalter — einem winzigen, in Glas eingekapselten Schalter, der seine Kontakte schließt, sobald sich ein Magnet nähert. Da sich der Reed-Schalter genau wie ein Taster verhält (er ist entweder offen oder geschlossen), ist er eine perfekte Einführung in die Funktion digitalRead(), und er zeigt dir außerdem, warum ein Pull-Down-Widerstand wichtig ist und wie der integrierte Eingangs-Pull-Up des Arduino ihn vollständig ersetzen kann.
Sobald das funktioniert, wird dieselbe Schaltung zum Herzstück vieler realer Projekte. Hier sind ein paar praktische Ideen, die du ausprobieren kannst:
- Tür- und Fensteralarm — montiere den Reed-Schalter an einem Rahmen und einen kleinen Magneten an der Tür; der Arduino meldet „offen“, sobald sich der Magnet entfernt.
- Berührungsloser Drehzahlmesser — klebe einen Magneten auf ein rotierendes Rad und zähle die Impulse, um die Drehzahl zu messen.
- Wasser- oder Gaszähler-Ableser — viele Versorgungszähler haben einen magnetischen Impulsausgang, den ein Reed-Schalter erfassen und protokollieren kann.
- Laptop-Deckel- / Gehäusesensor — erkenne, wenn ein Deckel geschlossen wird, um Ruhezustand oder eine Status-LED auszulösen.
- Fahrradtacho — ein Magnet an der Speiche und ein Reed-Schalter an der Gabel liefern dir einen Impuls pro Radumdrehung.
- Manipulationserkennung — verstecke ein Paar aus Magnet und Reed-Schalter in einem Gehäuse, damit du weißt, ob es geöffnet wurde.
Wie ein Reed-Schalter funktioniert
Ein Reed-Schalter ist eine kleine Glaskapsel, die zwei dünne ferromagnetische Blättchen enthält (im Video bei 12:38). In Gegenwart eines Magnetfelds werden die Blättchen zueinander gezogen und berühren sich, wodurch der Stromkreis geschlossen wird. Entferne den Magneten, und die Blättchen federn auseinander und öffnen den Stromkreis wieder. Das ist das ganze Prinzip — es ist ein Schalter ohne beweglichen Knopf, ohne Verschleiß durch Fingerdrücken und ohne Notwendigkeit für physischen Kontakt mit dem Objekt, das du erfasst.
Du kannst dieses Verhalten mit einem Multimeter im Durchgangsmodus überprüfen (im Video bei 13:59): Ohne Magneten in der Nähe zeigt das Messgerät einen offenen Stromkreis an, und sobald sich ein Magnet nähert, ertönt der Summer und das Messgerät liest einen geschlossenen Stromkreis. Da der Schalter elektrisch identisch mit einem Taster ist, sind der Arduino-Code und die Verkabelung dieselben wie bei jedem anderen digitalen Eingang.
Digitale Eingänge und Pull-Widerstände erklärt
Der Arduino liest einen digitalen Pin entweder als HIGH oder LOW. Bei einem 5 V-Board wird alles über etwa 2,2 V als HIGH behandelt und alles unter etwa 1,5 V als LOW (im Video bei 01:49). Das Problem ist, dass ein direkt zwischen einem Pin und 5 V angeschlossener Schalter den Pin schwebend lässt, wenn der Schalter offen ist — er ist mit nichts verbunden, nimmt also Störungen auf und meldet zufällige Werte.
Deshalb wird ein Widerstand verwendet. Zwei Anordnungen funktionieren gleichermaßen gut:
- Pull-down: ein 10 kΩ-Widerstand vom Pin nach Masse. Der Pin liest LOW, wenn der Schalter offen ist, und HIGH, wenn der Schalter den Pin mit 5 V verbindet.
- Pull-up: ein 10 kΩ-Widerstand vom Pin nach 5 V. Der Pin liest HIGH, wenn der Schalter offen ist, und LOW, wenn der Schalter den Pin mit Masse verbindet.
Der Arduino hat außerdem einen internen Pull-up-Widerstand, der per Software mit INPUT_PULLUP aktiviert werden kann (im Video bei 19:52). Dadurch entfällt der externe Widerstand vollständig — der Pin bleibt im Ruhezustand HIGH, und das Schließen des Schalters nach Masse zieht ihn auf LOW. Der Nachteil ist, dass die Logik invertiert wird: Gedrückt (oder Magnet vorhanden) liest jetzt 0 statt 1.
Hardware und Komponenten
- Arduino Uno (oder ein beliebiges kompatibles Board)
- Reedschalter-Modul oder nackter Reedschalter
- 10 kΩ-Widerstand (nur für die Pull-down-Version erforderlich)
- Breadboard und Jumper-Kabel
- Ein kleiner Magnet zum Testen
- USB-Kabel zum Programmieren und für die Stromversorgung
Verdrahtungsanleitung
Der Reedschalter wird genau wie ein Taster verdrahtet. Ein Bein des Reedschalters geht an 5 V, das andere Bein geht an Arduino-Pin 2 und an ein Ende des 10 kΩ-Widerstands. Das andere Ende des Widerstands geht an Masse (im Video bei 14:40). Dies ist eine Pull-down-Konfiguration, sodass der Pin LOW liest, wenn kein Magnet vorhanden ist, und HIGH, wenn ein Magnet den Schalter schließt.
Platzieren Sie den Reedschalter auf dem Breadboard so, dass seine beiden Beine in verschiedenen Reihen sitzen, verbinden Sie den Widerstand von derselben Reihe wie ein Bein nach unten zur Masse-Schiene, führen Sie ein rotes Kabel vom anderen Bein zur 5 V-Schiene und ein grünes Kabel vom Verbindungspunkt des Reedschalters und des Widerstands zu Pin 2 (im Video bei 15:53). Schwarz geht an Masse, Rot geht an 5 V, Grün geht an Pin 2 — dieselbe Farbkonvention, die im gesamten SunFounder-Kit verwendet wird.
Wenn Sie den Widerstand lieber weglassen möchten, verdrahten Sie ein Bein des Reedschalters mit Pin 2 und das andere Bein direkt mit Masse, und aktivieren Sie dann INPUT_PULLUP im Code wie unten beschrieben.
Code-Erklärung
Der Sketch ist absichtlich winzig. Alles, was Sie ändern möchten, befindet sich an zwei Stellen oben in der Datei.
int reedPin = 2;//the pin reed switch is connected to
void setup() {
Serial.begin(9600);
pinMode(reedPin, INPUT);
}
reedPin — ändern Sie diese Zahl, wenn Sie den Reedschalter an einen anderen digitalen Pin verdrahtet haben. Jeder digitale Pin am Uno funktioniert; Pin 2 wird hier nur verwendet, weil er auf dem Breadboard praktisch ist.
Serial.begin(9600) — legt die Geschwindigkeit des seriellen Monitors fest. Wenn Sie diesen Wert ändern, müssen Sie auch die Baudraten-Auswahl im Fenster des seriellen Monitors ändern, sonst sehen Sie Zeichensalat (im Video bei 11:25).
pinMode(reedPin, INPUT) — konfiguriert den Pin als hochohmigen Eingang, damit er die vom Reedschalter und Widerstand eingestellte Spannung erfassen kann. Wenn Sie stattdessen den internen Pull-up verwenden, ändern Sie diese Zeile in pinMode(reedPin, INPUT_PULLUP); und denken Sie daran, dass die Messwerte invertiert werden.
Die Loop liest einfach den Pin und gibt das Ergebnis aus:
void loop() {
Serial.println(digitalRead(reedPin));
delay(10);
}
digitalRead(reedPin) gibt 1 zurück, wenn der Pin HIGH ist, und 0, wenn er LOW ist. Da der Wert direkt an Serial.println() übergeben wird, ist keine Zwischenvariable nötig — der Messwert wird direkt ausgegeben. Bei der Pull-down-Verdrahtung bedeutet 0 „kein Magnetfeld“ und 1 „Magnet erkannt“ (im Video bei 18:31).
delay(10) steuert, wie oft ein Messwert ausgegeben wird. Zehn Millisekunden sind schnell genug, dass Sie den Wert in dem Moment ändern sehen, in dem sich ein Magnet nähert. Wenn Sie eine ruhigere Anzeige bevorzugen, können Sie ihn auf 200 ms erhöhen, aber beachten Sie, dass dies auch die Erkennung verlangsamt (im Video bei 12:01).
Live-Projektdemonstration
Öffnen Sie nach dem Hochladen des Sketches den seriellen Monitor und stellen Sie die Baudrate auf 9600 ein. Wenn kein Magnet in der Nähe ist, füllt sich das Fenster mit Nullen. Bringen Sie einen kleinen Magneten nahe an die Glaskapsel, und die Ausgabe wechselt sofort auf Einsen; ziehen Sie den Magneten weg, und sie kehrt zu Null zurück (im Video bei 17:04). Die Reaktion ist sofort und funktioniert sogar, wenn der Magnet ein oder zwei Zentimeter vom Schalter entfernt gehalten wird.
Wenn Sie stattdessen die Pull-up-Version gebaut haben, ist die Logik umgekehrt: Der Monitor zeigt 1 im Ruhezustand und 0, wenn der Magnet vorhanden ist (im Video bei 22:13). So oder so haben Sie jetzt einen zuverlässigen, berührungslosen Magnetfelddetektor, der fast nichts kostet und in jede der am Anfang dieses Artikels aufgeführten Projektideen eingebaut werden kann.
Die Tasterversion derselben Lektion zum digitalen Lesen wird separat in Lektion 7/31: Digitales Lesen eines Tasters, Erkennung eines Magnetfelds SunFounder Kit | Robojax behandelt.
Verwandte Projekte aus diesem Video
Kapitel
- [00:00] Einführung: zwei Beispiele für digitales Lesen
- [01:33] Was digitales Lesen und HIGH/LOW bedeuten
- [02:46] Wie ein Tastschalter funktioniert
- [03:25] Theorie zu Pull-up- und Pull-down-Widerständen
- [05:18] Verkabelung des Tasters auf dem Steckbrett
- [08:21] Öffnen und Erklären des Taster-Sketches
- [10:55] Hochladen und Testen des Taster-Beispiels
- [12:38] Einführung des Reed-Schalters und Testen mit einem Multimeter
- [14:40] Verkabelung des Reed-Schalters mit Pin 2
- [16:46] Testen des Reed-Schalters mit einem Magneten
- [17:19] Erklären des Reed-Schalter-Sketches
- [19:45] Verwendung von INPUT_PULLUP ohne externen Widerstand
Bilder
/*
* Lesson 7/31-2: Digital read, working with reed switch
Download and resource page https://robojax.com/RJT590
watch video tutorial https://www.youtube.com/watch?v=yyJrqFKn-X4
* written/updated by Ahmad Shamshiri www.Robojax.com
* Dec 12, 2022
*
*/
int reedPin = 2;//the pin reed switch is connected to
void setup() {
Serial.begin(9600);
pinMode(reedPin, INPUT);
}
void loop() {
Serial.println(digitalRead(reedPin));
delay(10);
}
Common Course Links
Common Course Files
Dinge, die Sie vielleicht brauchen
-
AmazonBuy reed switch from Amazonamzn.to
-
Amazon
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
eBayBuy reed switch from eBayebay.us
-
AliExpressBuy reed switch from AliExpresss.click.aliexpress.com
Ressourcen & Referenzen
-
DokumentationDokumentation für das SunFounder 3 in 1 IoT/Smarte Auto/Lernkitdocs.sunfounder.com
-
ExternKaufe das 3-in-1 Smart Car Lernkit von SunFounder.sunfounder.com
Dateien📁
Arduino-Bibliotheken (zip)
-
SunFounder 3-in-1 Smart Car Lernkit Quellcode
3in1-kit-main-v2.zip12.80 MB
|||Benutzerhandbuch
-
SunFounder 3-in-1 Arduino Smart Car MontageanleitungDieses Dokument zeigt die Schritt-für-Schritt-Montage des SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB