.. note:: Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati. **Perché unirsi?** - **Supporto esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra community e del nostro team. - **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze. - **Anteprime esclusive**: Ottieni l'accesso anticipato agli annunci di nuovi prodotti e anteprime. - **Sconti speciali**: Goditi sconti esclusivi sui nostri prodotti più recenti. - **Promozioni festive e concorsi**: Partecipa a concorsi e promozioni speciali durante le festività. 👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso! .. _car_ultrasonic: 6. Gioca con il Modulo Ultrasonico ===================================== Nel progetto :ref:`car_ir_obstacle`, i 2 moduli a infrarossi vengono utilizzati per l'evitamento degli ostacoli, ma la distanza di rilevamento del modulo IR è corta, il che potrebbe far sì che l'auto reagisca troppo tardi agli ostacoli. In questo progetto, utilizziamo il modulo ultrasonico per eseguire un rilevamento a lunga distanza, in modo che l'auto possa percepire gli ostacoli da una distanza maggiore e prendere decisioni di conseguenza. **Componenti necessari** Per questo progetto, avremo bisogno dei seguenti componenti. È 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 Starter 3 in 1 - 380+ - |link_3IN1_kit| Puoi anche acquistarli separatamente dai link qui sotto. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK PER L'ACQUISTO * - :ref:`cpn_uno` - |link_Uno_R3_buy| * - :ref:`cpn_l9110` - \- * - :ref:`cpn_tt_motor` - \- * - :ref:`cpn_ultrasonic` - |link_ultrasonic_buy| **Collegamenti** Un modulo sensore ultrasonico è uno strumento che misura la distanza di un oggetto utilizzando onde sonore ultrasoniche. Ha due sonde. Una invia onde ultrasoniche e l'altra riceve le onde, trasformando il tempo di invio e ricezione in una distanza, rilevando così la distanza tra il dispositivo e un ostacolo. .. raw:: html Ora costruisci il circuito secondo il seguente schema. .. list-table:: :header-rows: 1 * - Modulo Ultrasonico - Scheda R3 * - Vcc - 5V * - Trig - 3 * - Echo - 4 * - Gnd - GND .. image:: img/car_6.png :width: 800 **Codice** .. note:: * Apri il file ``6.ultrasonic_module.ino`` nel percorso ``3in1-kit\car_project\6.ultrasonic_module``. * Oppure copia questo codice nell'**IDE di Arduino**. * Oppure carica il codice tramite `Arduino Web Editor `_. .. raw:: html Dopo che il codice sarà caricato con successo, gira l'auto verso il muro. Se la distanza è troppo grande, l'auto avanzerà; se è troppo vicina, arretrerà; se si trova a una distanza di sicurezza, si fermerà. **Come funziona?** Questo progetto si basa sulla distanza letta dal modulo ultrasonico per far muovere l'auto di conseguenza. #. Aggiungi la definizione dei pin per il modulo ultrasonico, ``trigPin`` viene utilizzato per trasmettere l'onda ultrasonica, quindi impostalo su ``OUTPUT``; ``echoPin`` è impostato su ``INPUT`` per ricevere l'onda ultrasonica. .. code-block:: arduino ... const int trigPin = 3; const int echoPin = 4; void setup() { ... //ultrasonic pinMode(echoPin, INPUT); pinMode(trigPin, OUTPUT); } #. Leggi il valore della distanza ottenuto dal modulo ultrasonico: se la distanza è maggiore di 25, fai avanzare l'auto; se la distanza è compresa tra 2 e 10 cm, fai arretrare l'auto; altrimenti (tra 10 e 25) fermati. .. code-block:: arduino void loop() { float distance = readSensorData(); if (distance > 25) { moveForward(200); } else if (distance < 10 && distance > 2) { moveBackward(200); } else { stopMove(); } } #. A proposito della funzione ``readSensorData()``. Il trasmettitore del modulo ultrasonico trasmette un segnale a onda quadra da 10us ogni 2us, e il ricevitore riceve un segnale di livello alto se c'è un ostacolo entro il raggio di rilevamento. Utilizza la funzione ``pulseIn()`` per registrare il tempo dall'invio alla ricezione, dividi per la velocità del suono 340m/s, e poi dividi per 2; il risultato è la distanza tra il modulo e l'ostacolo in cm. .. code-block:: arduino float readSensorData() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2 return distance; } * `pulseIn(pin, value) `_ * ``pin``: il numero del pin di Arduino da cui vuoi leggere l'impulso. Tipi di dati ammessi: int. * ``value``: tipo di impulso da leggere: HIGH o LOW. Tipi di dati ammessi: int. Legge un impulso (HIGH o LOW) su un pin. Ad esempio, se il valore è HIGH, ``pulseIn()`` attende che il pin passi da LOW a HIGH, avvia il conteggio del tempo, poi attende che il pin torni a LOW e ferma il conteggio.