HC-SR04 Sensori a ultrasuoni su scheda Arduino Uno

Posto su

HC-SR04 Sensori a ultrasuoni su scheda Arduino Uno

La lettura in un sensore HC-SR04 su una scheda Arduino è relativamente semplice, ma cosa succede se si desidera leggere in più sensori? Come farlo in modo efficiente? Questo articolo spiega utilizzando un esempio come leggere in modo efficiente in 4 sensori e come espanderlo ulteriormente a più sensori.

Costruisci 4 sensori a ultrasuoni HC-SR04 su una scheda Arduino Uno Costruisci 4 sensori a ultrasuoni HC-SR04 su una scheda Arduino Uno

Cos'è un HC-SR04

L'HC-SR04 è una scheda breakout con sensori a ultrasuoni. Su questo cartello ci sono due oggetti cilindrici, uno dei quali è contrassegnato dalla lettera “T”, che sta per “Transmitter”, che significa “mittente”, mentre l'altro è contrassegnato dalla lettera “R” per “Receiver”, che significa "ricevitore". Il trasmettitore emette un'onda sonora ultrasonica e il ricevitore "ascolta" che questa onda sonora entri in collisione con un oggetto e venga riflessa indietro. Il tempo che intercorre tra la trasmissione e la ricezione indica la distanza dell'oggetto dal sensore. Pipistrelli, delfini, balene e sonar nelle navi funzionano secondo un principio simile, e questo principio viene spesso definito "localizzazione dell'eco".

Scheda breakout HC-SR04 Scheda breakout HC-SR04

Riesci a sentire un'onda sonora ultrasonica

A meno che tu non abbia le orecchie del tuo cane, non puoi sentire le onde sonore ultrasoniche. L'HC-SR04 utilizza un'onda sonora con una frequenza di 40kHz, mentre un orecchio umano può sentire solo 16kHz e le persone più giovani possono sentire fino a 20-22kHz. Molto al di sotto della frequenza di un'onda sonora ultrasonica.

Inoltre, un'onda sonora ultrasonica non è un'onda radio (come le onde di uno smartphone) ed è completamente innocua per la salute.

Come funziona l'HC-SR04

Come accennato in precedenza, l'HC-SR04 emette un suono ultrasonico, che si scontra con un oggetto e ritorna al sensore. Il sensore conta il tempo che intercorre tra l'invio e la ricezione di questo segnale. Se conosci la velocità del suono, puoi calcolare la distanza tra il sensore e l'oggetto. Naturalmente, il suono non viaggia all'infinito e poiché l'onda sonora del sensore è relativamente debole, anche il campo di misurazione è piuttosto limitato. L'HC-SR04 può misurare distanze fino a circa 400 cm (4 m). Anche l'“angolo di visione” o “angolo di misurazione” del sensore non è infinito. Gli oggetti che cadono al di fuori di un angolo di 15° non possono essere rilevati dal sensore. Ecco perché a volte è interessante utilizzare più sensori, che si posizionano in cerchio, ad esempio. In questo modo è possibile aumentare l'angolo di misurazione.

Leggi il sensore

Per leggere l'HC-SR04 è necessario generare un impulso di avvio sul pin "trigger" del sensore. La risposta del sensore apparirà sul suo pin "echo". Entrambi i pin sono collegati ai pin I/O digitali di Arduino .

Grilletto

Per generare un impulso di avvio, è necessario completare i seguenti passaggi

  1. Il pin del trigger deve essere basso per almeno 2µs (microsecondi).
  2. Il pin del trigger deve quindi essere alto per 10 µs
  3. Perno del grilletto in basso

Con Arduino puoi farlo facilmente con il seguente pezzo di codice:

HC-SR04 "Trigger"

Eco

La risposta che compare sull'echo pin del sensore è un impulso la cui durata è pari al tempo che intercorre tra la trasmissione e la ricezione dell'onda sonora ultrasonica, espressa in µs (microsecondi). Una possibilità per misurare un tale impulso su Arduino è con la funzione "pulseIn":

Meet "echo"

Calcola la distanza

Certo, dopo tutto questo conoscete solo il tempo di percorrenza dell'onda sonora, ma questo non significa che conoscete la distanza. Fortunatamente, la velocità del suono è nota e la distanza può essere calcolata con questo:

distanza [m] = velocità_suono [m/s] * tempo [s]

e la velocità del suono è di 343 m/s, quindi

distanza [m] = 343 [m/s] * tempo [s]

Tuttavia, l'HC-SR04 fornisce il tempo in µs, e per un facile conteggio la distanza in cm sarebbe più conveniente, ma con alcuni calcoli la formula può essere regolata per

distanza [cm] = 0,0343 [cm/µs] * tempo [µs]

L'unico problema che rimane ora è che il tempo indicato dall'HC-SR04 è il tempo in cui l'impulso viaggia avanti E indietro, e poiché solo la distanza dall'oggetto è utile, devi solo dividere il tempo per 2:

distanza = 0,0343 * (tempo/2)

Semplice configurazione di prova

