.. 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.2.8_py:

2.2.8 Ultraschallsensor-Modul
==============================

Einführung
--------------

Der Ultraschallsensor verwendet Ultraschall, um Objekte präzise zu erkennen und
Entfernungen zu messen. Er sendet Ultraschallwellen aus und wandelt sie in
elektronische Signale um.

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

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

.. image:: ../img/list_2.2.5.png

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

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

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

Sie können diese auch separat über die untenstehenden Links kaufen.

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

    *   - KOMPONENTENBESCHREIBUNG
        - KAUF-LINK

    *   - :ref:`cpn_gpio_board`
        - |link_gpio_board_buy|
    *   - :ref:`cpn_breadboard`
        - |link_breadboard_buy|
    *   - :ref:`cpn_wires`
        - |link_wires_buy|
    *   - :ref:`cpn_ultrasonic_sensor`
        - |link_ultrasonic_buy|

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

.. image:: ../img/image329.png


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

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

.. image:: ../img/image220.png

**Schritt 2:** Navigieren Sie zum Ordner des Codes.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python/

**Schritt 3:** Führen Sie die ausführbare Datei aus.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 2.2.8_Ultrasonic.py

Nachdem der Code ausgeführt wurde, erkennt das Ultraschallsensor-Modul den Abstand
zwischen dem vorausliegenden Hindernis und dem Modul selbst, dann wird der Abstandswert 
auf dem Bildschirm angezeigt.

**Code**

.. note::

    Sie können den untenstehenden Code **Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen**. Bevor Sie das tun, müssen Sie jedoch zum Quellcodepfad wie ``raphael-kit/python`` navigieren. Nachdem Sie den Code geändert haben, können Sie ihn direkt ausführen, um das Ergebnis zu sehen.


.. raw:: html

    <run></run>

.. code-block:: python

    import RPi.GPIO as GPIO
    import time

    TRIG = 16
    ECHO = 18

    def setup():
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(TRIG, GPIO.OUT)
        GPIO.setup(ECHO, GPIO.IN)

    def distance():
        GPIO.output(TRIG, 0)
        time.sleep(0.000002)

        GPIO.output(TRIG, 1)
        time.sleep(0.00001)
        GPIO.output(TRIG, 0)

        while GPIO.input(ECHO) == 0:
            a = 0
        time1 = time.time()
        while GPIO.input(ECHO) == 1:
            a = 1
        time2 = time.time()

        during = time2 - time1
        return during * 340 / 2 * 100

    def loop():
        while True:
            dis = distance()
            print ('Distance: %.2f' % dis )
            time.sleep(0.3)

    def destroy():
        GPIO.cleanup()

    if __name__ == "__main__":
        setup()
        try:
            loop()
        except KeyboardInterrupt:
            destroy()

**Code-Erklärung**

.. code-block:: python

    def distance():

Diese Funktion wird verwendet, um die Funktion des Ultraschallsensors durch
Berechnung der zurückgegebenen Erkennungsentfernung zu realisieren.

.. code-block:: python

    GPIO.output(TRIG, 1)
    time.sleep(0.00001)
    GPIO.output(TRIG, 0)

Hier wird ein 10µs Ultraschall-Impuls ausgesendet.

.. code-block:: python

    while GPIO.input(ECHO) == 0:
        a = 0
    time1 = time.time()

Diese leere Schleife stellt sicher, dass beim Senden des Auslösesignals
kein störendes Echo-Signal vorhanden ist und erfasst dann die aktuelle Zeit.

.. code-block:: python

    while GPIO.input(ECHO) == 1:
        a = 1
    time2 = time.time()

Diese leere Schleife stellt sicher, dass der nächste Schritt nicht ausgeführt wird,
bis das Echo-Signal empfangen wird, und erfasst dann die aktuelle Zeit.

.. code-block:: python

    during = time2 - time1

Führen Sie die Intervallberechnung aus.

.. code-block:: python

    return during * 340 / 2 * 100

Die Entfernung wird anhand des Zeitintervalls und der Schallgeschwindigkeit
berechnet. Die Schallgeschwindigkeit in der Luft beträgt: 340m/s.

Phänomen-Bild
------------------

.. image:: ../img/image221.jpeg