Sommario:

Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino: 20 passaggi (con immagini)
Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino: 20 passaggi (con immagini)

Video: Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino: 20 passaggi (con immagini)

Video: Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino: 20 passaggi (con immagini)
Video: Сравнение 3 ультразвуковых датчиков 2024, Dicembre
Anonim
Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino
Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino
Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino
Confronto tra i telemetri sonar LV-MaxSonar-EZ e HC-SR04 con Arduino

Trovo che molti progetti (soprattutto i robot) richiedano o possano trarre vantaggio dalla misurazione della distanza da un oggetto in tempo reale. I telemetri Sonar sono relativamente economici e possono essere facilmente interfacciati a un microcontrollore come Arduino.

Questo Instructable confronta due dispositivi di telemetro sonar facili da acquisire, mostrando come collegarli ad Arduino, quale codice è necessario per leggere i valori da essi e come si "misurano" l'uno contro l'altro in diverse situazioni. Da questo, spero che tu possa ottenere informazioni sui pro e contro dei due dispositivi che ti aiuteranno a utilizzare il dispositivo più appropriato nel tuo prossimo progetto.

Volevo confrontare il dispositivo HC-SR04 (bug-eye) estremamente popolare con il dispositivo LV-MaxSonar-EZ meno comune per vedere quando potrei voler usare uno piuttosto che l'altro. Volevo condividere le mie scoperte e la configurazione in modo che tu possa sperimentare con i due e decidere quale utilizzare nel tuo prossimo progetto.

Perché questi due…

Perché l'HC-SR04? L'HC-SR04 "Bug-Eye" è estremamente popolare, per alcuni motivi:

  • È poco costoso - $2 o meno se acquistato all'ingrosso
  • È relativamente facile da interfacciare con
  • Molti, molti, progetti lo usano - quindi è ben noto e ben compreso

Perché LV-MaxSonar-EZ?

  • È molto facile interfacciarsi con
  • Ha un fattore di forma buono/facile da incorporare in un progetto
  • Dispone di 5 versioni che soddisfano diversi requisiti di misurazione (vedi scheda tecnica)
  • È (in genere) molto più preciso e affidabile dell'HC-SR04
  • È conveniente: da $ 15 a $ 20

Inoltre, spero che tu possa trovare pezzi e frammenti nel codice Arduino che ho scritto per il confronto utile nei tuoi progetti, anche al di là delle applicazioni di telemetro.

Ipotesi:

  • Hai familiarità con Arduino e l'IDE Arduino
  • L'IDE Arduino è installato e funziona sulla tua macchina di sviluppo preferita (PC/Mac/Linux)
  • Hai una connessione dall'IDE Arduino al tuo Arduino per caricare ed eseguire programmi e comunicare

Ci sono Instructables e altre risorse per aiutarti in questo, se necessario.

