Articles

Come utilizzare un sensore di distanza ad ultrasuoni HC-SR04 con Arduino

Il HC-SR04 è un poco costoso, facile da usare sensore di distanza ad ultrasuoni, con una gamma di 2 a 400 cm. È comunemente usato in ostacoli che evitano robot e progetti di automazione. In questo tutorial, imparerai come funziona il sensore e come usarlo con Arduino.

Ho incluso 5 esempi con uno schema elettrico e il codice in modo da poter iniziare a sperimentare con il sensore., Per prima cosa esamineremo un esempio che non utilizza una libreria Arduino. Successivamente, ti mostrerò come puoi usare la libreria NewPing per creare un codice più compatto.

I sensori di distanza / prossimità ultrasonici economici sono ottimi, ma in alcuni progetti potrebbe essere necessario un sensore impermeabile come il JSN-SR04T o un sensore IR che non sia influenzato dalle variazioni di temperatura.,on

20×4 character I2C LCD (optional) × 1 Amazon
AliExpress DHT11 sensor (optional) × 1 Amazon

Software

Arduino IDE

Makerguides.,com è un partecipante al programma Amazon Services LLC Associates, un programma di pubblicità di affiliazione progettato per fornire un mezzo per i siti per guadagnare commissioni pubblicitarie pubblicizzando e collegando ai prodotti su Amazon.com.

Come funziona un sensore di distanza ad ultrasuoni?

Sensori ad ultrasuoni funzionano emettendo onde sonore con una frequenza che è troppo alta per un essere umano a sentire. Queste onde sonore viaggiano attraverso l’aria con la velocità del suono, circa 343 m/s., Se c’è un oggetto davanti al sensore, le onde sonore vengono riflesse indietro e il ricevitore del sensore ad ultrasuoni le rileva. Misurando quanto tempo è passato tra l’invio e la ricezione delle onde sonore, è possibile calcolare la distanza tra il sensore e l’oggetto.

Sensori di distanza ad ultrasuoni principio di funzionamento. Fonte: https://www.maxbotix.com/

A 20°C, la velocità del suono è di circa 343 m/s o 0.034 cm/µs., Diciamo che il tempo tra l’invio e la ricezione delle onde sonore è di 2000 microsecondi. Se moltiplichi la velocità del suono per il momento in cui le onde sonore hanno viaggiato, ottieni la distanza percorsa dalle onde sonore.

Distanza = Velocità x Tempo

Ma questo non è il risultato che stiamo cercando. La distanza tra il sensore e l’oggetto è in realtà solo la metà di questa distanza perché le onde sonore viaggiato dal sensore all’oggetto e indietro dall’oggetto al sensore. Quindi è necessario dividere il risultato per due.,

a Distanza (cm) = Velocità del suono (cm/µs) × Tempo (µs) / 2

E così, per esempio diventa:

a Distanza (cm) = 0.0343 (cm/µs) × 2000 (µs) / 2 = 34,3 cm

dipendenza dalla Temperatura della velocità del suono

La velocità del suono in realtà dipende fortemente dalla temperatura e in misura minore grado di umidità dell’aria. Wikipedia afferma che la velocità del suono aumenta con circa 0,6 m/s per grado Celsius., Per la maggior parte dei casi a 20°C è possibile utilizzare solo 343 m/s, ma se si desidera ottenere una lettura più accurata, è possibile calcolare la velocità del suono con la seguente formula:

V (m/s) = 331.3 + (0.606 × T)

V = Velocità del suono (m/s)
T = Temperatura dell’Aria (°C)

Questa formula non prevede l’umidità dal suo effetto sulla velocità del suono, è solo molto piccola.

Di seguito puoi trovare un tutorial su come utilizzare un sensore di temperatura e umidità DHT11 per calibrare la velocità del suono e ottenere una lettura più accurata della distanza con HC-SR04.,

Come funziona HC-SR04

