.. include:: /index.rst :start-after: start_hello_message :end-before: end_hello_message .. _py_touch: 2.5 Berührungsschalter-Modul ================================ **Einführung** In diesem Projekt untersuchen wir die Verwendung eines Berührungsschalter-Moduls (Touch Switch Module). Dieses Bauteil ersetzt herkömmliche mechanische Schalter und bietet Vorteile wie präzise Steuerung, hohe Berührungsempfindlichkeit und minimalen mechanischen Verschleiß. Berührungsschalter werden häufig in modernen Geräten und Haushaltsgeräten eingesetzt, bei denen Zuverlässigkeit und einfache Bedienung wichtig sind. ---------------------------------------------- **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_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_led` - |link_led_buy| * - :ref:`cpn_touch_switch` - |link_touch_buy| * - :ref:`cpn_fusion_hat` - \- * - Raspberry Pi - \- ---------------------------------------------- **Schaltplan** Das folgende Schaltbild zeigt, wie das Berührungsschalter-Modul mit dem Raspberry Pi und den LEDs verbunden wird: .. image:: img/fzz/2.1.3_sch.png :width: 100% :align: center ------------------------------------ **Verdrahtungsdiagramm** Folgen Sie diesen Schritten, um die Schaltung aufzubauen: 1. Verbinden Sie den Ausgangspin des Berührungsschalter-Moduls mit GPIO17. 2. Verbinden Sie die Anode von LED1 über einen geeigneten Widerstand mit GPIO22 und die Anode von LED2 über einen Widerstand mit GPIO27. 3. Verbinden Sie die Kathoden beider LEDs sowie den GND-Pin des Berührungsschalters mit GND. .. image:: img/fzz/2.1.3_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.5_TouchSwitch.py Dieses Python-Skript verwendet einen Berührungssensor, um zwei LEDs zu steuern, die mit dem Raspberry Pi verbunden sind. Beim Ausführen passiert Folgendes: 1. **Berührungssensor berührt**: - Gibt „You touch it!“ in der Konsole aus. - Schaltet LED1 (verbunden mit GPIO-Pin 22) aus. - Schaltet LED2 (verbunden mit GPIO-Pin 27) ein. 2. **Berührungssensor nicht berührt**: - LED1 wird eingeschaltet. - LED2 wird ausgeschaltet. 3. Das Programm überwacht kontinuierlich alle 0,5 Sekunden den Zustand des Berührungssensors und passt die LEDs entsprechend an. 4. Das Skript läuft unbegrenzt weiter, bis es durch Drücken von ``Ctrl+C`` beendet wird. ---------------------------------------------- **Code** Der folgende Python-Code steuert zwei LEDs basierend auf dem Zustand des Berührungsschalter-Moduls: .. 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 touch sensor (Button) on GPIO pin 17 touch_sensor = 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 touch sensor and control LEDs accordingly while True: if touch_sensor.value() == 1: # Check if the touch sensor is pressed print('You touch it!') # Output message indicating sensor activation led1.off() # Turn off LED1 led2.on() # Turn on LED2 else: # If the sensor is not pressed led1.on() # Turn on LED1 led2.off() # Turn off LED2 sleep(0.5) # Pause for 0.5 seconds before rechecking the sensor state except KeyboardInterrupt: # Handle a keyboard interrupt (Ctrl+C) for a clean exit from the loop pass ---------------------------------------------- **Code verstehen** 1. **Bibliotheken importieren** Die ``fusion_hat``-Bibliothek wird verwendet, um die GPIO-Steuerung zu vereinfachen, und die Funktion ``sleep`` stellt eine Verzögerungsfunktion bereit. .. code-block:: python from fusion_hat.pin import Pin, Mode, Pull from time import sleep # Importiert sleep für Verzögerungen 2. **Initialisierung der Komponenten** Der Berührungssensor wird als Eingabe auf GPIO17 konfiguriert, und zwei LEDs werden auf GPIO22 und GPIO27 initialisiert. .. code-block:: python # Initialisiere den Berührungssensor (Button) an GPIO-Pin 17 touch_sensor = Pin(17, mode=Mode.IN, pull=Pull.DOWN) # Initialisiere LED1 an GPIO-Pin 22 led1 = Pin(22,mode=Mode.OUT) # Initialisiere LED2 an GPIO-Pin 27 led2 = Pin(27,mode=Mode.OUT) 3. **Hauptschleife** Das Programm überprüft kontinuierlich den Zustand des Berührungsschalter-Moduls. Wenn der Sensor berührt wird, schaltet sich LED2 ein und LED1 aus; andernfalls ist LED1 eingeschaltet und LED2 ausgeschaltet. .. code-block:: python while True: if touch_sensor.value() == 1: led1.off() led2.on() else: led1.on() led2.off() sleep(0.5) 4. **Interrupt-Behandlung** Ein ``try-except``-Block sorgt dafür, dass das Programm sauber beendet wird, wenn ein Tastaturabbruch (Ctrl+C) erfolgt. .. code-block:: python except KeyboardInterrupt: pass ---------------------------------------------- **Fehlerbehebung** 1. **Keine Reaktion des Berührungssensors** - **Ursache**: Falsche Verdrahtung oder falsche GPIO-Pin-Konfiguration. - **Lösung**: Stellen Sie sicher, dass der Berührungssensor mit GPIO-Pin 17 und GND verbunden ist, und prüfen Sie, ob ``PULL_DOWN`` zur aktiven Konfiguration des Sensors passt. 2. **Sensor wird immer als gedrückt oder nicht gedrückt erkannt** - **Ursache**: Defekter Sensor oder fehlerhafte Verdrahtung. - **Lösung**: Testen Sie den Sensor mit einem Multimeter oder ersetzen Sie ihn. Überprüfen Sie außerdem alle Verbindungen auf lose Kontakte. 3. **LEDs flackern oder verhalten sich unregelmäßig** - **Ursache**: Entprellungsprobleme (Debouncing). - **Lösung**: Fügen Sie eine softwarebasierte Entprellung hinzu, um das Eingangssignal zu stabilisieren: .. code-block:: python if touch_sensor.value() == 1: sleep(0.05) # Entprell-Verzögerung ---------------------------------------------- **Erweiterungsideen** 1. **Berührungsdauer erkennen** Fügen Sie eine Funktion hinzu, die erkennt, wie lange der Berührungssensor gedrückt wird, und passen Sie das LED-Verhalten entsprechend an: .. code-block:: python from time import time start_time = None def handle_touch(): global start_time if touch_sensor.value() == 1: start_time = time() else: duration = time() - start_time print(f"Sensor was touched for {duration:.2f} seconds") 2. **Anpassbare Verzögerung** Ermöglichen Sie dem Benutzer, die Verzögerung dynamisch zu ändern, um die Reaktionsgeschwindigkeit anzupassen: .. code-block:: python delay = float(input("Enter delay in seconds: ")) sleep(delay) ---------------------------------------------- **Fazit** Dieses Projekt zeigt, wie ein Berührungsschalter-Modul mit dem Fusion HAT+ verwendet werden kann, um LEDs zu steuern. Berührungsschalter sind vielseitige und zuverlässige Komponenten und werden häufig in modernen Geräten eingesetzt, um eine nahtlose und intuitive Benutzerinteraktion zu ermöglichen.