Forniture

  • HC-SR04 Telemetro "Bug-Eye"
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4 - Sto usando un '1', ma tutte le versioni si interfacciano allo stesso modo)
  • Arduino UNO
  • Tagliere senza saldatura
  • Pin Header - 7 pin 90° (per il dispositivo MaxSonar, vedere * sotto per l'utilizzo di 180°)
  • Ponticello per cavo piatto - 5 fili, maschio-maschio
  • Ponticello per cavo piatto - 2 fili, maschio-maschio
  • Ponticello - maschio-maschio
  • Cavo di collegamento - rosso e nero (per l'alimentazione da Arduino a breadboard e da breadboard ai dispositivi)
  • Computer con Arduino IDE e cavo USB per connettersi ad Arduino UNO

* Il MaxSonar non viene fornito con un'intestazione allegata, quindi puoi utilizzare un'intestazione più appropriata per il tuo progetto. Per questo Instructable ho usato un'intestazione a 90° per facilitare il collegamento alla breadboard. In alcuni progetti un'intestazione diritta a 180° potrebbe essere migliore. Includo una foto per mostrare come collegarli in modo da non doverli cambiare. Se preferisci utilizzare un'intestazione a 180 °, avrai bisogno di un ponticello aggiuntivo per cavo a nastro maschio-femmina a 7 fili da collegare come mostra la mia foto.

Repository Git Hub: file di progetto

Passaggio 1: la caccia…

la caccia…
la caccia…

Prima di entrare nei dettagli su come collegare le cose in modo che tu possa fare i tuoi esperimenti con questi due fantastici dispositivi, volevo descrivere alcune cose che spero che questo Instructable ti possa aiutare.

Poiché il dispositivo MaxSonar è meno utilizzato e meno compreso rispetto al dispositivo HC-SR04, volevo mostrare:

  • Come collegare il dispositivo MaxSonar a un microcontrollore (in questo caso un Arduino)
  • Come effettuare misurazioni dalle diverse uscite del dispositivo MaxSonar
  • Confronta l'interfaccia del dispositivo MaxSonar con il dispositivo HC-SR04
  • Metti alla prova la capacità di misurare la distanza di oggetti con superfici diverse
  • Perché potresti scegliere un dispositivo rispetto all'altro (o usarli entrambi in tandem)

Spero che questo Instructable ti aiuti in questa caccia…

Passaggio 2: Per iniziare - Configurazione Arduino-Breadboard

Per iniziare - Configurazione Arduino-Breadboard
Per iniziare - Configurazione Arduino-Breadboard

Se hai realizzato prototipi con Arduino, probabilmente hai già una configurazione Arduino-Breadboard con cui ti senti a tuo agio. Se è così, sono sicuro che puoi usarlo per questo Instructable. In caso contrario, è così che ho impostato il mio: sentiti libero di copiarlo per questo e per i progetti futuri.

  1. Attacco Arduino UNO e una piccola breadboard wireless a un pezzo di plastica da 3-3/8" x 4-3/4" (8,6 x 12,0 cm) con piedini in gomma sul fondo.
  2. Uso un cavo di collegamento 22-AWG rosso e nero per collegare +5V e GND dall'Arduino alla striscia di distribuzione dell'alimentazione della breadboard
  3. Includo un condensatore al tantalio da 10 µF sulla striscia di distribuzione dell'alimentazione a terra per ridurre il rumore di alimentazione (ma questo progetto non lo richiede)

Ciò fornisce una bella piattaforma con cui è facile prototipare.

Passaggio 3: collegare il LV-MaxSonar-EZ

Collegare il LV-MaxSonar-EZ
Collegare il LV-MaxSonar-EZ
Collegare il LV-MaxSonar-EZ
Collegare il LV-MaxSonar-EZ
Collegare il LV-MaxSonar-EZ
Collegare il LV-MaxSonar-EZ

Con un'intestazione a 90° saldata sul dispositivo MaxSonar è facile collegarlo alla breadboard. Il cavo a nastro a 5 pin collega quindi il MaxSonar all'Arduino come mostrato nel diagramma. Oltre al cavo a nastro, utilizzo brevi pezzi di cavo di collegamento rosso e nero dalla guida di distribuzione dell'alimentazione per fornire alimentazione al dispositivo.

Cablaggio:

MaxSonar Arduino Colore
1 (bianco e nero) Potenza-GND Giallo
2 (PW) Digitale-5 Verde
3 (AN) Analog-0 Blu
4 (RX) Digitale-3 Viola
5 (TX) Digitale-2 Grigio
6 (+5) +5 Ferrovia BB-PWR rosso
7 (GND) GND BB-PWR Rail Nero

Nota:

Non lasciare che il numero di connessioni utilizzate in questo Instructable ti impedisca di considerare il MaxSonar per il tuo progetto. Questo Instructable utilizza tutte le opzioni dell'interfaccia MaxSonar per illustrare come funzionano e per confrontarle tra loro e con il dispositivo HC-SR04. Per un determinato uso (usando una delle opzioni di interfaccia) un progetto generalmente utilizzerà uno o due dei pin dell'interfaccia (più alimentazione e massa).

Passaggio 4: collegare l'HC-SR04

L'HC-SR04 in genere viene fornito con un'intestazione a 90° già collegata, quindi è facile collegarla alla breadboard. Il cavo a nastro a 2 pin collega quindi l'HC-SR04 all'Arduino come mostrato nello schema. Oltre al cavo a nastro, utilizzo brevi pezzi di cavo di collegamento rosso e nero dalla guida di distribuzione dell'alimentazione per fornire alimentazione al dispositivo.

HC-SR04 Arduino Colore
1 (VCC) +5 Ferrovia BB-PWR rosso
2 (TRIG) Digitale-6 Giallo
3 (ECO) Digitale-7 arancia
4 (GND) GND BB-PWR Rail Nero

Passaggio 5: collegare il selettore di opzioni 'HC-SR04'

Quando ho iniziato questo progetto il mio intento era semplicemente quello di testare le diverse opzioni di interfaccia del dispositivo MaxSonar. Dopo averlo installato e funzionante, ho deciso che sarebbe stato bello confrontarlo con l'onnipresente dispositivo HC-SR04 (bugeye). Tuttavia, volevo essere in grado di eseguire/testare senza che fosse incluso, quindi ho aggiunto un'opzione/test nel codice.

Il codice controlla un pin di input per vedere se il dispositivo HC-SR04 deve essere incluso nella lettura e nell'output della misurazione.

Nel diagramma, questo è mostrato come un interruttore, ma sulla breadboard uso semplicemente un ponticello (come mostrato nelle foto). Se il filo è collegato a GND, l'HC-SR04 sarà incluso nelle misurazioni. Il codice 'tira su' (rende l'input alto/vero) nell'Arduino, in modo che se non viene abbassato (collegato a GND) l'HC-SR04 non verrà misurato.

Sebbene questo Instructable si sia trasformato in un confronto tra i due dispositivi, ho deciso di lasciarlo in atto per illustrare come potresti includere/escludere diversi dispositivi/opzioni nel tuo progetto.

tagliere Arduino Colore
GND BB-PWR Rail Digitale-12 bianco

Passaggio 6: far funzionare tutto…

Far funzionare tutto…
Far funzionare tutto…
Far funzionare tutto…
Far funzionare tutto…
Far funzionare tutto…
Far funzionare tutto…

Ora che tutto è collegato, è tempo di far funzionare le cose!

Come menzionato in "Ipotesi", non spiegherò come funziona l'IDE di Arduino o come programmare un Arduino (in dettaglio).

Le sezioni seguenti analizzano il codice Arduino incluso in questo progetto.

Decomprimi l'intero archivio in una posizione che utilizzi per lo sviluppo di Arduino. Carica il codice `MaxSonar-outputs.ino` nel tuo IDE Arduino e iniziamo!

Passaggio 7: layout del progetto

Il progetto contiene informazioni sul dispositivo LV-MaxSonar-EZ, lo schema elettrico, un README e il codice Arduino. Lo schema del circuito è in formato Fritzing e un'immagine PNG. Il README è in formato Markdown.

Passaggio 8: introduzione del codice…

In questo Instructable, non posso esaminare ogni aspetto del codice. Mi occupo di alcuni dettagli di alto livello. Ti incoraggio a leggere il commento di primo livello nel codice e ad approfondire i metodi.

I commenti forniscono molte informazioni che non ripeterò qui.

Ci sono alcune cose che voglio sottolineare nel codice 'setup'…

  • Le istruzioni `_DEBUG_OUTPUT` - variabili e #define
  • Definizioni dei "pin" di Arduino utilizzati per l'interfaccia
  • Definizioni dei fattori di conversione utilizzati nei calcoli

Il debug è utilizzato in tutto il codice e mostrerò come può essere attivato/disattivato dinamicamente.

Le "definizioni" vengono utilizzate per i pin e le conversioni di Arduino per semplificare l'utilizzo di questo codice in altri progetti.

Debug in corso…

La sezione 'Debug' definisce una variabile e alcune macro che facilitano l'inclusione di informazioni di debug nell'output seriale su richiesta.

La variabile booleana `_DEBUG_OUTPUT` è impostata su false nel codice (potrebbe essere impostata su true) e viene utilizzata come test nelle macro `DB_PRINT…`. Può essere modificato dinamicamente nel codice (come visto nel metodo `setDebugOutputMode`).

Globali…

Dopo le definizioni, il codice crea e inizializza alcune variabili e oggetti globali.

  • SoftwareSerial (vedi sezione successiva)
  • _loopCount - Utilizzato per generare un'intestazione ogni 'n' righe
  • _inputBuffer - Utilizzato per raccogliere input seriali/terminali per elaborare le opzioni (debug on/off)

Passaggio 9: software seriale Arduino…

Una delle opzioni dell'interfaccia MaxSonar è un flusso di dati seriale. Tuttavia, Arduino UNO fornisce solo una singola connessione dati seriale e questa viene utilizzata/condivisa con la porta USB per comunicare con l'IDE Arduino (computer host).

Fortunatamente, c'è un componente di libreria incluso nell'IDE di Arduino che utilizza una coppia di pin di I/O digitali di Arduino per implementare un'interfaccia di i/o seriale. Poiché l'interfaccia seriale MaxSonar utilizza 9600 BAUD, questa interfaccia "software" è perfettamente in grado di gestire la comunicazione.

Per coloro che utilizzano un Arduino-Mega (o un altro dispositivo che dispone di più porte seriali HW) non esitate a modificare il codice per utilizzare una porta seriale fisica ed eliminare la necessità di SW-Serial.

Il metodo `setup` inizializza l'interfaccia `SoftwareSerial` da utilizzare con il dispositivo MaxSonar. È necessaria solo la ricezione (RX). L'interfaccia è "invertita" per corrispondere all'output del MaxSonar.

Passaggio 10: Codice - Configurazione

Come descritto sopra, il metodo `setup` inizializza l'interfaccia `SoftwareSerial`, così come l'interfaccia seriale fisica. Configura i pin I/O di Arduino e invia un'intestazione.

Passaggio 11: Codice - Ciclo

Il codice `loop` esegue quanto segue:

  • Output di un'intestazione (utilizzata per il debug e il plotter)
  • Attiva il MaxSonar per effettuare una misurazione
  • Leggi il valore MaxSonar Pulse-Width
  • Leggi il valore dei dati seriali di MaxSonar
  • Leggi il valore MaxSonar Analog
  • Controllare l'opzione 'HC-SR04' e, se abilitata:

    Attiva e leggi il dispositivo HC-SR04

  • Emettere i dati in un formato delimitato da tabulazioni che può essere utilizzato dal plotter seriale
  • Attendere che sia trascorso un tempo sufficiente per eseguire un'altra misurazione

Passaggio 12: Codice - Attiva il MaxSonar. Leggi valore PW

Il MaxSonar ha due modalità: 'attivato' e 'continuo'

Questo Instructable utilizza la modalità "attivata", ma molti progetti possono trarre vantaggio dall'utilizzo della modalità "continua" (vedere la scheda tecnica).

Quando si utilizza la modalità 'triggerata', la prima uscita valida proviene dall'uscita Pulse-Width (PW). Successivamente, il resto degli output è valido.

Il `tiggerAndReadDistanceFromPulse` fa pulsare il pin di attivazione sul dispositivo MaxSonar e legge il valore della distanza della larghezza dell'impulso risultante

Si noti che, a differenza di molti altri dispositivi sonar, MaxSonar gestisce la conversione di andata e ritorno, quindi la distanza letta è la distanza dal bersaglio.

Questo metodo ritarda anche abbastanza a lungo perché le altre uscite del dispositivo siano valide (seriale, analogica).

Passaggio 13: codice: lettura del valore seriale MaxSonar

Dopo che il MaxSonar è stato attivato (o quando è in modalità 'continua'), se l'opzione di uscita seriale è abilitata (tramite il controllo 'BW - Pin-1') viene inviato un flusso di dati seriale nella forma "R nnn ", seguito da un CARRIAGE-RETURN '\r'. Il 'nnn' è il valore in pollici dell'oggetto.

Il metodo `readDistanceFromSerial` legge i dati seriali (dalla porta seriale del software) e converte il valore 'nnn' in decimale. Include un timeout di sicurezza, nel caso in cui non venga ricevuto un valore seriale.

Passaggio 14: Codice - Leggi il valore analogico MaxSonar

La porta analogica MaxSonar fornisce continuamente una tensione di uscita proporzionale all'ultima distanza misurata. Questo valore può essere letto in qualsiasi momento dopo l'inizializzazione del dispositivo. Il valore viene aggiornato entro 50 mS dall'ultima lettura della distanza (modalità attivata o continua).

Il valore è (Vcc/512) per pollice. Quindi, con un Vcc dell'Arduino di 5 volt, il valore sarà ~9,8 mV/in. Il metodo `readDistanceFromAnalog` legge il valore dall'ingresso analogico di Arduino e lo converte in un valore "pollici".

Passaggio 15: Codice - Attiva e leggi l'HC-SR04

Sebbene ci siano librerie per leggere l'HC-SR04, ho trovato alcune di esse inaffidabili con vari dispositivi con cui ho testato. Ho trovato il codice che ho incluso nel metodo `sr04ReadDistance` per essere semplice e più affidabile (tanto quanto può essere il dispositivo economico HC-SR04).

Questo metodo imposta e quindi attiva il dispositivo HC-SR04 e quindi attende di misurare l'ampiezza dell'impulso di ritorno. La misurazione della durata dell'impulso include un timeout per affrontare il problema dell'HC-SR04 di una durata dell'impulso molto lunga quando non riesce a trovare un bersaglio. Si presume che un'ampiezza dell'impulso superiore a una distanza target di ~ 3 metri non sia un oggetto o un oggetto che non può essere riconosciuto. Se viene raggiunto il timeout, viene restituito un valore '0' come distanza. Questa 'distanza' (ampiezza dell'impulso) può essere regolata utilizzando i valori #define.

