Senzor de distanță cu ultrasunete DIY. Telemetru cu ultrasunete hc-sr04 - Tehnologie de măsurare - Instrumente

Senzorii de distanță cu ultrasunete Arduino sunt foarte populari în proiectele de robotică datorită simplității lor relative, preciziei suficiente și disponibilității. Ele pot fi folosite ca dispozitive care ajută la evitarea obstacolelor, la obținerea dimensiunilor obiectelor, simulează o hartă a încăperii și semnalează apropierea sau îndepărtarea obiectelor. Una dintre opțiunile comune pentru un astfel de dispozitiv este un senzor de distanță, al cărui design include un telemetru cu ultrasunete HC SR04. În acest articol ne vom familiariza cu principiul de funcționare a unui senzor de distanță, vom lua în considerare mai multe opțiuni pentru conectarea la plăcile Arduino, o diagramă de interacțiune și exemple de schițe.

Capacitatea unui senzor ultrasonic de a determina distanța până la un obiect se bazează pe principiul sonarului - prin trimiterea unui fascicul de ultrasunete și primirea reflectării acestuia cu întârziere, dispozitivul determină prezența obiectelor și distanța până la acestea. Semnalele ultrasonice generate de receptor, reflectate de obstacol, revin la acesta după o anumită perioadă de timp. Acest interval de timp devine o caracteristică care ajută la determinarea distanței până la obiect.

Atenţie! Deoarece principiul de funcționare se bazează pe ultrasunete, un astfel de senzor nu este potrivit pentru determinarea distanței până la obiectele care absorb sunetul. Obiectele cu o suprafață plană și netedă sunt optime pentru măsurare.

Descrierea senzorului HC SR04

Senzorul de distanță Arduino este un dispozitiv de tip fără contact și oferă măsurare și stabilitate foarte precise. Domeniul său de măsurare variază de la 2 la 400 cm Funcționarea sa nu este afectată semnificativ de radiația electromagnetică și energia solară. Setul de module cu arduino HC SR04 include, de asemenea, un receptor și un transmițător.

Telemetrul cu ultrasunete HC SR04 are următorii parametri tehnici:

  • Tensiune de alimentare 5V;
  • Parametrul curent de funcționare este de 15 mA;
  • Puterea curentului în stare pasivă< 2 мА;
  • Unghi de vizualizare – 15°;
  • Rezoluție la atingere – 0,3 cm;
  • Unghi de măsurare – 30°;
  • Lățimea impulsului – 10 -6 s.

Senzorul este echipat cu patru cabluri (standard 2,54 mm):

  • Contact de putere de tip pozitiv – +5V;
  • Trig (T) – ieșire semnal de intrare;
  • Eco (R) – ieșire semnal de ieșire;
  • GND – Pin „Ground”.

De unde să cumpărați modulul SR04 pentru Arduino

Senzorul de distanță este o componentă destul de comună și poate fi găsit cu ușurință în magazinele online. Cele mai ieftine opțiuni (de la 40-60 de ruble pe bucată), în mod tradițional pe site-ul binecunoscut.

Modul senzor de distanță HC-SR04 pentru Arduino O altă opțiune pentru senzorul ultrasonic HC-SR04 de la un furnizor de încredere
Senzori de proximitate SR05 Ultrasonic HC-SR05 (performanță îmbunătățită) Modul HC-SR05 HY-SRF05 pentru UNO R3 MEGA2560 DUE de la un furnizor de încredere

Schema de interacțiune cu Arduino

Pentru a obține date, trebuie să efectuați următoarea secvență de acțiuni:

  • Aplicați un impuls de 10 microsecunde la ieșirea Trig;
  • În telemetrul cu ultrasunete hc sr04 conectat la arduino, semnalul va fi convertit în 8 impulsuri cu o frecvență de 40 kHz, care vor fi transmise înainte prin emițător;
  • Când impulsurile ajung la obstacol, ele vor fi reflectate din acesta și vor fi recepționate de receptorul R, care va furniza un semnal de intrare la ieșirea Echo;
  • Pe partea de controler, semnalul primit ar trebui convertit în distanță folosind formule.

Când împărțim lățimea impulsului la 58,2, obținem date în centimetri, când împărțim la 148, obținem date în inci.

Conectarea HC SR04 la Arduino

Conectarea unui senzor de distanță ultrasonic la o placă Arduino este destul de simplă. Schema de conectare este prezentată în figură.

