.. include:: /index.rst :start-after: start_hello_message :end-before: end_hello_message .. _py_reed: 2.6 Reed-Schalter =========================== **Einführung** In diesem Projekt lernen wir, wie ein Reed-Schalter als Magnetfeldsensor verwendet werden kann, um LEDs zu steuern. Ein Reed-Schalter ist ein elektrischer Schalter, der durch ein äußeres Magnetfeld betätigt wird. Er wird häufig in Sicherheitssystemen, Tür- und Fenstersensoren sowie zur Positionsdetektion eingesetzt. Dieses Projekt zeigt, wie der Zustand eines Reed-Schalters erkannt und mit zwei LEDs visuell dargestellt werden kann. ---------------------------------------------- **Benötigte Komponenten** Für dieses Projekt benötigen Sie die folgenden Komponenten: .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTE - KAUFLINK * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_reed_switch` - |link_reed_switch_buy| * - :ref:`cpn_led` - |link_led_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_fusion_hat` - \- * - Raspberry Pi - \- ---------------------------------------------- **Schaltplan** Die Schaltung verwendet einen Reed-Schalter, der mit einem GPIO-Eingangspin und einem Pull-down-Widerstand verbunden ist. Zwei LEDs sind mit separaten GPIO-Ausgangspins verbunden, jeweils mit einem Strombegrenzungswiderstand. Wenn sich ein Magnet dem Reed-Schalter nähert, schließt sich der Stromkreis und die LED-Anzeigen ändern ihren Zustand. .. image:: img/fzz/2.2.4_sch.png ---------------------------------------------- **Verdrahtungsdiagramm** Folgen Sie diesen Schritten, um die Schaltung aufzubauen: 1. Verbinden Sie die Pins GND und VCC des Reed-Schalters mit GND und 3,3 V. 2. Verbinden Sie den D0-Pin des Reed-Schalters mit GPIO17. 3. Verbinden Sie die Kathode von LED1 über einen 220Ω-Widerstand mit GPIO22. 4. Verbinden Sie die Anode von LED1 mit GND. 5. Verbinden Sie die Kathode von LED2 über einen 220Ω-Widerstand mit GPIO27. 6. Verbinden Sie die Anode von LED2 mit GND. .. image:: img/fzz/2.2.4_bb.png :width: 80% :align: center ---------------------------------------------- **Beispiel ausführen** Der gesamte Beispielcode, der in diesem Tutorial verwendet wird, befindet sich im Verzeichnis ``ai-lab-kit``. Folgen Sie diesen Schritten, um das Beispiel auszuführen: .. raw:: html .. code-block:: shell cd ~/ai-lab-kit/python/ sudo python3 2.6_ReedSwitch.py Dieses Python-Skript erstellt ein Magnetfeld-Erkennungssystem mit einem Reed-Schalter und zwei Status-LEDs. Beim Ausführen passiert Folgendes: 1. Das Skript überwacht kontinuierlich den Zustand des Reed-Schalters. 2. Wenn ein Magnet erkannt wird (Reed-Schalter geschlossen), wird LED1 ausgeschaltet und LED2 eingeschaltet. 3. Wenn kein Magnet erkannt wird (Reed-Schalter offen), wird LED1 eingeschaltet und LED2 ausgeschaltet. 4. Dadurch entsteht eine klare visuelle Anzeige für das Vorhandensein eines Magnetfelds. 5. Das Programm kann jederzeit mit ``Ctrl+C`` sauber beendet werden. ---------------------------------------------- **Code** Der folgende Python-Code überwacht einen Reed-Schalter und steuert zwei LEDs entsprechend seinem Zustand: .. raw:: html .. code-block:: python #!/usr/bin/env python3 from fusion_hat.pin import Pin, Mode, Pull from time import sleep # Import sleep for delay # Initialize reed switch (Button) on GPIO pin 17 reed = Pin(17, mode=Mode.IN, pull=Pull.DOWN) # Initialize LED1 connected to GPIO pin 22 led1 = Pin(22,mode=Mode.OUT) # Initialize LED2 connected to GPIO pin 27 led2 = Pin(27,mode=Mode.OUT) try: # Continuously monitor the state of the reed switch and control LEDs accordingly while True: if reed.value() == 0: # Check if the reed switch is activated led1.off() # Turn off LED1 led2.on() # Turn on LED2 else: # If the sensor is not activated led1.on() # Turn on LED1 led2.off() # Turn off LED2 except KeyboardInterrupt: # Handle a keyboard interrupt (Ctrl+C) for a clean exit from the loop pass ---------------------------------------------- **Code verstehen** 1. **Bibliotheken importieren** Die ``Pin``-Klasse aus der ``fusion_hat``-Bibliothek wird zur Steuerung der GPIO-Pins verwendet, und ``time.sleep`` wird für mögliche Verzögerungsoperationen importiert. .. code-block:: python from fusion_hat.pin import Pin, Mode, Pull from time import sleep # Importiert sleep für Verzögerungen 2. **Initialisierung des Reed-Schalters** Der Reed-Schalter wird an GPIO-Pin 17 als Eingang mit einem Pull-down-Widerstand initialisiert, um einen stabilen LOW-Zustand sicherzustellen, wenn der Schalter geöffnet ist. .. code-block:: python # Initialisiere den Reed-Schalter (Button) an GPIO-Pin 17 reed = Pin(17, mode=Mode.IN, pull=Pull.DOWN) 3. **Initialisierung der LEDs** Zwei LEDs werden an den GPIO-Pins 22 und 27 als Ausgänge initialisiert, um eine visuelle Rückmeldung zu geben. .. code-block:: python # Initialisiere LED1 an GPIO-Pin 22 led1 = Pin(22,mode=Mode.OUT) # Initialisiere LED2 an GPIO-Pin 27 led2 = Pin(27,mode=Mode.OUT) 4. **Hauptüberwachungsschleife** Die ``while True``-Schleife überprüft kontinuierlich den Zustand des Reed-Schalters und steuert entsprechend die LEDs, wodurch ein klares Statusanzeigesystem entsteht. .. code-block:: python while True: if reed.value() == 0: # Prüfen, ob der Reed-Schalter aktiviert ist led1.off() # LED1 ausschalten led2.on() # LED2 einschalten else: # Wenn der Sensor nicht aktiviert ist led1.on() # LED1 einschalten led2.off() # LED2 ausschalten 5. **Behandlung von Tastaturunterbrechungen** Der ``try-except``-Block stellt sicher, dass das Programm sauber beendet wird, wenn es unterbrochen wird. .. code-block:: python except KeyboardInterrupt: # KeyboardInterrupt (Ctrl+C) abfangen und das Programm sauber beenden pass ---------------------------------------------- **Fehlerbehebung** 1. **Reed-Schalter erkennt den Magneten nicht** - **Ursache**: Falsche Magnetpolarität, zu schwaches Magnetfeld oder Verdrahtungsprobleme. - **Lösung**: Drehen Sie den Magneten um, verwenden Sie einen stärkeren Magneten oder überprüfen Sie alle Verbindungen. 2. **LEDs leuchten nicht** - **Ursache**: Falsche GPIO-Pin-Zuweisung, LED-Polarität vertauscht oder zu geringer Strom. - **Lösung**: Überprüfen Sie die Pin-Zuweisungen, stellen Sie sicher, dass die LEDs korrekt gepolt sind (Anode an GPIO), und prüfen Sie die Widerstandswerte. 3. **Instabile Messwerte** - **Ursache**: Elektrisches Rauschen oder ein schwebender Eingang, wenn der Reed-Schalter offen ist. - **Lösung**: Der integrierte Pull-down-Widerstand stabilisiert normalerweise den Eingang, stellen Sie jedoch sicher, dass die Erdung korrekt ist und keine elektromagnetischen Störungen in der Nähe auftreten. ---------------------------------------------- **Erweiterungsideen** 1. **Sicherheitssystem** Erstellen Sie ein einfaches Tür-/Fenster-Alarmsystem, das ausgelöst wird, wenn sich der Magnet vom Reed-Schalter entfernt: .. code-block:: python # Fügen Sie einen Buzzer für einen akustischen Alarm hinzu from fusion_hat import Buzzer, PWM buzzer = Buzzer(PWM('P0')) while True: if reed.value() == 1: # Tür geöffnet (Magnet entfernt) buzzer.play('C6', 0.5) # Alarm auslösen led1.on() # Rote Alarm-LED else: led2.on() # Grüne Status-LED sleep(0.1) 2. **Positionszähler** Zählen Sie, wie oft ein Magnet am Reed-Schalter vorbeikommt, nützlich zur Messung der Rotationsgeschwindigkeit: .. code-block:: python counter = 0 last_state = 0 while True: current_state = reed.value() if last_state == 0 and current_state == 1: # Flanke erkennen counter += 1 print(f"Count: {counter}") last_state = current_state sleep(0.01) # Kurze Verzögerung zur Entprellung 3. **Zwei-Sensor-Erkennung** Verwenden Sie zwei Reed-Schalter, um die Bewegungsrichtung zu erkennen: .. code-block:: python reed1 = Pin(17, Pin.IN, pull=Pin.PULL_DOWN) reed2 = Pin(18, Pin.IN, pull=Pin.PULL_DOWN) # Bewegungsrichtung bestimmen, je nachdem welcher Sensor zuerst auslöst ---------------------------------------------- **Fazit** Dieses Projekt zeigt, wie ein Reed-Schalter als Magnetfeldsensor verwendet werden kann, um LED-Anzeigen zu steuern. Reed-Schalter sind zuverlässige und einfache Bauteile, die häufig in Sicherheitssystemen, Positionssensoren und Näherungserkennung eingesetzt werden. Durch die Kombination von magnetischer Erkennung und visueller Rückmeldung lassen sich intuitive Überwachungssysteme für viele Anwendungen erstellen.