L'ampiezza dell'impulso viene convertita in una distanza di andata e ritorno prima di essere restituita come distanza dall'oggetto.

Passaggio 16: Codice - Supporto per plotter seriale IDE Arduino

Codice - Supporto per plotter seriale Arduino IDE
Codice - Supporto per plotter seriale Arduino IDE

Ora per l'uscita!

Il metodo `loop` attiva la raccolta della misurazione della distanza dai due dispositivi, ma cosa ne facciamo?

Beh, ovviamente lo invieremo in modo che possa essere visualizzato sulla console, ma vogliamo di più!

L'IDE Arduino fornisce anche l'interfaccia Serial Plotter. Lo useremo per fornire un grafico in tempo reale della distanza dal nostro oggetto dalle uscite dei nostri due dispositivi.

Il plotter seriale accetta un'intestazione che contiene etichette di valori e quindi più righe di valori delimitati da tracciare come grafico. Se i valori vengono emessi regolarmente (una volta ogni 'tanti secondi') il grafico fornisce una visualizzazione della distanza dall'oggetto nel tempo.

Il metodo `loop` emette i tre valori dal MaxSonar e il valore dall'HC-SR04 in un formato separato da tabulazioni che può essere utilizzato con il plotter seriale. Una volta ogni 20 righe emette l'intestazione (nel caso in cui il plotter seriale sia abilitato a metà flusso).