Nella parte anteriore del sensore HC-SR04, è possibile trovare due cilindri d’argento (trasduttori ad ultrasuoni), uno è il trasmettitore delle onde sonore e l’altro è il ricevitore. Per consentire al sensore di generare una raffica sonora, è necessario impostare il pin Trig alto per almeno 10 µs. Il sensore crea quindi una raffica di 8 cicli di ultrasuoni a 40 kHz.

Questo scoppio sonico viaggia alla velocità del suono e rimbalza indietro e viene ricevuto dal ricevitore del sensore. Il pin dell’Eco emette quindi il tempo in cui le onde sonore hanno viaggiato in microsecondi.,

È possibile utilizzare la funzione pulseIn() nel codice Arduino per leggere la lunghezza dell’impulso dal pin Echo. Successivamente, è possibile utilizzare la formula sopra menzionata per calcolare la distanza tra il sensore e l’oggetto.,ncy

40 kHz campo di Misura 2 – 400 cm Risoluzione 3 mm Misurazione dell’angolo 15 gradi Trigger segnale di ingresso 10 µs impulso alto Costo Controllare il prezzo e ‘

Per ulteriori informazioni è possibile controllare la scheda tecnica qui di seguito:

il Cablaggio di Collegamento HC-SR04 per Arduino UNO

Lo schema qui sotto mostra come collegare il HC-SR04 sensore per Arduino.,

HC-SR04 con Arduino schema di cablaggio

Gli esempi di codice seguente utilizza pin digitale 2 e 3 per il trigger e l’eco pin rispettivamente, ma naturalmente è possibile modificare qualsiasi dispositivo digitale che si desidera.,C-SR04 Connections

HC-SR04 Arduino
VCC 5 V
Trig Pin 2
Echo Pin 3
GND GND

Example code for HC-SR04 with Arduino

Now that you have wired up the sensor it is time to connect the Arduino to the computer and upload some code., Puoi caricare il seguente codice di esempio sul tuo Arduino usando l’IDE Arduino. Successivamente, ti spiegherò come funziona il codice.

Come funziona il codice

Innanzitutto, vengono definiti il pin del trigger e il pin dell’eco. Li chiamo trigPineEchoPin. Il pin di trigger è collegato al pin digitale 2 e il pin echo al pin digitale 3 su Arduino.

L’istruzione#define viene utilizzata per dare un nome a un valore costante., Il compilatore sostituirà qualsiasi riferimento a questa costante con il valore definito quando il programma viene compilato. Quindi ovunque tu menzionitrigPin, il compilatore lo sostituirà con il valore 2 quando il programma viene compilato.

// Define Trig and Echo pin:#define trigPin 2#define echoPin 3

Successivamente ho definito due variabili:durationedistance. Durata memorizza il tempo tra l’invio e la ricezione delle onde sonore. La variabile distanza viene utilizzata per memorizzare la distanza calcolata.,

// Define variables:long duration;int distance;

Nelsetup(), si inizia impostando il trigPin come output e l’echoPin come input. Successivamente inizializzi la comunicazione seriale a una velocità di trasmissione di 9600. Successivamente verrà visualizzata la distanza misurata nel monitor seriale, a cui è possibile accedere con Ctrl+Maiusc+M o Strumenti > Monitor seriale. Assicurarsi che anche la velocità di trasmissione sia impostata su 9600 nel monitor seriale.

Nel loop(), si attiva il sensore impostando il trigPin ALTO per 10 µs., Si noti che per ottenere un segnale pulito si inizia cancellando il trigPin impostandolo BASSO per 5 microsecondi.

Successivamente, è necessario leggere la lunghezza dell’impulso inviato dall’echoPin. Io uso la funzionepulseIn() per questo. Questa funzione attende che il pin vada dal BASSO verso l’ALTO, avvia la temporizzazione, quindi attende che il pin si abbassi e interrompe la temporizzazione.

Dopo di che, è possibile calcolare la distanza utilizzando la formula menzionata nell’introduzione di questo tutorial.