Conectăm pinul de masă la pinul GND de pe placa Arduino și conectăm puterea de ieșire la 5V. Conectăm ieșirile Trig și Echo la arduino prin pini digitali. Opțiune de conectare folosind o placă:

Biblioteca pentru lucrul cu HC SR04

Pentru a facilita lucrul cu senzorul de distanță HC SR04 pe Arduino, puteți utiliza biblioteca NewPing. Nu are probleme de ping și adaugă câteva funcții noi.

Caracteristicile bibliotecii includ:

  • Abilitatea de a lucra cu diverși senzori ultrasonici;
  • Poate funcționa cu un senzor de distanță printr-un singur pin;
  • Fără întârziere de 1 secundă când nu ecou ping;
  • Există un filtru digital încorporat pentru corectarea simplă a erorilor;
  • Cel mai precis calcul al distanței.

Puteți descărca biblioteca NewPing

Precizia măsurării distanței cu senzorul HC SR04

Precizia senzorului depinde de mai mulți factori:

  • temperatura și umiditatea aerului;
  • distanța față de obiect;
  • locația față de senzor (conform diagramei de radiații);
  • calitatea performanței elementelor modulului senzor.

Principiul de funcționare al oricărui senzor ultrasonic se bazează pe fenomenul de reflexie a undelor acustice care se propagă în aer. Dar, după cum știți dintr-un curs de fizică, viteza de propagare a sunetului în aer depinde de proprietățile aerului însuși (în primul rând de temperatură). Senzorul, care emite unde și măsoară timpul până la întoarcere, habar nu are în ce mediu se vor propaga și ia o anumită cantitate pentru calcule. valoarea medie. ÎN conditii reale Datorită factorului de temperatură a aerului, HC-SR04 poate avea o eroare de 1 până la 3-5 cm.

Distanța până la factorul obiect este importantă deoarece... probabilitatea de reflexie de la obiectele învecinate crește, iar semnalul însuși se atenuează odată cu distanța.

De asemenea, pentru a crește precizia, trebuie să direcționați corect senzorul: asigurați-vă că obiectul se află în conul modelului de radiație. Mai simplu spus, „ochii” lui HC-SR04 ar trebui să privească direct subiectul.

Pentru a reduce erorile și incertitudinea de măsurare, se efectuează de obicei următoarele acțiuni:

  • valorile sunt mediate (măsurăm de mai multe ori, eliminăm vârfurile, apoi găsim media);
  • folosind senzori (de exemplu, ) se determină temperatura și se aplică factori de corecție;
  • senzorul este montat pe un servomotor, cu care „întoarcem capul”, deplasând modelul de radiație spre stânga sau dreapta.

Exemple de utilizare a unui senzor de distanță

Să ne uităm la un exemplu de proiect simplu de placă Arduino Uno si senzor de distanta HC SR04. În schiță vom primi valoarea distanței până la obiecte și le vom trimite către monitorul portului din Arduino IDE. Puteți schimba cu ușurință schița și diagrama de conectare, astfel încât senzorul să semnaleze când un obiect se apropie sau se îndepărtează.

Conectarea senzorului la Arduino

La scrierea schiței, a fost utilizată următoarea opțiune de fixare a pinului pentru conectarea senzorului:

  • VCC: +5V
  • Trig – 12 pini
  • Echo – 11 pini
  • Pământ (GND) – Pământ (GND)

Exemplu de schiță

Să începem să lucrăm cu senzorul imediat cu o versiune relativ complexă - fără a folosi biblioteci externe.

În această schiță efectuăm următoarea secvență de acțiuni:

  • Cu un impuls scurt (2-5 microsecunde) comutăm senzorul de distanță în modul de ecolocație, în care unde ultrasonice cu o frecvență de 40 KHz sunt trimise în spațiul înconjurător.
  • Așteptăm ca senzorul să analizeze semnalele reflectate și să determine distanța în funcție de întârziere.
  • Obținem valoarea distanței. Pentru a face acest lucru, așteptați până când HC SR04 produce un impuls proporțional cu distanța de la intrarea ECHO. Determinăm durata pulsului folosind funcția pulseIn, care ne va returna timpul scurs înainte ca nivelul semnalului să se schimbe (în cazul nostru, înainte de apariția marginii de scădere a pulsului).
  • După ce am primit timpul, îl convertim în distanță în centimetri, împărțind valoarea la o constantă (pentru senzorul SR04 acesta este 29,1 pentru semnalul „acolo”, la fel pentru semnalul „înapoi”, care va da un total de 58,2 ).

Dacă senzorul de distanță nu citește semnalul, atunci conversia semnalului de ieșire nu va lua niciodată valoarea unui impuls scurt - LOW. Deoarece timpul de întârziere pentru unii senzori variază în funcție de producător, este recomandat să setați manual valoarea acestuia atunci când folosiți schițele de mai sus (facem acest lucru la începutul ciclului).

Dacă distanța este mai mare de 3 metri, la care HC SR04 începe să funcționeze prost, este mai bine să setați timpul de întârziere la mai mult de 20 ms, adică. 25 sau 30 ms.

#define PIN_TRIG 12 #define PIN_ECHO 11 durată lungă, cm; void setup() ( // Inițializați comunicarea pe portul serial Serial.begin (9600); // Definiți intrările și ieșirile pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); ) void loop() ( // Prima generați un impuls scurt care durează 2-5 microsecunde digitalWrite(PIN_TRIG, LOW); delayMicroseconds(5); digitalWrite(PIN_TRIG, HIGH); // Setarea nivelului semnalului ridicat, așteptați aproximativ 10 microsecunde. În acest moment, senzorul va trimite semnale cu o frecvență de 40 KHz. delayMicrosecunde(10); digitalWrite(PIN_TRIG, LOW); // Timp de întârziere pentru semnalul acustic de pe ecolocator. duration = pulseIn(PIN_ECHO, HIGH); // Acum rămâne să convertiți timpul în distanță cm = (durată / 2) / 29,1; Serial. print("Distanța până la obiect: "); Serial.print(cm); Serial.println(" cm."); // Întârziere între măsurători pentru funcționarea corectă a întârziere schiță (250); )

Schițați folosind biblioteca NewPing

Acum să ne uităm la o schiță folosind biblioteca NewPing. Codul va fi simplificat semnificativ, deoarece toate acțiunile descrise anterior sunt ascunse în bibliotecă. Tot ce trebuie să facem este să creăm un obiect din clasa NewPing, specificând pinii cu care conectăm senzorul de distanță și să folosim metodele obiectului. În exemplul nostru, pentru a obține distanța în centimetri, trebuie să folosim ping_cm().

#include #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // Constanta pentru a determina distanta maxima pe care o vom considera corecta. // Creați un obiect ale cărui metode le vom folosi apoi pentru a obține distanța. // Ca parametri trecem numerele de pin la care sunt conectate ieșirile ECHO și TRIG ale senzorului sonar NewPing (PIN_TRIG, PIN_ECHO, MAX_DISTANCE); void setup() ( // Inițializați comunicarea prin portul serial la o viteză de 9600 Serial.begin(9600); ) void loop() ( // Întârzierea de pornire este necesară pentru funcționarea corectă. delay(50); // Obțineți valoarea de la senzorul de distanță și salvați-o în variabila unsigned int distance = sonar.ping_cm(); // Imprimați distanța în monitorul portului Serial.print(distance); Serial.println("cm"); )

Un exemplu de conectare a unui telemetru cu ultrasunete HC SR04 cu un pin

Conectarea HC-SR04 la Arduino se poate face folosind un singur pin. Această opțiune este utilă dacă lucrați la un proiect mare și nu aveți suficienți pini liberi. Pentru a vă conecta, trebuie doar să instalați un rezistor de 2,2K între pinii TRIG și ECHO și să conectați pinul TRIG la Arduino.

#include #define PIN_PING 12 // Pinul Arduino este conectat la pinii de declanșare și eco de pe senzorul de distanță #define MAX_DISTANCE 200 // Distanța maximă pe care o putem controla (400-500cm). Sonar Ping nou (PIN_PING, PIN_PING, MAX_DISTANCE); // Ajustați pinii și distanța maximă void setup() ( Serial.begin(9600); // Deschide un protocol cu ​​date și o frecvență de transmisie de 115200 bps. ) void loop() ( delay(50); // Întârziere de 50 ms între undele generate. 29 ms este valoarea minimă admisă unsigned int distanceSm = sonar.ping(); // Creați un semnal, obțineți parametrul de durată în µs (uS). Serial.print("Ping: "); Serial. print(distanceSm / US_ROUNDTRIP_CM); // Convertiți parametrul de timp într-o valoare de distanță și afișați rezultatul (0 corespunde depășirii limitei permise) Serial.println("cm"); )

Concluzii scurte

Senzorii de distanță cu ultrasunete sunt suficient de versatili și de precisi pentru a fi utilizați pentru majoritatea proiectelor de hobby. Articolul discută despre senzorul extrem de popular HC SR04, care se conectează cu ușurință la placa Arduino (pentru aceasta ar trebui să furnizați imediat doi pini liberi, dar există o opțiune de conectare cu un singur pin). Există mai multe opțiuni pentru a lucra cu senzorul. biblioteci gratuite(articolul discută doar unul dintre ele, NewPing), dar puteți face fără ele - algoritmul de interacțiune cu controlerul intern al senzorului este destul de simplu, am arătat-o ​​în acest articol.

Pe baza propriei mele experiențe, senzorul HC-SR04 are o precizie de un centimetru la distanțe de la 10 cm la 2 m. La distanțe mai scurte și mai lungi, pot apărea interferențe puternice, care depind în mare măsură de obiectele din jur și de metoda de utilizare. Dar, în cea mai mare parte, HC-SR04 a făcut o treabă grozavă.

Bruno Gavand

Proiectul, care are în vedere o soluție simplă și ieftină pentru un senzor ultrasonic pentru măsurarea distanței, se bazează pe microcontrolerul PIC16F877A al companiei, dar codul sursă poate fi adaptat de către utilizatori la alte microcontrolere. Senzorul poate fi încorporat în modele și dispozitive personalizate: detectoare de prezență, roboți, sisteme de parcare auto, dispozitive de măsurare a distanței etc.

Trăsături distinctive:

  • un număr mic de componente externe;
  • dimensiunea codului 200 octeți;
  • interval de distanță de lucru: 30 cm - 200 cm;
  • precizie de măsurare ±1 cm;
  • indicație când limitele de măsurare sunt depășite.

După cum știți, viteza sunetului în aer este de aproximativ 340 m/s. Astfel, principiul unui senzor ultrasonic este să trimită un impuls ultrasonic cu o frecvență de 40 kHz și să monitorizeze semnalul reflectat (eco). Bineînțeles că nu vei auzi niciun sunet, dar senzor ultrasonic capabil să detecteze impulsul reflectat. Prin urmare, cunoscând timpul de parcurs al pulsului și semnalul ultrasonic reflectat, putem obține distanța. Împărțind la doi, obținem distanța de la senzorul cu ultrasunete până la primul obstacol de la care a fost reflectat semnalul.

Dispozitivul folosește un emițător de ultrasunete piezoceramic MA40B8S și un senzor de ultrasunete piezoceramic MA40B8R tip deschis. Principalii parametri sunt prezentați în tabelul de mai jos.

Dispozitiv Scop Frecvență Direcţie,
grindină
Capacitate,
pF
Regiune
detectare,
m
Intrare
Voltaj,
max, V
MA40B8S Emițător 40 kHz 50 (simetric) 2000 0.2 … 6 40
MA40B8R Senzor 40 kHz 50 (simetric) 2000 0.2 … 6

Platforma de depanare a companiei a fost folosită pentru testare.

Cu toate acestea, utilizatorul poate folosi orice microcontroler PIC care are cel puțin un canal ADC și un canal PWM.

Schema schematică a unui senzor ultrasonic

Emițătorul este controlat prin tranzistorul BD135. Dioda 1N4007 este utilizată pentru a proteja tranzistorul de tensiune inversă. Datorită utilizării unui tranzistor și a unui circuit rezonant, care este format prin conectarea în paralel a unui inductor L1 de 330 µH și a unui condensator format de emițătorul însuși, tensiunea de alimentare a emițătorului va fi de aproximativ 20 V, ceea ce asigură o rază de detectare. de până la 200 cm. Este de remarcat faptul că emițătorul poate fi controlat direct de la ieșirea microcontrolerului, totuși, în acest caz, intervalul de distanță nu depășește 50 cm.

Senzorul este conectat direct la ADC al microcontrolerului (când se utilizează PIC16F877A - canalul 1 al ADC), un rezistor conectat în paralel cu senzorul este necesar pentru potrivirea impedanței.

Mai întâi trebuie să trimiteți un impuls ultrasonic. Un semnal de 40 kHz este ușor de obținut folosind un microcontroler hardware PWM. Semnalul reflectat de la senzor intră în ADC, rezoluția ADC este de 4 mV, ceea ce este destul de suficient pentru citirea datelor de la senzor și nu sunt necesare componente suplimentare.

Vedere externă a plăcii de dezvoltare a senzorului ultrasonic


Acest senzor este cea mai simplă soluție și, prin urmare, are mai multe dezavantaje: vibrația ușoară a receptorului cu ultrasunete poate duce la măsurători incorecte. Deoarece pulsul trimis nu este modulat sau codificat, sursele străine de frecvență ultrasonică pot interfera cu măsurarea, toate acestea putând duce la rezultate incorecte(depășind limitele de măsurare).

Legendele de pe imagine:

ultrasonic burst - puls ultrasonic;
ecou mecanic (eliminat de software) - ecou mecanic (eliminat de software);
undă ultrasonică reflectată de un obiect îndepărtat - undă ultrasonică reflectată de la un obiect îndepărtat.

Valoarea diviziunii osciloscopului: orizontal - 1 ms/div, vertical - 5 mV/div.

Ecoul mecanic este eliminat în software prin introducerea unei întârzieri. Unda reflectată, având o amplitudine de aproximativ 40 mV, a fost recepționată la 9,5 ms după pulsul trimis. Având în vedere că viteza sunetului este de 340 m/s, obținem:

0,0095 / 2×340 = 1,615 m.

In realitate era tavanul camerei la o distanta de 172 cm de senzor; valoarea de 170 cm era afisata pe display-ul LCD instalat pe placa de depanare.

Descărcări

Cod sursă pentru proiectul de pe microcontrolerul PIC16F877A (compilator mikroC) -

Ocazional, mi-am cumpărat un telemetru cu ultrasunete HC-SR04. Dispozitivul este un modul cu doi emițători piezo, dintre care unul servește ca emițător, iar al doilea ca receptor al unei unde ultrasonice; plus electronică de control pentru a controla emițătorul și receptorul. Pentru conectare, modulul are un conector cu 4 pini: dintre care doi furnizează putere (necesar 5 volți) și încă doi pentru comunicarea cu microcontrolerul.

Interfața de comunicare aici este organizată foarte simplu: aplicăm un impuls scurt cu o durată de 10-15 microsecunde la intrare și așteptăm un impuls la ieșire. Imediat ce unda reflectată ajunge la receptor, modulul însuși calculează distanța și trimite un impuls de nivel înalt de până la 25 ms piciorului Echo. Lungimea impulsului de ieșire va fi proporțională cu distanța până la obstacolul de la care a fost reflectată unda ultrasonică. Tot ce trebuie să facem este să captăm acest impuls, să-i calculăm lungimea și să convertim această valoare în distanță.

Specificații:

  • Tensiune de alimentare: 5V
  • Curent de repaus:< 2 мА
  • Unghiul efectiv de vizualizare:< 15 °
  • Interval de distanta: 2 cm - 500 cm
  • Rezolutie: 0,3 cm

Caracteristicile au fost copiate din documentația pentru modul. În plus, producătorul oferă o formulă pentru calcularea distanței în funcție de durata pulsului.

S=F/58 ; unde S este distanța în centimetri, F este lungimea impulsului în microsecunde

După cum puteți vedea, nici măcar nu este necesar să cunoașteți viteza sunetului.

Pentru testare, am asamblat următorul circuit:

Modulul se conectează direct la microcontroler. Nu este nevoie să instalați rezistențe de tragere; acestea sunt deja pe placa modulului.

Și așa, trebuie să prindem un singur impuls și apoi să-i calculăm lungimea. La început am vrut să folosesc una dintre întreruperile externe ale microcontrolerului în acest scop, iar întreruperea trebuia să se producă atât pe muchia anterioară (trecerea de la starea joasă la starea înaltă), cât și pe muchia în cădere (de la înaltă la scăzută). Adică va trebui să modificați din mers configurația acestei întreruperi. În plus, trebuie să utilizați unul dintre cronometre, care ar trebui să măsoare lungimea pulsului. Prea complicat pentru o operațiune mică de fixare a semnalului.. Bascom-AVR are o comandă specială pentru acest caz Pulsein . Iată un exemplu despre cum să captezi un semnal folosind această comandă:

Pulsein A, Pind, 5 , 1

Aici în variabilă A se va scrie valoarea lungimii impulsului zeci de microsecunde luat de pe picior Pind.5. Cel de la sfârșitul comenzii spune că trebuie să prindeți un semnal de nivel înalt. Dacă este schimbat la 0, atunci controlerul va capta un semnal de nivel scăzut.

Această comandă nu utilizează întreruperi sau un temporizator hardware, dar este capabilă să detecteze apariția unui impuls și să înregistreze durata acestuia cu o rezoluție de 10 μs. Comanda folosește un tip variabil de 2 octeți pentru a stoca lungimea impulsului, astfel încât lungimea maximă a semnalului primit poate fi de 655,35 ms. Acest lucru este suficient pentru sarcina la îndemână, dar, dacă este necesar, puteți edita fișierul de bibliotecă mcs.lib și puteți modifica durata maximă a pulsului înregistrat.

Lista completă a programului este mai jos

$regfile = "m8def.dat"

$cristal = 8000000

„configurarea conectării afișajului la porturile MK

Config Lcd = 16 * 2

Config Lcdpin= Pin, Rs= Portc. 5 , E= Portc. 4 , Db4= Portc. 3 , Db5= Portc. 2 , Db6= Portc. 1 , Db7= Portc. 0

Config Portd. 4 = Ieșire "ieșire pentru conectarea piciorului de declanșare

TriggerAlias Portd. 4

Trigger= 0

Config Portd. 5 = Intrare "intrare pentru impulsul Echo

Config Portd. 7 = Ieșire „Configurație pentru conexiune LED

LEDAlias Portd. 7

LED= 0

Dim ALa fel de Cuvânt „Valoarea lungimii semnalului este copiată aici

Dim SLa fel de Singur „variabilă pentru distanța de stocare

Const K= 0 . 1725 „coeficient de conversie a lungimii impulsului în distanță

Așteaptă 50

Cursor Off

Cls

Lcd „Sonar HC-SR04”

Localiza 2 , 1

Lcd "site-ul web"

LED= 1

Așteaptă 100

LED= 0

Aștepta 3

Do

Trigger= 1 „dăm un impuls piciorului Portd.4 cu o durată de 15 μs

Așteaptă 15

Trigger= 0

Așteaptă 10

Pulsein A, Pind, 5 , 1 „prindem un impuls de nivel înalt pe PinD.5

Telemetru este un dispozitiv pentru măsurarea distanței până la un obiect. Telemetrul ajută roboții în diferite situații. Un robot simplu cu roți poate folosi acest dispozitiv pentru a detecta obstacolele. Drona zburătoare folosește un telemetru pentru a pluti deasupra solului la o altitudine predeterminată. Folosind un telemetru, puteți chiar să construiți o hartă a camerei folosind un algoritm special SLAM.

1. Principiul de funcționare

De data aceasta vom analiza funcționarea unuia dintre cei mai populari senzori - un telemetru cu ultrasunete (SUA). Există multe modificări diferite dispozitive similare, dar toate funcționează pe principiul măsurării timpului de călătorie al sunetului reflectat. Adică, senzorul trimite un semnal sonor într-o direcție dată, apoi captează ecoul reflectat și calculează timpul de zbor al sunetului de la senzor la obstacol și înapoi. Dintr-un curs de fizică școlar știm că viteza sunetului într-un anumit mediu este constantă, dar depinde de densitatea mediului. Cunoscând viteza sunetului în aer și timpul de zbor al sunetului către țintă, putem calcula distanța parcursă de sunet folosind formula: s = v*t unde v este viteza sunetului în m/s, iar t este timpul în secunde. Apropo, viteza sunetului în aer este de 340,29 m/s. Pentru a face față sarcinii sale, telemetrul are două importante caracteristici de proiectare. În primul rând, pentru ca sunetul să fie bine reflectat din obstacole, senzorul emite ultrasunete cu o frecvență de 40 kHz. Pentru a face acest lucru, senzorul are un emițător piezoceramic care este capabil să genereze un astfel de sunet de înaltă frecvență. În al doilea rând, emițătorul este proiectat în așa fel încât sunetul să nu se răspândească în toate direcțiile (cum este cazul difuzoarelor convenționale), ci într-o direcție îngustă. Figura arată modelul de radiație al unui telemetru cu ultrasunete tipic. După cum se poate vedea în diagramă, unghiul de vizualizare al celui mai simplu telemetru cu ultrasunete este de aproximativ 50-60 de grade. Pentru un caz tipic de utilizare, în care senzorul detectează obstacole în fața acestuia, acest unghi de vizualizare este destul de potrivit. Ecografia poate detecta chiar și piciorul unui scaun, în timp ce un telemetru cu laser, de exemplu, poate să nu-l observe. Dacă decidem să scanăm spațiul înconjurător, rotind telemetrul într-un cerc ca un radar, telemetrul cu ultrasunete ne va oferi o imagine foarte inexactă și zgomotoasă. În astfel de scopuri, este mai bine să utilizați un telemetru laser. De asemenea, merită remarcat două dezavantaje serioase ale telemetrului cu ultrasunete. Primul este că suprafețele cu o structură poroasă absorb bine ultrasunetele, iar senzorul nu poate măsura distanța până la acestea. De exemplu, dacă decidem să măsurăm distanța de la un multicopter până la suprafața unui câmp cu iarbă înaltă, cel mai probabil vom obține date foarte neclare. Aceleași probleme ne așteaptă la măsurarea distanței până la un perete acoperit cu cauciuc spumă. Al doilea dezavantaj este legat de viteza undei sonore. Această viteză nu este suficient de rapidă pentru a face procesul de măsurare mai frecvent. Să presupunem că există un obstacol în fața robotului la o distanță de 4 metri. Este nevoie de până la 24 ms pentru ca sunetul să circule înainte și înapoi. Ar trebui să măsurați de 7 ori înainte de a instala un telemetru cu ultrasunete pe roboții zburători.

2. Telemetru cu ultrasunete HC-SR04

În acest tutorial vom lucra cu senzorul HC-SR04 și controlerul Arduino Uno. Acest telemetru popular poate măsura distanțe de la 1-2 cm până la 4-6 metri. În același timp, precizia măsurării este de 0,5 - 1 cm. Există diferite versiuni ale aceluiași HC-SR04. Unii funcționează mai bine, alții mai rău. Le puteți distinge după modelul plăcii de pe verso. Versiunea care funcționează bine arată astfel:

Iată o versiune care poate eșua:

3. Conexiune HC-SR04

Senzorul HC-SR04 are patru ieșiri. Pe lângă masă (Gnd) și putere (Vcc), există și Trig și Echo. Ambii acești pini sunt digitali, așa că îi conectăm la orice pini ai Arduino Uno:
HC-SR04 GND VCC Trig Ecou
Arduino Uno GND +5V 3 2
Schema schematică a dispozitivului Aspectul aspectului

4. Program

Deci, să încercăm să ordonăm senzorului să trimită un impuls ultrasonic de sondare și apoi să înregistrăm revenirea acestuia. Să vedem cum arată diagrama de timp a HC-SR04.
Diagrama arată că pentru a începe măsurarea trebuie să generăm la ieșire Trig impuls pozitiv de 10 µs. După aceasta, senzorul va elibera o serie de 8 impulsuri și va ridica nivelul la ieșire Ecou, trecând la modul de așteptare a semnalului reflectat. Odată ce telemetrul simte că sunetul a revenit, va completa un impuls pozitiv Ecou. Se pare că trebuie să facem doar două lucruri: să creăm un puls pe Trig pentru a începe măsurarea și să măsuram lungimea pulsului pe Echo, astfel încât să putem calcula distanța folosind o formulă simplă. Hai să o facem. int echoPin = 2; int trigPin = 3; void setup() ( Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); ) void loop() ( int durata, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite (trigPin, HIGH); delayMicrosecunde(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = durata / 58; Serial.print(cm); Serial.println("cm"); întârziere (100); ) Funcție pulsIn măsoară lungimea pulsului pozitiv pe piciorul echoPin în microsecunde. În program, înregistrăm timpul de zbor al sunetului în variabila durată. După cum am aflat mai devreme, va trebui să înmulțim timpul cu viteza sunetului: s = durata * v = durata * 340 m/s Convertiți viteza sunetului de la m/s la cm/μs: s = durata * 0,034 m/µs Pentru comoditate, convertim fracția zecimală într-o fracție obișnuită: s = durata * 1/29 = durata / 29 Acum să ne amintim că sunetul a parcurs două distanțe necesare: până la țintă și înapoi. Să împărțim totul la 2: s = durata / 58 Acum știm de unde a venit numărul 58 din program! Încărcați programul pe Arduino Uno și deschideți monitorul portului serial. Să încercăm acum să îndreptăm senzorul către diferite obiecte și să ne uităm la distanța calculată pe monitor.

Sarcini

Acum că putem calcula distanța folosind un telemetru, vom realiza mai multe dispozitive utile.
  1. Telemetru de construcție. Programul măsoară distanța la fiecare 100 ms folosind un telemetru și afișează rezultatul pe un afișaj LCD simbolic. Pentru comoditate, dispozitivul rezultat poate fi plasat într-o carcasă mică și alimentat de baterii.
  2. Bastonul cu ultrasunete. Să scriem un program care va „bipa” un sonerie la frecvențe diferite, în funcție de distanța măsurată. De exemplu, dacă distanța până la un obstacol este mai mare de trei metri, soneria emite un sunet o dată la jumătate de secundă. La o distanță de 1 metru - o dată la 100 ms. Mai puțin de 10 cm - emite un bip constant.

Concluzie

Telemetrul cu ultrasunete este un senzor ușor de utilizat, ieftin și precis, care și-a îndeplinit bine funcția pe mii de roboți. După cum am învățat în lecție, senzorul are dezavantaje care ar trebui să fie luate în considerare la construirea unui robot. O soluție bună ar fi să folosiți un telemetru cu ultrasunete asociat cu unul laser. În acest caz, își vor nivela reciproc deficiențele.

HC-SR04 este unul dintre cele mai comune și mai ieftine telemetru din robotică. Vă permite să măsurați distanțe de la 2 cm la 4 m (poate mai mult) cu o precizie decentă de 0,3-1 cm. Ieșirea este un semnal digital, a cărui durată este proporțională cu distanța până la obstacole.

Telemetru cu ultrasunete

Am achiziționat acest senzor cu mult timp în urmă și zăceam în cutia lui, aproape uitat. Dar, în cadrul unui proiect, a fost scos în lumină și, pentru referință, a fost construit un telemetru destul de compact pe baza acestuia și a plăcii voltmetrului.

Telemetru cu ultrasunete HC-SR04

Caracteristicile senzorului:

Putere - 5V
Consum de curent: mai puțin de 2mA
Unghi de vizualizare eficient - 15 grade
Distanta de masurare - 2cm - 5m
Precizie - 3 mm
Preluat din documentația pentru senzor

Principiul de funcționare al HC-SR04

Principiul de funcționare

Modulul are 4 pini, dintre care doi sunt putere - masă și +5V, iar încă doi sunt date. Modulul este interogat în felul următor: un impuls cu o durată de 10 μs este trimis către pinul Trig. Telemetrul generează un pachet de 8 impulsuri ultrasonice de 40 KHz. Care, reflectate de majoritatea suprafețelor, revin înapoi dacă nu se estompează pe parcurs. Imediat după trimiterea semnalului către Trig, începem să ne așteptăm la un semnal de răspuns pozitiv de la ieșirea Echo, care durează de la 150 μs la 25 ms, care este proporțional cu distanța până la obiect. Mai exact, timpul de călătorie de la senzor la obstacol și înapoi. Dacă nu există niciun răspuns (senzorul nu își va auzi ecoul), atunci semnalul va reveni 38 ms. Distanța până la obiect (obstacol) se calculează folosind următoarea formulă simplă:

Unde: L este distanța în centimetri până la obiect și F este lungimea impulsului la pinul Echo.
Timpul de interogare recomandat al senzorului este de 50 ms sau 20 Hz.

Primele teste ale acestui modul au fost efectuate folosind un osciloscop digital, care a captat răspunsul de la modul și manual, scurtând rapid Trig la + putere, a încercat să obțină un impuls de pornire de 10 μs. În jumătate din cazuri a funcționat [:)].

Proiecta

Senzorul a fost conectat la o placă de voltmetru cu un anod comun, ușor modificat pentru a funcționa cu acesta (divizorul inutil cu condensator a fost îndepărtat și ieșirea de la RA3 a fost adăugată). A fost folosit un microcontroler din versiunea 5 a voltmetrului - PIC16F688, cu firmware-ul revizuit pentru telemetrul cu ultrasunete.