Questo permette così di visualizzare la distanza dall'ostacolo e anche di vedere la differenza dei valori restituiti dai due dispositivi.

Passaggio 17: Codice - Debug…

Codice - Debug in corso…
Codice - Debug in corso…
Codice - Debug in corso…
Codice - Debug in corso…

Il debug è una necessità. Come si può rintracciare un problema quando qualcosa non funziona come previsto?

Una prima linea di comprensione è spesso alcuni output di testo "semplici" che possono indicare cosa sta succedendo. Questi possono essere aggiunti al codice quando e dove necessario per rintracciare un problema e quindi rimossi una volta risolto il problema. Tuttavia, l'aggiunta e la rimozione del codice richiede molto tempo e, di per sé, può portare ad altri problemi. A volte è meglio essere in grado di abilitarlo e disabilitarlo dinamicamente lasciando solo il codice sorgente.

In questo Instructable ho incluso un meccanismo per abilitare e disabilitare il debugging delle istruzioni di stampa (output seriale) in modo dinamico dall'input letto dal monitor seriale Arduino IDE (in una versione imminente, il plotter seriale dovrebbe fornire anche questo input).

Il booleano `_DEBUG_OUTPUT` è utilizzato in numerosi metodi di stampa #define che possono essere utilizzati all'interno del codice. Il valore della variabile _DEBUG_OUTPUT viene utilizzato per abilitare o meno la stampa (invio dell'output). Il valore può essere modificato dinamicamente all'interno del codice, come fa il metodo `setDebugOutputMode`.