Infine, la distanza calcolata viene stampata nel monitor seriale.,

Codice di esempio HC-SR04 con Arduino e libreria NewPing

La libreria NewPing scritta da Tim Eckel può essere utilizzata con molti sensori di distanza ad ultrasuoni. L’ultima versione di questa libreria può essere scaricata qui su bitbucket.org. Potresti notare che il codice sottostante, che utilizza la libreria NewPing, è molto più breve del codice che abbiamo usato prima. Oltre a ciò, la libreria NewPing include alcune altre caratteristiche interessanti. Ti consente di impostare una distanza massima da leggere, non tarderà per un secondo intero quando non viene ricevuta alcuna eco e ha un filtro mediano incorporato.,

Puoi installare la libreria andando su Sketch>Includi Libreria> Aggiungi .Libreria ZIP nell’IDE Arduino.

La libreria include alcuni esempi che puoi usare, ma dovrai modificarli per adattarli alla tua configurazione hardware. Ho incluso un codice di esempio modificato di seguito che può essere utilizzato con la stessa configurazione di cablaggio di prima.

È inoltre possibile utilizzare distance = sonar.ping_cm() o distance = sonar.ping_in() che restituisce la distanza misurata in centimetri interi o pollici., Con questa funzione non è necessario eseguire una misurazione della durata e calcolare la distanza.

Interfaccia dei sensori ultrasonici in modalità a 3 pin

La libreria NewPing semplifica anche l’interfaccia con i sensori ultrasonici utilizzando solo 1 pin I / O. Questo può essere utile se si dispone di pochissimi pin I / O disponibili o se si desidera utilizzare un sensore a ultrasuoni a 3 pin come il Ping Parallax.

Per creare una configurazione a 3 pin (GND, 5V e SIG) è necessario collegare sia il pin trigger che il pin echo allo stesso pin digitale su Arduino., Nel codice, l’unica cosa che devi cambiare è la riga 6-7 e definire lo stesso pin sia per il trigPin che per l’echoPin. Ad esempio pin digitale 2.

//Define Trig and Echo pin#define trigPin 2#define echoPin 2

Come usare il filtro digitale ping_median ()

La cosa principale che mi piace della libreria NewPing è che ha un filtro mediano incorporato. Questo filtro può migliorare notevolmente la precisione delle letture HC-SR04. La funzioneping_median() prende molte misure di durata in una riga, getta via le letture fuori intervallo e quindi fa la media di quelle rimanenti., Per impostazione predefinita ci vorranno 5 letture, ma è possibile specificare quanti dovrebbe prendere. Sostituire la linea 19 con le linee sottostanti.

int iterations = 5;duration = sonar.ping_median(iterations);

Esempio di codice HC-SR04 con I2C LCD e Arduino

Per visualizzare la distanza misurata su un 2004 o 1602 I2C LCD, tutto quello che dovete fare è effettuare le seguenti connessioni e caricare il codice qui sotto. Il sensore HC-SR04 è collegato allo stesso modo di prima.

HC-SR04 con Arduino e I2C LCD schema elettrico.,

I2C LCD Connections

I2C LCD Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

If you are not using an Arduino Uno, the SDA and SCL pins can be at a different location., Un Arduino UNO con il layout R3 (piedinatura 1.0), ha anche le intestazioni dei pin SDA (linea dati) e SCL (linea orologio) vicino al pin AREF. Controlla la tabella qui sotto per maggiori dettagli.,f43445″>

Arduino Uno A4 A5 Arduino Nano A4 A5 Arduino Micro 2 3 Arduino Mega 2560 20 21 Arduino Leonardo 2 3 Arduino Due 20 21
I2C pin locations for different Arduino boards

The code uses the LiquidCrystal_I2C library, which you can download here on GitHub., Assicurati di avere questa libreria esatta installata! Include anche il filo.libreria h, che consente di comunicare con i dispositivi I2C. Questa libreria dovrebbe venire preinstallata con l’IDE Arduino.

