.. note::

    Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci l'esplorazione del Raspberry Pi, Arduino ed ESP32 con altri appassionati.

    **Perché unirti a noi?**

    - **Supporto esperto**: Risolvi i problemi post-vendita e le sfide tecniche con l'aiuto della nostra comunità e del nostro team.
    - **Impara e condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
    - **Anteprime esclusive**: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni esclusive.
    - **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
    - **Promozioni e omaggi festivi**: Partecipa a omaggi e promozioni speciali durante le festività.

    👉 Sei pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!

.. _2.2.8_py:

2.2.8 Modulo Sensore Ultrasonico
=====================================

Introduzione
--------------

Il sensore ultrasonico utilizza ultrasuoni per rilevare con precisione 
gli oggetti e misurare le distanze. Emette onde ultrasoniche e le converte 
in segnali elettronici.

Componenti necessari
------------------------------

In questo progetto avremo bisogno dei seguenti componenti.

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

È sicuramente conveniente acquistare un kit completo, ecco il link:

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

    *   - Nome	
        - ELEMENTI IN QUESTO KIT
        - LINK
    *   - Kit Raphael
        - 337
        - |link_Raphael_kit|

Puoi anche acquistarli separatamente dai link sottostanti.

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

    *   - INTRODUZIONE AI COMPONENTI
        - LINK PER L'ACQUISTO

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

Schema elettrico
---------------------

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


Procedura sperimentale
-------------------------

**Passo 1:** Costruisci il circuito.

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

**Passo 2:** Vai nella cartella del codice.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python/

**Passo 3:** Esegui il file eseguibile.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 2.2.8_Ultrasonic.py

Una volta eseguito il codice, il modulo del sensore ultrasonico rileva la 
distanza tra l'ostacolo davanti e il modulo stesso, quindi il valore della 
distanza verrà stampato sullo schermo.

**Codice**

.. note::

    Puoi **Modificare/Resettare/Copiare/Eseguire/Fermare** il codice qui sotto. Ma prima di farlo, devi andare nel percorso del codice sorgente, come ``raphael-kit/python``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto.


.. 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()

**Spiegazione del Codice**

.. code-block:: python

    def distance():

Questa funzione serve a realizzare la funzionalità del sensore ultrasonico 
calcolando la distanza di rilevamento.

.. code-block:: python

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

Questo codice invia un impulso ultrasonico di 10 µs.

.. code-block:: python

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

Questo ciclo vuoto serve per assicurarsi che, quando viene inviato il 
segnale di trigger, non ci sia un segnale di eco interferente, dopodiché 
viene acquisito il tempo corrente.

.. code-block:: python

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

Questo ciclo vuoto serve per assicurarsi che il passo successivo non venga 
eseguito fino a quando non viene ricevuto il segnale di eco, dopodiché viene 
acquisito il tempo corrente.

.. code-block:: python

    during = time2 - time1

Esegue il calcolo dell'intervallo di tempo.

.. code-block:: python

    return during * 340 / 2 * 100

La distanza viene calcolata in base all'intervallo di tempo e alla velocità 
di propagazione del suono. La velocità del suono nell'aria: 340 m/s.

Immagine del fenomeno
-----------------------------

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