Il metodo `setDebugOutputMode` viene chiamato dal `loop` in base all'input ricevuto dall'input seriale. L'input viene analizzato per vedere se corrisponde a "debug on/off | true/false" per abilitare/disabilitare la modalità di debug.

Passaggio 18: Conclusione

Spero che questa semplice configurazione hardware e il codice di esempio possano aiutarti a comprendere le differenze tra l'HC-SR04 e i dispositivi LV-MaxSonar-EZ. Entrambi sono molto facili da usare e credo che ognuno abbia i suoi vantaggi. Sapere quando usarne uno piuttosto che un altro può essere determinante per un progetto di successo.

A proposito, ho suggerito un modo molto facile da usare per misurare con precisione la distanza da un oggetto utilizzando LV-MaxSonar-EZ… È possibile utilizzare l'uscita analogica (un filo) e la modalità di misurazione continua per leggere la distanza quando necessario utilizzando il semplice codice in `readDistanceFromAnalog` direttamente dall'ingresso analogico di Arduino. Un filo e (condensato) una riga di codice!

Passaggio 19: connessione MaxSonar alternativa (utilizzando l'intestazione a 180°)

Connessione MaxSonar alternativa (usando un'intestazione a 180°)
Connessione MaxSonar alternativa (usando un'intestazione a 180°)
Connessione MaxSonar alternativa (usando un'intestazione a 180°)
Connessione MaxSonar alternativa (usando un'intestazione a 180°)
Connessione MaxSonar alternativa (usando un'intestazione a 180°)
Connessione MaxSonar alternativa (usando un'intestazione a 180°)

Come ho detto, il MaxSonar non viene fornito con un'intestazione collegata. Quindi, puoi utilizzare qualsiasi connessione sia più appropriata per il tuo progetto. In alcuni casi un'intestazione diritta a 180° potrebbe essere più appropriata. In tal caso, volevo mostrare rapidamente come è possibile utilizzarlo con questo Instructable. Questa illustrazione mostra un MaxSonar con un'intestazione diritta collegata alla breadboard con un cavo a nastro maschio-femmina e quindi collegata all'Arduino come descritto nel resto dell'articolo.

Passaggio 20: codice Arduino

Il codice Arduino si trova nella cartella "MaxSonar-outputs" del progetto in Sonar Range-Finder Comparison

Consigliato: