06.07.2023

Telemetro ad ultrasuoni. Descrizione del sensore HC SR04 del telemetro laser di fase fatto in casa


Grazie a tutti. Di recente ho messo le mani su un sensore a ultrasuoni che misura la distanza da un oggetto: US-100. Questo articolo può essere acquistato sui siti di shopping online. Nei mercati della sua città non si trovavano in vendita tali giocattoli. Si è deciso di costruire un circuito basato su tale sensore su un comune microcontrollore AVR ATmega8. Lo scopo del dispositivo è misurare la distanza dall'oggetto, nonché misurare la temperatura. Parlando di temperatura. Il modello US-100 è un trasduttore ultrasonico compensato in temperatura. La velocità di propagazione di un'onda sonora (ultrasonica) a diverse temperature sarà diversa. La misurazione del sensore si basa sul tempo di percorrenza dell'onda sonora dall'oggetto al ricevitore del sensore. La compensazione della temperatura, molto probabilmente non completamente, eliminerà l'errore causato dalla temperatura ambiente.

Quando si considera un circuito stampato, possiamo concludere sulla fonte della misurazione della temperatura: il termometro si trova nel microcircuito o la misurazione della temperatura è dovuta a un diodo situato sul bordo del circuito. Quando si misura la temperatura con un diodo, viene utilizzata la sua giunzione P-N e ciò è dovuto al coefficiente di temperatura della conduttività. Con grande sicurezza, questa è la seconda opzione, poiché quando si lavora con il circuito sottostante, quando si tocca questo diodo con le dita, la temperatura cambia. Pertanto, durante la misurazione, è meglio cercare di non toccare il sensore con le mani per ottenere dati sulla distanza più accurati.

Per la misurazione, il sensore utilizza 2 testine, simili a un grande microfono oa un piccolo altoparlante. In sostanza, è entrambe le cose. Una delle teste emette un'onda ultrasonica, la seconda riceve il segnale riflesso dell'onda ultrasonica. La distanza percorsa è determinata dal tempo di percorrenza. Apparentemente, la limitazione della distanza misurata di 4,5 metri è dovuta alla potenza dell'emettitore.

Per quanto riguarda la comunicazione del sensore con il microcontrollore, il modello US-100 ha due possibili interfacce, selezionabili da un ponticello sul retro della scheda del sensore. Se il ponticello è attivo, viene selezionata l'interfaccia UART; se il ponticello è rimosso, viene utilizzata l'interfaccia o la modalità GPIO. Nel primo caso, viene utilizzato l'hardware o il software del microcontrollore per comunicare con il microcontrollore. Nel secondo caso, dovrai ricevere e trasmettere i dati solo manualmente. Nel diagramma del dispositivo, utilizziamo una modalità operativa più semplice utilizzando l'interfaccia UART.

È necessario chiarire le sfumature del pinout e della connessione del sensore al microcontrollore. Di solito, quando si trasmettono dati su UART, le linee Rx e Tx sono collegate trasversalmente: Rx a Tx e Tx a Rx. Questo sensore a ultrasuoni deve essere collegato in conformità con i contatti contrassegnati sul circuito stampato da Rx a Rx e da Tx a Tx. I cinesi ricotti, sono d'accordo. Prima che fosse determinato, ho dovuto soffrire a lungo e finalmente arrivare a questo. Quindi, quando si lavora tramite UART, per inizializzare una misurazione della distanza, il sensore ultrasonico US-100 deve trasferire il valore 0x55 al pin Trig / Tx, che corrisponde al simbolo "U". In risposta, il sensore invierà due byte di informazioni sulla distanza all'uscita Echo / Rx: il primo byte sono gli 8 bit alti, il secondo byte sono gli 8 bit bassi. Le unità di distanza sono millimetri. Per tradurre due byte in un valore di distanza, devi moltiplicare il primo byte per 256 e aggiungere il secondo byte. Devi farlo in questo modo, perché quando il byte basso va in overflow, il byte alto viene incrementato. Per visualizzare il valore attuale della temperatura ambiente è necessario passare il valore 0x50 che corrisponde al carattere "P". In risposta, il sensore trasmetterà il valore della temperatura. Il valore effettivo della temperatura sarà uguale al valore ricevuto dal sensore meno 45.

Parametri del sensore a ultrasuoni US-100:

  • tensione di alimentazione - 2,4 - 5,5 volt CC
  • consumo di corrente in modalità standby - 2 mA
  • temperatura di esercizio - meno 20 - più 70 C
  • angolo di visione - 15 gradi
  • interfaccia - GPIO o UART
  • distanza misurata - da 2 cm a 450 cm
  • errore - più meno 3 mm + 1%

Configurazione UART del sensore: 9600 baud rate, 8 bit di dati, parità: nessuna, 1 bit di stop.

Passiamo al diagramma del dispositivo.

Il circuito del telemetro ad ultrasuoni si basa sul microcontrollore Atmega8 e sul sensore a ultrasuoni US-100. L'alimentazione del circuito è presa dal regolatore di tensione lineare L7805, può essere sostituita dall'analogo domestico KR142EN5A, sono necessari condensatori nelle tubazioni stabilizzatrici, sebbene possa funzionare senza di essi. Alcuni regolatori semplicemente non si avviano senza condensatori. Un regolatore lineare può essere sostituito con un regolatore a commutazione, ad esempio MC34063 o LM2576, ma sarà necessario modificare leggermente il circuito in base alla connessione dei regolatori a commutazione nel circuito. I condensatori C5-C7 sono necessari per garantire la stabilità del microcontrollore e del sensore. I valori nominali di tutti i condensatori possono essere variati entro limiti ragionevoli. Il resistore R2 è necessario per impedire il riavvio spontaneo del microcontrollore e funge da pull-up di alimentazione positiva al pin di ripristino. Il resistore R1 regola il contrasto LCD. Come pannello informativo è stato preso uno schermo a cristalli liquidi (LCD o altrimenti LCD) SC1602, 2 righe da 16 caratteri basato sul controller HD44780. È possibile sostituire il display LCD con qualsiasi altro modello basato sul controller HD44780 con lo stesso numero di righe e caratteri per riga o più. Sul circuito stampato del display LCD, è possibile utilizzare la retroilluminazione dello schermo in due modi: saldando un resistore e un ponticello sulla scheda dello schermo stesso o utilizzando pin speciali, solitamente contrassegnati come "A" e " K". Anodo e catodo, rispettivamente. Una tensione di alimentazione di 5 volt è collegata ad essi tramite un resistore limitatore di corrente. In questo schema è coinvolto il primo metodo, quindi non è indicato nel diagramma. Invece dei pulsanti tattili S1 - S5, puoi usare qualsiasi altro pulsante. LED1 LED può essere utilizzato in qualsiasi colore adatto o sostituirlo con un transistor e controllare qualche altro circuito a seconda della distanza in eccesso dal sensore. A seconda del tipo di transistor utilizzato (P-N-P o N-P-N), se viene superata la distanza o il limite di distanza, l'uscita avrà una tensione positiva o negativa, cioè con un segnale logico alto del microcontrollore, il transistor N-P-N sarà aperto , e il transistor P-N-P sarà chiuso. Il firmware del microcontrollore ha un parametro in cui, se viene superato il limite di distanza indicato, verrà applicato un livello di tensione logica elevato al pin PB0. In questo circuito, il LED segnala semplicemente l'eccesso. Questo segnale viene duplicato sul display LCD sottolineando l'informazione relativa al limite di distanza. Questo parametro può essere regolato tramite i pulsanti S1, S2. Premendolo aumenta o diminuisce di 10 mm. Anche le informazioni sulla distanza vengono visualizzate in millimetri. Le informazioni sulla temperatura ambiente vengono visualizzate in gradi Celsius. Due versioni del firmware sono allegate all'articolo: 1) misurazione continua dei parametri di distanza e temperatura (un intervallo di circa 0,2 secondi), mentre i pulsanti S4, S5 non sono attivati, 2) quando vengono premuti i pulsanti S4, S5 , viene fatta una sola richiesta al sensore per misurare la temperatura e le distanze. Il video per l'articolo è stato realizzato con il firmware numero 1. Per programmare il microcontrollore, è necessario eseguire il flashing dei bit del fusibile:

Per i principianti, consiglio di utilizzare i valori esadecimali dei bit dei fusibili HIGH e LOW in modo da non confondere le caselle di controllo. Screenshot da AVRstudio (ci sono differenze rispetto a pipe, sina prog e altri programmi per il flashing dei microcontrollori). Se si utilizzano programmi per il flashing dei microcontrollori AVR, in cui non è previsto l'inserimento dei parametri dei fusibili, è possibile utilizzare i calcolatori dei fusibili per convertire i segni di spunta in forma esadecimale e viceversa.

Il circuito è stato assemblato e testato su una breadboard per Atmega8:

Strutturalmente, il circuito può essere progettato, ad esempio, sotto forma di una pistola con un indicatore di direzione laser del sensore ultrasonico. L'unica cosa limitata è la distanza misurata, al di sopra della quale l'errore aumenta notevolmente. La limitazione riguarda anche la posizione e le dimensioni dell'oggetto a cui viene misurata la distanza: la distanza da oggetti troppo piccoli o con un angolo ampio sarà distorta. La combinazione ideale è costituita da oggetti sufficientemente grandi e perpendicolari alla direzione del sensore. L'errore di misurazione corrisponde approssimativamente a quello dichiarato dal produttore. Questo dispositivo, con ulteriore sviluppo, può essere utilizzato come rilevatore di ostacoli, come un sensore di parcheggio in condizioni ambientali, poiché per strada le testine ultrasoniche di questo sensore saranno intasate di sporcizia.

Offri le tue idee e applicazioni, le idee più interessanti in futuro possono essere implementate.

In allegato all'articolo ci sono 2 versioni del firmware HEX per MK, un progetto in (versione 7.7, il sensore ultrasonico US-100 nel database proteus non lo è, ma è coinvolto un debugger UART), oltre a un breve video che ne dimostra il funzionamento del circuito.

Elenco degli elementi radio

Designazione Tipo Denominazione Quantità NotaNegozioIl mio taccuino
IC1 MK-AVR a 8 bit

ATmega8

1 Al blocco note
VR1 Regolatore lineare

L7805AB

1 Al blocco note
HG1 display LCDSC16021 Basato su HD44780 Al blocco note
U1 Sensore ultrasonicoStati Uniti-1001 Al blocco note
R1 Resistenza trimmer10 kOhm1 3296W-1-103LF Al blocco note
R2 Resistore

10 kOhm

1 0,25 W Al blocco note
R3 Resistore

390 Ohm

1 0,25 W

I sensori di distanza ad ultrasuoni Arduino sono molto richiesti nei progetti di robotica a causa della loro relativa semplicità, sufficiente precisione e disponibilità. Possono essere utilizzati come dispositivi per evitare ostacoli, ottenere le dimensioni degli oggetti, simulare una mappa della stanza e segnalare l'avvicinamento o l'allontanamento di oggetti. Una delle opzioni comuni per un tale dispositivo è un sensore di distanza, che include un telemetro ad ultrasuoni HC SR04. In questo articolo, conosceremo il principio di funzionamento del sensore di distanza, prenderemo in considerazione diverse opzioni per il collegamento alle schede Arduino, un diagramma di interazione ed esempi di schizzi.

La capacità di un sensore a ultrasuoni di determinare la distanza da un oggetto si basa sul principio del sonar: inviando un raggio di ultrasuoni e ricevendone il riflesso con un ritardo, il dispositivo determina la presenza di oggetti e la loro distanza. I segnali ultrasonici generati dal ricevitore, riflessi dall'ostacolo, vi ritornano dopo un certo periodo di tempo. È questo intervallo di tempo che diventa una caratteristica che aiuta a determinare la distanza dall'oggetto.

Attenzione! Poiché il principio di funzionamento si basa sugli ultrasuoni, tale sensore non è adatto per determinare la distanza da oggetti fonoassorbenti. Gli oggetti con una superficie piana e liscia sono ottimali per la misurazione.

Descrizione del sensore HC SR04

Il sensore di distanza Arduino è un dispositivo di tipo senza contatto e fornisce misurazioni e stabilità di alta precisione. La portata del suo campo di misurazione va da 2 a 400 cm Il suo funzionamento non è influenzato in modo significativo dalle radiazioni elettromagnetiche e dall'energia solare. Il kit modulo con arduino HC SR04 include anche un ricevitore e un trasmettitore.

Il telemetro ad ultrasuoni HC SR04 ha i seguenti parametri tecnici:

  • Tensione di alimentazione 5V;
  • Il parametro operativo della potenza della corrente è 15 mA;
  • Corrente passiva< 2 мА;
  • Angolo di visione – 15°;
  • Risoluzione touch - 0,3 cm;
  • Angolo di misurazione – 30°;
  • Larghezza dell'impulso - 10 -6 s.

Il sensore è dotato di quattro conduttori (standard 2,54 mm):

  • Contatto di potenza di tipo positivo - + 5V;
  • Trig (Т) – uscita del segnale di ingresso;
  • Echo (R) - uscita del segnale di uscita;
  • GND - uscita "Terra".

Dove acquistare il modulo SR04 per Arduino

Il sensore di distanza è un componente abbastanza comune e si trova facilmente nei negozi online. Le opzioni più economiche (da 40-60 rubli ciascuna), tradizionalmente sul noto sito.

Modulo sensore di distanza HC-SR04 per Arduino Un'altra opzione per il sensore a ultrasuoni HC-SR04 da un fornitore affidabile
Sensori di distanza SR05 Ultrasuoni HC-SR05 (prestazioni migliorate) Modulo HC-SR05 HY-SRF05 per UNO R3 MEGA2560 DUE da un fornitore affidabile

Schema di interazione con Arduino

Per ottenere i dati, è necessario eseguire la seguente sequenza di azioni:

  • Applicare un impulso di 10 microsecondi all'uscita Trig;
  • Nel telemetro ad ultrasuoni hc sr04 collegato all'arduino, il segnale verrà convertito in 8 impulsi con una frequenza di 40 kHz, che verranno inviati in avanti attraverso l'emettitore;
  • Quando gli impulsi raggiungono l'ostacolo, verranno riflessi da esso e ricevuti dal ricevitore R, che fornirà un segnale in ingresso all'uscita Echo;
  • Dal lato del controller, il segnale ricevuto deve essere convertito in una distanza utilizzando delle formule.

Dividendo l'ampiezza dell'impulso per 58,2 si ottengono i dati in centimetri, dividendo per 148 si ottengono i dati in pollici.

Collegamento di HC SR04 ad Arduino

Collegare un sensore di distanza ad ultrasuoni alla scheda Arduino è abbastanza semplice. Lo schema di collegamento è mostrato in figura.

Il pin di terra è collegato al pin GND sulla scheda Arduino, l'uscita di alimentazione è collegata a 5V. Colleghiamo le uscite Trig ed Echo ad arduino ai pin digitali. Opzione di connessione breadboard:

Libreria per lavorare con HC SR04

Per facilitare il lavoro con il sensore di distanza HC SR04 su arduino, puoi utilizzare la libreria NewPing. Non ha problemi con i ping e aggiunge alcune nuove funzionalità.

Le caratteristiche della libreria includono:

  • Capacità di lavorare con vari sensori a ultrasuoni;
  • Può funzionare con un sensore di distanza con un solo pin;
  • Nessun ritardo di 1 secondo in assenza di echo ping;
  • Per una semplice correzione degli errori, è presente un filtro digitale integrato;
  • Il calcolo della distanza più accurato.

Puoi scaricare la libreria NewPing

Precisione della misurazione della distanza con sensore HC SR04

La precisione del sensore dipende da diversi fattori:

  • temperatura e umidità dell'aria;
  • distanza dall'oggetto;
  • posizione rispetto al sensore (secondo il diagramma di radiazione);
  • qualità delle prestazioni degli elementi del modulo sensore.

Il principio di funzionamento di qualsiasi sensore a ultrasuoni si basa sul fenomeno della riflessione delle onde acustiche che si propagano nell'aria. Ma come è noto dal corso di fisica, la velocità di propagazione del suono nell'aria dipende dalle proprietà di quest'aria stessa (principalmente dalla temperatura). Il sensore, emettendo onde e misurando il tempo fino al loro ritorno, non indovina in quale mezzo si propagheranno e prende un valore medio per i calcoli. In condizioni reali, a causa del fattore temperatura dell'aria, l'HC-SR04 potrebbe presentare un errore da 1 a 3-5 cm.

Il fattore di distanza dall'oggetto è importante, perché la probabilità di riflessione da oggetti vicini aumenta, inoltre, il segnale stesso si attenua con la distanza.

Inoltre, per migliorare la precisione, è necessario orientare correttamente il sensore: assicurarsi che l'oggetto sia all'interno del cono del diagramma di radiazione. In poche parole, gli "occhi" dell'HC-SR04 dovrebbero guardare dritto al soggetto.

Per ridurre gli errori e gli errori di misurazione, vengono solitamente eseguite le seguenti azioni:

  • i valori sono mediati (misuriamo più volte, rimuoviamo i burst, quindi troviamo la media);
  • utilizzando sensori (ad esempio) viene determinata la temperatura e vengono introdotti fattori di correzione;
  • il sensore è montato su un servomotore, con l'aiuto del quale "giriamo la testa", spostando il diagramma di radiazione a sinistra oa destra.

Esempi di sensori di distanza

Diamo un'occhiata a un esempio di un semplice progetto con una scheda Arduino Uno e un sensore di distanza HC SR04. Nello schizzo, otterremo il valore della distanza dagli oggetti e li invieremo al monitor della porta nell'IDE di Arduino. È possibile modificare facilmente lo schema e lo schema di connessione in modo che il sensore segnali l'avvicinamento o la distanza di un oggetto.

Collegamento del sensore ad arduino

Durante la stesura dello schizzo, è stata utilizzata la seguente opzione di piedinatura per il collegamento del sensore:

  • CC: +5V
  • Trigger - 12 pin
  • Eco - 11 pin
  • Terra (GND) – Terra (GND)

Esempio di schizzo

Iniziamo subito a lavorare con il sensore con un'opzione relativamente complessa, senza utilizzare librerie esterne.

In questo schizzo, eseguiamo la seguente sequenza di azioni:

  • Con un breve impulso (2-5 microsecondi), trasferiamo il sensore di distanza nella modalità di ecolocalizzazione, in cui le onde ultrasoniche con una frequenza di 40 kHz vengono inviate nello spazio circostante.
  • Stiamo aspettando che il sensore analizzi i segnali riflessi e determini la distanza in base al ritardo.
  • Otteniamo il valore della distanza. Per fare ciò, aspettiamo che l'HC SR04 generi un impulso proporzionale alla distanza all'ingresso ECHO. Determiniamo la durata dell'impulso utilizzando la funzione pulseIn, che ci restituirà il tempo trascorso prima che il livello del segnale cambiasse (nel nostro caso, fino alla comparsa del fronte inverso dell'impulso).
  • Ricevuto il tempo, lo convertiamo in una distanza in centimetri dividendo il valore per una costante (per il sensore SR04, questo è 29,1 per il segnale "là", lo stesso per il segnale "indietro", che darà un totale di 58.2).

Se il sensore di distanza non legge il segnale, la conversione del segnale di uscita non assumerà mai il valore di un impulso breve - BASSO. Poiché per alcuni sensori il tempo di ritardo varia a seconda del produttore, si consiglia di impostarne manualmente il valore quando si utilizzano questi schizzi (lo facciamo all'inizio del ciclo).

Se la distanza è superiore a 3 metri, alla quale l'HC SR04 inizia a funzionare male, è meglio impostare il tempo di ritardo su più di 20 ms, ad es. 25 o 30 ms.

#define PIN_TRIG 12 #define PIN_ECHO 11 lunga durata, cm; void setup() ( // Inizializza la comunicazione sulla porta seriale Serial.begin (9600); // Definisce ingressi e uscite pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); ) void loop() ( // Prima genera un breve impulso della durata di 2-5 microsecondi digitalWrite(PIN_TRIG, LOW); delayMicroseconds(5); digitalWrite(PIN_TRIG, HIGH); // Impostando il segnale alto, attendi circa 10 microsecondi. A questo punto il sensore invierà i segnali ad un frequenza di 40 kHz. delayMicroseconds(10); digitalWrite(PIN_TRIG, LOW); // Tempo di ritardo per il segnale acustico sul sonar duration = pulseIn(PIN_ECHO, HIGH); // Ora resta da convertire il tempo in distanza cm = ( duration / 2) / 29.1; Serial. print("Distanza dall'oggetto: "); Serial.print(cm); Serial.println(" see."); // Ritardo tra le misurazioni affinché lo schizzo funzioni correttamente delay(250 ); )

Disegna utilizzando la libreria NewPing

Ora diamo un'occhiata a uno schizzo usando la libreria NewPing. Il codice sarà notevolmente semplificato, perché tutte le azioni descritte in precedenza sono nascoste all'interno della libreria. Tutto quello che dobbiamo fare è creare un oggetto della classe NewPing, specificando i pin con cui colleghiamo il sensore di distanza e utilizzare i metodi dell'oggetto. Nel nostro esempio, dobbiamo usare ping_cm() per ottenere la distanza in centimetri.

#includere #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // Costante per definire la distanza massima che riterremo valida. // Crea un oggetto i cui metodi useremo poi per ottenere la distanza. // Come parametri passiamo i numeri di pin a cui sono collegate le uscite ECHO e TRIG del sensore sonar NewPing (PIN_TRIG, PIN_ECHO, MAX_DISTANCE); void setup() ( // Inizializza la comunicazione sulla porta seriale al baud rate 9600 Serial.begin(9600); ) void loop() ( // Ritardo di avvio richiesto per il corretto funzionamento. delay(50); // Ottieni il valore da il sensore di distanza e memorizzarlo in una variabile unsigned int distance = sonar.ping_cm(); // Stampa la distanza nel monitor della porta Serial.print(distanza); Serial.println("cm"); )

Un esempio di collegamento di un telemetro ad ultrasuoni HC SR04 con un pin

Il collegamento di HC-SR04 ad Arduino può essere effettuato utilizzando un singolo pin. Questa opzione è utile se stai lavorando a un progetto di grandi dimensioni e non hai abbastanza pin liberi. Per connetterti, devi solo installare un resistore da 2.2K tra i pin TRIG ed ECHO e collegare il pin TRIG all'arduino.

#includere #define PIN_PING 12 // Il pin Arduino è collegato ai pin trigger ed echo sul sensore di distanza #define MAX_DISTANCE 200 // La distanza massima che possiamo controllare (400-500 cm). Nuovo sonar Ping (PIN_PING, PIN_PING, MAX_DISTANCE); // Regola i pin e la distanza massima void setup() ( Serial.begin(9600); // Protocollo aperto con dati e baud rate 115200 bps. ) void loop() ( delay(50); // Ritardo di 50 ms tra le onde generate 29 ms è il valore minimo consentito unsigned int distanceSm = sonar.ping(); // Creazione di un segnale, ottenendo il suo parametro di durata in µs (uS).Serial.print("Ping: ");Serial.print(distanzaSm / US_ROUNDTRIP_CM); // Conversione del parametro tempo in un valore di distanza e output del risultato (0 corrisponde al superamento del limite consentito) Serial.println("cm"); )

Brevi conclusioni

I sensori di distanza a ultrasuoni sono versatili e abbastanza precisi da poter essere utilizzati per la maggior parte dei progetti di hobby. L'articolo discute il famosissimo sensore HC SR04, che si collega facilmente alla scheda arduino (per questo dovrebbero essere forniti immediatamente due pin liberi, ma esiste un'opzione di connessione con un pin). Esistono diverse librerie gratuite per lavorare con il sensore (solo una di esse, NewPing, è considerata nell'articolo), ma puoi farne a meno: l'algoritmo per interagire con il controller interno del sensore è abbastanza semplice, lo abbiamo mostrato in questo articolo.

Sulla base della mia esperienza, il sensore HC-SR04 ha una precisione di un centimetro a distanze da 10 cm a 2 m. A distanze sempre più brevi, possono verificarsi forti interferenze, che dipendono in gran parte dagli oggetti circostanti e da come lo si utilizza. Ma per la maggior parte, l'HC-SR04 ha svolto bene il lavoro.

HC-SR04 è uno dei telemetri più comuni ed economici in robotica. Ti consente di misurare distanze da 2 cm a 4 m (forse di più) con una discreta precisione di 0,3-1 cm. L'uscita è un segnale digitale, la cui durata è proporzionale alla distanza dagli ostacoli.

telemetro ad ultrasuoni

Questo sensore è stato acquistato da me molto tempo fa e giaceva quasi dimenticato nella sua scatola. Ma nell'ambito di un progetto, sulla base di esso è stato costruito un telemetro abbastanza compatto e una scheda voltmetro per la revisione.

Telemetro ad ultrasuoni HC-SR04

Caratteristiche del sensore:

Potenza - 5V
Consumo di corrente - meno di 2 mA
Angolo di visione effettivo - 15 g
Distanza misurata: 2 cm - 5 m
Precisione: 3 mm
Preso dalla documentazione per il sensore

Principio di funzionamento di HC-SR04

Principio di funzionamento

Il modulo ha 4 uscite, due delle quali sono alimentazione - terra e + 5V, e altre due sono dati. Il modulo viene interrogato nel modo seguente: un impulso della durata di 10 μs viene inviato all'uscita Trig. Il telemetro genera un pacchetto di 8 impulsi ultrasonici da 40 kHz. Che, riflesse dalla maggior parte delle superfici, tornano indietro se non svaniscono lungo la strada. Subito dopo aver inviato un segnale a Trig, iniziamo ad aspettarci un segnale di risposta positivo sull'uscita Echo, con una durata da 150 µs a 25 ms, proporzionale alla distanza dall'oggetto. Più precisamente, il tempo di transito dal sensore all'ostacolo e ritorno. Se non c'è risposta (il sensore non sentirà la sua eco), allora il segnale tornerà con una lunghezza di 38 ms. La distanza da un oggetto (ostacolo) viene calcolata utilizzando la seguente semplice formula:

Dove: L è la distanza in centimetri dall'oggetto e F è la lunghezza dell'impulso sul pin Echo.
Il tempo di polling del sensore consigliato è di 50 ms o 20 Hz.

I primi test di questo modulo sono stati effettuati utilizzando un oscilloscopio digitale, che captava la risposta del modulo e manualmente, chiudendo rapidamente Trig a + potenza, cercava di ottenere un impulso iniziale di 10 µs. Nella metà dei casi si è scoperto [:)] .

Progetto

Il sensore era collegato a una scheda voltmetro con un anodo comune, leggermente modificato per funzionare con esso (sono stati rimossi i divisori non necessari con un condensatore ed è stata aggiunta un'uscita da RA3). Un microcontrollore è stato utilizzato dalla quinta versione del voltmetro - PIC16F688, con un firmware ridisegnato per il telemetro ad ultrasuoni.

Telemetroè un dispositivo per misurare la distanza da un oggetto. Il telemetro aiuta i robot in diverse situazioni. Un semplice robot su ruote può utilizzare questo dispositivo per rilevare gli ostacoli. Un drone volante utilizza un telemetro per librarsi sopra il suolo a una determinata altezza. Con l'aiuto di un telemetro, puoi persino costruire una mappa della stanza utilizzando uno speciale algoritmo SLAM.

1. Principio di funzionamento

Questa volta analizzeremo il funzionamento di uno dei sensori più popolari: un telemetro a ultrasuoni (USA). Esistono molte modifiche diverse di tali dispositivi, ma funzionano tutte secondo il principio della misurazione del tempo di passaggio del suono riflesso. Cioè, il sensore invia un segnale sonoro in una data direzione, quindi cattura l'eco riflesso e calcola il tempo necessario al suono per viaggiare dal sensore all'ostacolo e ritorno. Dal corso scolastico di fisica sappiamo che la velocità del suono in un certo mezzo è un valore costante, ma dipende dalla densità del mezzo. Conoscendo la velocità del suono nell'aria e il tempo impiegato dal suono per raggiungere il bersaglio, possiamo calcolare la distanza percorsa dal suono utilizzando la formula: s = v*t dove v è la velocità del suono in m/s e t è il tempo in secondi. La velocità del suono nell'aria, tra l'altro, è di 340,29 m/s. Per far fronte al suo compito, il telemetro ha due importanti caratteristiche di progettazione. In primo luogo, affinché il suono sia ben riflesso dagli ostacoli, il trasduttore emette ultrasuoni a una frequenza di 40 kHz. Per fare ciò, il sensore dispone di un emettitore piezoceramico in grado di generare un suono di frequenza così elevata. In secondo luogo, l'emettitore è progettato in modo tale che il suono non si propaghi in tutte le direzioni (come nel caso degli altoparlanti convenzionali), ma in una direzione ristretta. La figura mostra il diagramma di radiazione di un tipico telemetro a ultrasuoni. Come puoi vedere nel diagramma, l'angolo di visione del telemetro ultrasonico più semplice è di circa 50-60 gradi. Per un caso d'uso tipico, quando il sensore rileva ostacoli davanti a sé, questo angolo di visione è abbastanza adatto. Gli ultrasuoni possono persino rilevare la gamba di una sedia, mentre un telemetro laser, ad esempio, potrebbe non notarlo. Se decidiamo di scansionare lo spazio circostante, ruotando il telemetro in cerchio come un radar, il telemetro ad ultrasuoni ci darà un'immagine molto imprecisa e rumorosa. Per tali scopi, è meglio usare solo un telemetro laser. Vanno inoltre notate due gravi carenze del telemetro ad ultrasuoni. Il primo è che le superfici porose assorbono bene gli ultrasuoni e il sensore non può misurarne la distanza. Ad esempio, se decidiamo di misurare la distanza da un multicopter alla superficie di un campo di erba alta, molto probabilmente otterremo dati molto sfocati. Gli stessi problemi ci attendono quando si misura la distanza da un muro ricoperto di gommapiuma. Il secondo inconveniente è legato alla velocità dell'onda sonora. Questa velocità non è sufficiente per rendere il processo di misurazione più frequente. Supponiamo che ci sia un ostacolo davanti al robot a una distanza di 4 metri. Perché il suono voli avanti e indietro, ci vorranno fino a 24 ms. Dovrebbe essere misurato 7 volte prima di mettere il telemetro ad ultrasuoni sui robot volanti.

2. Misuratore di distanza ad ultrasuoni HC-SR04

In questo tutorial lavoreremo con il sensore HC-SR04 e il controller Arduino Uno. Questo popolare telemetro può misurare distanze da 1-2 cm a 4-6 metri. Allo stesso tempo, la precisione della misurazione è di 0,5 - 1 cm Esistono diverse versioni dello stesso HC-SR04. Alcuni funzionano meglio, altri peggio. Puoi distinguerli dal motivo della tavola sul retro. La versione che funziona bene si presenta così:

Ed ecco la versione che può fallire:

3. Collegamento di HC-SR04

Il sensore HC-SR04 ha quattro uscite. Oltre a terra (Gnd) e alimentazione (Vcc), ci sono anche Trig ed Echo. Entrambe queste uscite sono digitali, quindi le colleghiamo a qualsiasi uscita di Arduino Uno:
HC-SR04 GND VCC trig eco
ArduinoUno GND +5V 3 2
Schema schematico del dispositivo Aspetto del layout

4. Programma

Quindi, proviamo a ordinare al sensore di inviare un impulso ultrasonico di sondaggio, quindi fissiamo il suo ritorno. Vediamo come appare il diagramma di temporizzazione dell'HC-SR04.
Il diagramma mostra che per avviare la misurazione, dobbiamo generare sull'uscita trig un impulso positivo con una lunghezza di 10 μs. Successivamente, il sensore emetterà una serie di 8 impulsi e alzerà il livello in uscita eco, mentre si passa alla modalità standby del segnale riflesso. Una volta che il telemetro rileva che il suono è tornato, completerà l'impulso positivo eco. Si scopre che dobbiamo fare solo due cose: creare un impulso su Trig per iniziare a misurare e misurare la lunghezza dell'impulso su Echo, per poi calcolare la distanza usando una semplice formula. Noi facciamo. int echoPin = 2; intrigpin = 3; void setup() ( Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); ) void loop() ( int duration, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite (trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); durata = pulseIn(echoPin, HIGH); cm = durata / 58; Serial.print(cm); Serial.println(" cm"); ritardo (100); ) Funzione pulseIn misura la lunghezza dell'impulso positivo sulla gamba echoPin in microsecondi. Nel programma, registriamo il tempo di volo del suono nella durata variabile. Come abbiamo scoperto in precedenza, dobbiamo moltiplicare il tempo per la velocità del suono: s = durata * v = durata * 340 m/s Traduciamo la velocità del suono da m/s a cm/µs: s = durata * 0,034 m/µs Per comodità, convertiamo la frazione decimale in una ordinaria: s = durata * 1/29 = durata / 29 E ora ricordiamo che il suono ha percorso due distanze desiderate: verso il bersaglio e ritorno. Dividiamo tutto per 2: s = durata / 58 Ora sappiamo da dove viene il numero 58 nel programma! Carichiamo il programma su Arduino Uno e apriamo il monitor della porta seriale. Ora proviamo a puntare il sensore su oggetti diversi e guardiamo la distanza calcolata sul monitor.

Compiti

Ora che sappiamo come calcolare la distanza con un telemetro, realizziamo alcuni dispositivi utili.
  1. Telemetro da costruzione. Il programma misura la distanza ogni 100 ms utilizzando un telemetro e visualizza il risultato su un display LCD a caratteri. Per comodità, il dispositivo risultante può essere riposto in una piccola custodia e alimentato a batterie.
  2. Bastone ad ultrasuoni. Scriviamo un programma che "beep" con un cicalino a frequenze diverse, a seconda della distanza misurata. Ad esempio, se la distanza dall'ostacolo è superiore a tre metri, il cicalino emette un suono ogni mezzo secondo. A una distanza di 1 metro - una volta ogni 100 ms. Meno di 10 cm - emette segnali acustici costantemente.

Conclusione

Il telemetro a ultrasuoni è un sensore facile da usare, economico e preciso che funziona bene su migliaia di robot. Come abbiamo scoperto dalla lezione, il sensore presenta degli svantaggi che dovrebbero essere considerati quando si costruisce un robot. Una buona soluzione sarebbe quella di utilizzare un telemetro ad ultrasuoni accoppiato con un telemetro laser. In questo caso, compenseranno i reciproci difetti.

Nell'articolo parlerò di come ho realizzato un telemetro laser e del principio del suo funzionamento. Noto subito che il design è un mock-up e non può essere utilizzato per un uso pratico. È stato fatto solo per assicurarsi che il telemetro di fase possa davvero essere assemblato da solo.

Teoria

Spesso ci si imbatte nell'opinione che con l'ausilio di un laser la distanza venga misurata solo misurando direttamente il tempo del "volo" dell'impulso laser dal laser all'oggetto riflettente e ritorno. Infatti, questo metodo (chiamato impulso o tempo di volo, TOF) viene utilizzato principalmente nei casi in cui le distanze dall'oggetto desiderato sono sufficientemente grandi (> 100 m). Poiché la velocità della luce è molto elevata, è abbastanza difficile misurare il tempo di volo della luce, e quindi la distanza, con grande precisione in un impulso laser. La luce percorre 1 metro in circa 3,3 ns, quindi l'accuratezza della misurazione del tempo deve essere di nanosecondi, sebbene l'accuratezza della misurazione della distanza sarà ancora di decine di centimetri. Per misurare gli intervalli di tempo con tale precisione, vengono utilizzati FPGA e microcircuiti specializzati.

Video del telemetro:

Il raggio d'azione del telemetro risultante è risultato piuttosto piccolo: 1,5-2 m, a seconda del coefficiente di riflessione dell'oggetto.
Per aumentare la portata, è possibile utilizzare un riflettore speciale, che dovrà dirigere il raggio laser.
Per esperimenti, ho realizzato un riflettore per lenti, costituito da una lente con carta opaca al centro. Questo disegno riflette la luce nello stesso punto da cui è stata rilasciata, tuttavia il diametro del raggio aumenta.
Foto del riflettore:

Utilizzo del riflettore:


Come puoi vedere, la distanza dal riflettore è di 6,4 metri (in realtà era di circa 6,3). In questo caso il segnale aumenta così tanto da dover essere attenuato indirizzando il raggio laser verso il bordo del riflettore.

La precisione del telemetro risultante è di 1-2 centimetri, che corrisponde alla precisione della misurazione dello sfasamento - 0,2-0,5 gradi. Allo stesso tempo, per ottenere una tale accuratezza, i dati devono essere mediati troppo a lungo - ci vogliono 0,5 secondi per una misurazione. Forse questo è dovuto all'uso di un PLL per il condizionamento del segnale - ha un bel po' di jitter. Anche se penso che per una breadboard fatta in casa, la cui parte analogica è realizzata in modo piuttosto goffo, in cui sono presenti fili piuttosto lunghi, anche una tale precisione è abbastanza buona.
Prendo atto che non sono riuscito a trovare su Internet un singolo progetto di telemetro di fase esistente (almeno con un diagramma di progettazione), motivo per cui ho scritto questo articolo.

Tag:

  • telemetro laser
  • stm32
  • stm32f4discovery
Aggiungere etichette