Un rapido set-up di prova per testare il funzionamento dell'HC-SR04 può essere realizzato con il seguente schema e codice:

Un sensore HC-SR04 su Arduino Uno Un sensore HC-SR04 su Arduino Uno

Eenvoudige code voor het testen van een HC-SR04 op een Arduino Uno

Multi HC-SR04

Da qui diventa un po' più difficile. Poiché la funzione "pulseIn" mette in pausa il codice e non è sufficientemente precisa, il codice esteso utilizza registri di porta e interruzioni. Se questo suona strano, puoi trovare maggiori informazioni sul sito web dell'autore di questo articolo: http://kunoichi.be/projects/
(il sito è disponibile solo in inglese)

Più sensori

Per utilizzare più sensori, puoi procedere in tre modi:

  1. grilletto separato per sensore; eco separato per sensore
  2. innesco comune; eco separato per sensore
  3. grilletto separato per sensore; eco comune

grilletto separato per sensore; eco separato per sensore

Il modo più semplice, e meno efficiente, è quello di collegare ciascun pin di trigger ed eco di ciascun sensore a un pin separato Arduino .
In altre parole, 2 pin su Arduino per sensore.

innesco comune; eco separato per sensore

Un altro modo è collegare tutti i trigger dei sensori e collegarli a 1 pin su Arduino . Il pin echo di ciascun sensore deve quindi essere collegato a un pin separato su Arduino . Il vantaggio, così come lo svantaggio, è che tutti i sensori inviano la loro risposta contemporaneamente. C'è la possibilità che i sensori interferiscano tra loro e hai anche bisogno di un pin di interruzione separato per ciascun sensore (l' Arduino Uno ne ha solo 2). Potresti usare spilli normali, ma poi la precisione diminuirebbe un po '.

grilletto separato per sensore; eco comune

Se la lettura super veloce non è necessaria, puoi comunque ottenere un'ottima precisione con il terzo metodo e non hai lo svantaggio che i sensori interferiscano l'uno con l'altro.
Ogni pin trigger del sensore è collegato separatamente ad Arduino e tutti i pin echo sono collegati a 1 singolo pin Arduino . Questo pin è chiamato pin di interrupt. Poiché decidi quale trigger è controllato, sai quale è la risposta del sensore al pin dell'eco comune.
Questo è il modo più efficiente per utilizzare più sensori HC-SR04 su una singola scheda Arduino .

schema

Un piccolo svantaggio con il comune metodo del pin echo è che i sensori possono interferire tra loro su questo pin, ma ciò può essere facilmente risolto utilizzando i diodi. La struttura del sistema è la seguente:

Schema 4 sensori HC-SR04 su pin echo comune Schema 4 sensori HC-SR04 su pin echo comune

Il diagramma temporale mostra l'andamento dei segnali.

  1. Viene inviato l'impulso di avvio (trigger) per il sensore 4.
  2. Questo risponde al pin echo.
  3. Viene inviato l'impulso di avvio (trigger) per il sensore 3.
  4. Risponde allo stesso pin echo, ma poiché l'impulso di avvio viene monitorato, è noto da quale sensore proviene la risposta.
  5. Viene inviato l'impulso di avvio (trigger) per il sensore 2.
  6. ...
  7. Ripetere dal passaggio 1

Il resto è letteralmente copia/incolla e può essere facilmente esteso a più (o meno) sensori in questo modo.

Grafico temporale 4 trigger, 1 eco Grafico temporale 4 trigger, 1 eco

Il codice per la lettura dei sensori è il seguente:
(La spiegazione del codice è fornita tramite campi di commento nel codice stesso)

Uitbreidbare code voor het uitlezen van meerdere sensoren

Sebbene questo non sia il metodo più veloce e con lunghe distanze e molti sensori il tempo di consegna può essere relativamente elevato, questo metodo offre alcuni vantaggi

  • è necessario solo 1 pin di interruzione
  • molto facilmente espandibile
  • i sensori non interferiscono tra loro
  • uso ottimale del numero di sensori rispetto ai pin I/O disponibili

Nota sull'alimentazione

Poiché il pin da 5 V su Arduino può fornire una corrente limitata, si consiglia di fornire un'alimentazione aggiuntiva da 5 V CC per alimentare i sensori. Per questo motivo, un "alimentatore Breadbard" è incluso nell'elenco dei componenti, ma in sostanza può essere sostituito da qualsiasi fonte di alimentazione a 5 V CC.

Componenti

I componenti utilizzati in questo progetto sono tutti disponibili su Opencircuit, e sono di seguito elencati:

HC-SR04 Modulo di rilevamento della distanza ad ultrasuoni Esaurito € 2,60 Breadboard 830 punti - bianco disponibile € 3,10 Maglione Uomo-Maschio set 65 pezzi disponibile € 3,00 Alimentatore per tagliere Esaurito € 2,25 Arduino Uno R3 - clone disponibile € 11,60 1N4004 Diodo raddrizzatore 400V 1A - 50 pezzi disponibile € 2,55 Totale € 32,90
Pubblicato da Sito web

Commenti

Webwinkelkeur Kiyoh Trustpilot Opencircuit