.. note::

    Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

    **Warum beitreten?**

    - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
    - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
    - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
    - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
    - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

    👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!

.. _2.1.5_py_pi5:

2.1.5 Neigungsschalter
==================================

Einleitung
------------------

Dies ist ein Kugel-Neigungsschalter mit einer Metallkugel im Inneren. Er wird verwendet, um Neigungen eines kleinen Winkels zu erkennen.

Benötigte Komponenten
-------------------------------

Für dieses Projekt benötigen wir die folgenden Komponenten.

.. image:: ../python_pi5/img/2.1.5_tilt_switch_list.png

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Name	
        - IN DIESEM KIT ENTHALTENE TEILE
        - LINK
    *   - Raphael Kit
        - 337
        - |link_Raphael_kit|

Sie können sie auch separat über die unten stehenden Links kaufen.

.. list-table::
    :widths: 30 20
    :header-rows: 1

    *   - KOMPONENTENVORSTELLUNG
        - KAUF-LINK

    *   - :ref:`cpn_gpio_board`
        - |link_gpio_board_buy|
    *   - :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_tilt_switch`
        - \-

Schaltplan
------------------

.. image:: ../python_pi5/img/2.1.5_tilt_switch_schematic_1.png


.. image:: ../python_pi5/img/2.1.5_tilt_switch_schematic_2.png


Experimentelle Verfahren
--------------------------------

**Schritt 1:** Bauen Sie den Schaltkreis auf.

.. image:: ../python_pi5/img/2.1.5_tilt_switch_circuit.png

**Schritt 2:** Wechseln Sie ins Verzeichnis.

.. raw:: html

   <run></run>

.. code-block:: 

    cd ~/raphael-kit/python-pi5

**Schritt 3:** Führen Sie den Code aus.

.. raw:: html

   <run></run>

.. code-block:: 

    sudo python3 2.1.5_Tilt_zero.py

Stellen Sie den Neigungsschalter vertikal auf, und die grüne LED leuchtet auf. Wenn Sie ihn neigen, wird "Tilt!" auf dem Bildschirm angezeigt und die rote LED leuchtet auf. Stellen Sie ihn wieder vertikal auf, und die grüne LED leuchtet wieder auf.

.. warning::

    Wenn die Fehlermeldung ``RuntimeError: Cannot determine SOC peripheral base address`` angezeigt wird, lesen Sie bitte :ref:`faq_soc`

**Code**

.. note::

    Sie können den unten stehenden Code **modifizieren/zurücksetzen/kopieren/ausführen/stoppen**. Aber zuvor müssen Sie zum Quellcodepfad wie ``raphael-kit/python-pi5`` gehen. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.


.. raw:: html

    <run></run>

.. code-block:: python

   #!/usr/bin/env python3
   from gpiozero import LED, Button

   # Initialize the Button for the tilt sensor and LEDs using GPIO Zero
   TiltPin = Button(17, pull_up=False)  # Tilt sensor connected to GPIO pin 17, pull-up resistor disabled
   green_led = LED(27)  # Green LED connected to GPIO pin 27
   red_led = LED(22)   # Red LED connected to GPIO pin 22

   def detect():
       """
       Detect the tilt sensor state and control the LEDs.
       Turns on the red LED and turns off the green LED when tilted.
       Turns off the red LED and turns on the green LED when not tilted.
       """
       if TiltPin.is_pressed:  # Check if the sensor is tilted
           print('    *************')
           print('    *   Tilt!   *')
           print('    *************')
           red_led.on()   # Turn on red LED
           green_led.off()  # Turn off green LED
       else:  # If the sensor is not tilted
           red_led.off()  # Turn off red LED
           green_led.on()  # Turn on green LED

   try:
       while True:
           # Continuously check the tilt sensor state and update LEDs
           TiltPin.when_pressed = detect
           TiltPin.when_released = detect

   except KeyboardInterrupt:
       # Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully
       pass

**Code-Erklärung**

#. Diese Zeile legt fest, dass das Skript mit Python 3 ausgeführt wird und importiert ``LED`` und ``Button`` aus ``gpiozero`` zur Steuerung von GPIO-Geräten.

   .. code-block:: python

       #!/usr/bin/env python3
       from gpiozero import LED, Button

#. Initialisiert den Neigungssensor, der mit dem GPIO-Pin 17 verbunden ist (mit deaktiviertem Pull-Up-Widerstand), und zwei LEDs, die mit den GPIO-Pins 27 und 22 verbunden sind.

   .. code-block:: python

       # Initialize the Button for the tilt sensor and LEDs using GPIO Zero
       TiltPin = Button(17, pull_up=False)  # Tilt sensor connected to GPIO pin 17, pull-up resistor disabled
       green_led = LED(27)  # Green LED connected to GPIO pin 27
       red_led = LED(22)   # Red LED connected to GPIO pin 22

#. Definiert die Funktion ``detect``, welche den Zustand des Neigungssensors überprüft. Bei Neigung schaltet sie die rote LED ein und die grüne LED aus. Bei keiner Neigung erfolgt das Gegenteil.

   .. code-block:: python

       def detect():
           """
           Detect the tilt sensor state and control the LEDs.
           Turns on the red LED and turns off the green LED when tilted.
           Turns off the red LED and turns on the green LED when not tilted.
           """
           if TiltPin.is_pressed:  # Check if the sensor is tilted
               print('    *************')
               print('    *   Tilt!   *')
               print('    *************')
               red_led.on()   # Turn on red LED
               green_led.off()  # Turn off green LED
           else:  # If the sensor is not tilted
               red_led.off()  # Turn off red LED
               green_led.on()  # Turn on green LED

#. Die Hauptschleife weist die Funktion ``detect`` den Ereignissen ``when_pressed`` und ``when_released`` des Neigungssensors zu. Der ``try-except``-Block behandelt eine Tastaturunterbrechung für einen anmutigen Abbruch.

   .. code-block:: python

       try:
           while True:
               # Continuously check the tilt sensor state and update LEDs
               TiltPin.when_pressed = detect
               TiltPin.when_released = detect

       except KeyboardInterrupt:
           # Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully
           pass