Se vuoi saperne di più su come controllare un LCD I2C con Arduino, puoi controllare il tutorial completo qui.

  • Come controllare un carattere I2C LCD con Arduino

Si noti che ho usato un display LCD 20 x 4. Se si dispone di un LCD di dimensioni diverse (16 x 2 è anche comune) è necessario modificare la riga 20 in LiquidCrystal_I2C lcd(0x27,16,2);., Se il tuo LCD non ha l’indirizzo I2C predefinito, 0x27, controlla il tutorial I2C completo in cui spiego come puoi scoprire qual è l’indirizzo.

Codice di esempio HC-SR04 con sensore di temperatura DHT11 e Arduino

Come accennato in precedenza, la velocità del suono dipende fortemente dalla temperatura dell’aria. Se si desidera misurare lunghe distanze (3-4 m) può essere una buona idea aggiungere un sensore di temperatura e umidità DHT11 o DHT22 alla configurazione. Ciò ti consentirà di calibrare la velocità del suono in tempo reale e quindi aumentare la precisione delle tue misurazioni.,

Aggiungere un sensore DHT11 è davvero semplice. Lo schema elettrico qui sotto mostra quali connessioni è necessario effettuare. Nota che sto usando un DHT11 con una breakout board, quindi ho solo bisogno di collegare 3 pin. Assicurati di controllare l’etichetta del sensore, l’ordine dei pin può essere diverso a seconda del produttore. Il sensore HC-SR04 è collegato allo stesso modo di prima.

HC-SR04 con Arduino e DHT11 schema elettrico.,

DHT11 Connections

DHT11 Arduino
VCC (+) 5 V
Signal (s) Pin 4
GND (-) GND

The code below uses the Adafruit DHT Humidity & Temperature Sensor library which you can download here on GitHub., Questa libreria funziona solo se hai anche la libreria Adafruit_Sensor installata, che è disponibile anche su GitHub. È inoltre possibile scaricare le due librerie facendo clic sui pulsanti qui sotto:

È possibile fare clic sul pulsante nell’angolo in alto a destra del campo codice per copiare il codice.

Esempio di codice HC-SR04 con DHT11 e I2C LCD

HC-SR04 con Arduino, DHT11 e I2C LCD schema elettrico.

Il codice sottostante può essere utilizzato per combinare tutti e 3 gli esempi precedenti., Visualizza sia la temperatura, la velocità del suono e la distanza misurata sul display LCD.

HC-SR04 Dimensioni

Di seguito sono riportate le dimensioni del sensore ad ultrasuoni HC-SR04. Ho notato che ci sono alcune piccole differenze tra i produttori, quindi consiglio di ricontrollare il proprio sensore.

HC-SR04 Dimensioni

HC-SR04 CAD

Ho creato disegni CAD di base del sensore ad ultrasuoni HC-SR04 che è possibile scarica qui sotto.,

Conclusione

In questo articolo, vi ho mostrato come funziona il sensore di distanza ad ultrasuoni HC-SR04 e come è possibile utilizzarlo con Arduino. Spero che tu l’abbia trovato utile e informativo. Se l’hai fatto, si prega di condividere con un amico che ama anche l’elettronica!

Progetto personale: Un paio di mesi fa ho realizzato un’installazione interattiva a parete con alcuni amici. Abbiamo usato circa 30 sensori di distanza ad ultrasuoni per rilevare le persone che camminano davanti al muro. Il muro includeva luci ed effetti sonori che cambiavano a seconda di quanto le persone fossero lontane.,

Foto: Guus Schoonewille

mi piacerebbe sapere quali progetti avete intenzione di costruire (o hanno già costruito) con l’HC-SR04 sensore di distanza. Se avete domande, suggerimenti o se si pensa che le cose mancano in questo tutorial, si prega di lasciare un commento in basso.