Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauche tiefer in die Welt von Raspberry Pi, Arduino und ESP32 ein – gemeinsam mit Gleichgesinnten.
Warum beitreten?
Expertenunterstützung: Erhalte Hilfe bei technischen Herausforderungen und nach dem Kauf auftretenden Problemen durch unsere Community und unser Team.
Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalte frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezielle Rabatte: Profitiere von exklusiven Preisnachlässen auf unsere neuesten Produkte.
Feierliche Aktionen und Gewinnspiele: Nimm an Verlosungen und saisonalen Aktionen teil.
👉 Bereit, mit uns zu entdecken und zu kreieren? Klicke auf [hier] und werde Teil unserer Community!
2.9 Magnetismus spüren
In dieser Lektion erforschen wir, wie ein Reed-Schalter mit dem Raspberry Pi Pico 2 verwendet wird, um ein Magnetfeld zu erkennen. Ein Reed-Schalter ist ein einfacher elektrischer Schalter, der durch ein Magnetfeld aktiviert wird. Wenn ein Magnet in die Nähe des Schalters kommt, schließen sich die internen Kontakte und vervollständigen den Stromkreis.
Benötigte Komponenten
Für dieses Projekt werden folgende Komponenten benötigt.
Ein komplettes Kit ist besonders praktisch. Hier ist der Link:
Name |
ENTHALTENE TEILE |
LINK |
|---|---|---|
Newton Lab Kit |
450+ |
Alternativ können die Komponenten auch einzeln über die folgenden Links erworben werden.
SN |
KOMPONENTE |
MENGE |
LINK |
|---|---|---|---|
1 |
1 |
||
2 |
Micro-USB-Kabel |
1 |
|
3 |
1 |
||
4 |
Mehrere |
||
5 |
1 (10KΩ) |
||
6 |
1 |
Funktionsweise des Reed-Schalters
Ein Reed-Schalter besteht aus zwei dünnen Metallzungen, die in einer Glasröhre eingeschlossen sind. Diese Zungen bestehen aus ferromagnetischem Material und sind leicht voneinander getrennt. Ohne Magnetfeld bleiben sie getrennt, und der Schalter ist offen. Kommt ein Magnet in die Nähe, magnetisieren sich die Zungen, ziehen sich gegenseitig an und schließen den Stromkreis.
Kein Magnet in der Nähe: Schalter ist offen; der Stromkreis ist unterbrochen.
Magnet in der Nähe: Schalter ist geschlossen; der Stromkreis ist verbunden.
Schaltplan

Standardmäßig ist GP14 auf LOW und wird HIGH, wenn sich ein Magnet in der Nähe des Reed-Schalters befindet.
Der 10K-Widerstand dient dazu, GP14 auf einem stabilen niedrigen Pegel zu halten, wenn sich kein Magnet in der Nähe befindet.
Kein Magnet in der Nähe:
Der Reed-Schalter ist offen.
GP14 ist über den Pull-down-Widerstand mit GND verbunden.
Der GPIO-Pin liest LOW (0).
Magnet in der Nähe:
Der Reed-Schalter ist geschlossen.
GP14 ist über den Reed-Schalter mit 3.3V verbunden.
Der GPIO-Pin liest HIGH (1).
Verdrahtungsdiagramm

Code schreiben
Wir schreiben ein MicroPython-Programm, das erkennt, wenn sich ein Magnet in der Nähe des Reed-Schalters befindet, und eine entsprechende Nachricht ausgibt.
Bemerkung
Öffne die Datei
2.9_feel_the_magnetism.pyausnewton-lab-kit/micropythonoder kopiere den Code in Thonny, dann klicke auf „Run“ oder drücke F5.Stelle sicher, dass der richtige Interpreter ausgewählt ist: MicroPython (Raspberry Pi Pico).COMxx.
import machine
import utime
# Initialisierung von GP14 als Eingangs-Pin
reed_switch = machine.Pin(14, machine.Pin.IN)
while True:
if reed_switch.value() == 1:
print("Magnet detected!")
utime.sleep(1) # Verzögerung, um Mehrfacherkennungen zu vermeiden
Wenn der Code ausgeführt wird, kannst du Folgendes beobachten:
Kein Magnet in der Nähe: Es erscheint keine Meldung.
Magnet annähern: „“Magnet detected!““ erscheint in der Konsole.
Magnet entfernen: Die Meldung wird nicht mehr angezeigt.
Verständnis des Codes
Importiere Module:
import machine: Zugriff auf Hardwarefunktionen.import utime: Zeitbezogene Funktionen.
Initialisiere den Reed-Schalter-Pin:
reed_switch = machine.Pin(14, machine.Pin.IN): Setzt GP14 als Eingangs-Pin.
Hauptschleife:
while True: Startet eine Endlosschleife.if reed_switch.value() == 1: Prüft, ob sich ein Magnet in der Nähe befindet (GPIO-Pin liest HIGH).print("Magnet detected!"): Gibt eine Nachricht aus.utime.sleep(1): Fügt eine Verzögerung hinzu, um wiederholte Meldungen zu vermeiden.
Verwendung von Interrupts für eine effiziente Erkennung
Anstatt den Reed-Schalter ständig in einer Schleife abzufragen, können wir einen Interrupt verwenden, um Änderungen des Schalterzustands effizienter zu erkennen.
Die Verwendung von Interrupts verbessert die Effizienz, indem sie die Notwendigkeit der kontinuierlichen Überprüfung des Reed-Schalters eliminiert und sofort die Handler-Funktion aufruft, wenn das Ereignis eintritt.
Modifizierter Code mit Interrupts: Wenn sich ein Magnet dem Reed-Schalter nähert, erscheint „Magnet erkannt!“. Das Hauptprogramm bleibt frei für andere Aufgaben.
import machine
# Initialisiere GP14 als Eingangs-Pin mit internem Pull-down-Widerstand
reed_switch = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
def magnet_detected(pin):
print("Magnet detected!")
# Richte einen Interrupt für die steigende Flanke (LOW zu HIGH) ein
reed_switch.irq(trigger=machine.Pin.IRQ_RISING, handler=magnet_detected)
def magnet_detected(pin): Diese Funktion wird automatisch aufgerufen, wenn der Interrupt ausgelöst wird.print("Magnet detected!"): Gibt eine Meldung aus, wenn ein Magnet erkannt wird.
reed_switch.irq(trigger=machine.Pin.IRQ_RISING, handler=magnet_detected): Konfiguriert einen Interrupt für den Reed-Schalter-Pin.trigger=machine.Pin.IRQ_RISING: Der Interrupt wird ausgelöst, wenn der Pin von LOW auf HIGH wechselt.handler=magnet_detected: Gibt die Funktion an, die beim Interrupt ausgelöst wird.
Praktische Anwendungen
Sicherheitssysteme: Erkennen, wenn eine Tür oder ein Fenster geöffnet wird.
Positionssensoren: Bestimmen der Position beweglicher Maschinenteile.
Näherungserkennung: Ereignisse auslösen, wenn sich ein magnetisches Objekt nähert.
Weitere Experimente
Steuerung einer LED:
Schließe eine LED an einen anderen GPIO-Pin (z. B. GP15) mit einem geeigneten Widerstand an. Ändere den Interrupt-Handler so, dass die LED eingeschaltet wird, wenn ein Magnet erkannt wird.
import machine reed_switch = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN) led = machine.Pin(15, machine.Pin.OUT) def magnet_detected(pin): led.value(1) # LED einschalten # Interrupt für steigende Flanke setzen reed_switch.irq(trigger=machine.Pin.IRQ_RISING, handler=magnet_detected) # Hauptschleife while True: # LED ausschalten, wenn kein Magnet in der Nähe ist if reed_switch.value() == 0: led.value(0) machine.sleep(100)
Erkennung der Magnetentfernung:
Richte einen weiteren Interrupt für die fallende Flanke ein (wenn der Magnet entfernt wird).
def magnet_removed(pin): print("Magnet removed!") reed_switch.irq(trigger=machine.Pin.IRQ_FALLING, handler=magnet_removed)
Fazit
Die Verwendung eines Reed-Schalters mit dem Raspberry Pi Pico 2 ermöglicht die Erkennung von Magnetfeldern und eröffnet vielfältige Einsatzmöglichkeiten – von Sicherheitssystemen bis hin zu interaktiven Projekten. Das Verständnis der Verdrahtung und der Nutzung von Interrupts verbessert die Effizienz und Reaktionsfähigkeit deiner Programme.
Referenzen
