Contacte

Arduino: Finder cu ultrasunete HC-SR04. Ultrasonic Rangefinder HC-SR04 - Utilaje de măsurare - Uneltrasonder Rangefinder Unelte pe un microcontroler cu propriile mâini

Bruno Gavand.

Proiectul în care soluția simplă și ieftină a senzorului cu ultrasunete pentru măsurarea distanței se face pe baza microcontrolerului PIC16F877A al companiei, dar utilizatorii sursă Acesta poate fi adaptat altor microcontrolere. Senzorul poate fi încorporat în evoluții și dispozitive personalizate: detectoare de prezență, roboți, sisteme de parcare auto, dispozitive de măsurare la distanță etc.

Trăsături distinctive:

  • un număr mic de componente externe;
  • cod Dimensiune 200 octeți;
  • gama de distanțe de lucru: 30 cm - 200 cm;
  • acuratețe de măsurare ± 1 cm;
  • indicație atunci când părăsiți limitele de măsurare.

După cum știți, viteza sunetului în aer este de aproximativ 340 m / s. Astfel, principiul senzorului cu ultrasunete constă în trimiterea unui impuls cu ultrasunete cu o frecvență de 40 kHz și urmărirea semnalului reflectat (ecou). Desigur, sunetul pe care nu îl auziți, dar senzorul cu ultrasunete este capabil să determine impulsul reflectat. În consecință, cunoașterea timpului pulsului și a semnalului de ultrasunete reflectate, putem obține distanța. Împărțit în două, obținem distanța de la senzorul cu ultrasunete la primul obstacol, din care a fost reflectat semnalul.

Dispozitivul utilizează un emițător cu ultrasunetic piezoceramic MA40B8S și un senzor cu ultrasunetic piezoceramic MA40B8R tip deschis. Parametrii principali sunt prezentați în tabelul de mai jos.

Dispozitiv Scop Frecvență Focus
Grad.
Capacitate,
Pf.
Regiune
detectare
M.
Intrare
Voltaj,
Max, B.
MA40B8S. Emițător 40 khz. 50 (simetrice) 2000 0.2 … 6 40
MA40B8R. Senzor 40 khz. 50 (simetrice) 2000 0.2 … 6

Pentru testare, a fost aplicată platforma de depanare a unei companii.

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

Conceptul senzorului cu ultrasunete

Radiatorul este controlat de tranzistorul BD135. Dioda 1N4007 este utilizată pentru a proteja tranzistorul de tensiunea inversă. Datorită utilizării tranzistorului și a lanțului rezonant, care este formată incluziune paralelă Drumatoarele L1 330 μH și condensatorul formate de emițătorul în sine, tensiunea de alimentare cu energie electrică va fi de aproximativ 20 V, care asigură o gamă de detecție de până la 200 cm. Este demn de remarcat faptul că este posibil să controlați emițătorul direct de la ieșirea microcontrolerului , dar în acest caz intervalul de distanță nu depășește 50 cm.

Senzorul este conectat direct la microcontrolerul ADC (utilizând PIC16F877A - canal 1 ADC), rezistorul inclus în paralel cu senzorul este necesar pentru a se potrivi cu impedanța.

Pentru a începe, este necesar să trimiteți un impuls ultrasonic. Un semnal cu o frecvență de 40 kHz este ușor de obținut utilizând un hardware de microcontroler. Semnalul reflectat de la senzor intră în ADC, permisiunea ADC este de 4 mV, ceea ce este suficient pentru a citi datele de la senzor, iar componentele suplimentare nu sunt necesare.

Aspectul bordului de matriță a senzorului cu ultrasunete


Acest senzor este cea mai simplă soluție și, prin urmare, are mai multe dezavantaje: o vibrație mică a unui receptor cu ultrasunete poate duce la măsurători incorecte. Deoarece impulsul trimis nu este modulat și nu codificat, sursele de frecvență ultrasonică străină pot afecta măsurarea și toate acestea pot duce la rezultate incorecte (producția dincolo de măsurători).

Inscripții din imagine:

explozia cu ultrasunete - impulsul cu ultrasunete;
ECHO mecanic (eliminat prin software) - ECHO mecanic (software software);
Undă ultrasonică reflectată de obiectul de la distanță este un val cu ultrasunete reflectat de obiectul la distanță.

Oscilloscop Division Pret: orizontal - 1 ms / afacerile, vertical - 5 mV / cazuri.

ECHO mecanică este exclusă programatic prin introducerea unei întârzieri. Un val reflectat având o amplitudine de aproximativ 40 mV a fost obținut după 9,5 ms după un puls trimis. Având în vedere că viteza de sunet este de 340 m / s, obținem:

0,0095 / 2 × 340 \u003d 1,615 m.

În realitate - a fost un plafon al camerei la o distanță de la senzorul de 172 cm, pe ecranul LCD instalat pe debugboard. A fost afișată o valoare de 170 cm.

Descărcări

Codul sursă la proiect de pe microcontroler PIC16F877A (compilator mikroc) -

Unele comentarii:
Toate elementele necesare pentru a crea un interval de distribuție ultrasunete pentru această schemă sunt vândute în chipidype, costă aproximativ 500-900r pentru tot (nu-mi amintesc exact - au fost mulți bani, nu au conta :-). (corp, girosea, alți conectori)
Unele comentarii privind schema de detectare a intervalului cu ultrasunete:
1. Cookie-urile pot folosi orice, pentru că sarcinile diferite sunt mai bune ... Pentru sarcina mea - cu atât mai mult dimensiunile sunt mai bune, unghiul 50.
2. Puteți încerca să utilizați doar un AD822 AD822 relativ scump și pe locul comparatorului firului pentru mai ieftin (pur și simplu nu am altceva la îndemână)
3. În Mega pentru a genera 40 de kilohertzi, puteți utiliza un cronometru, pentru că aveți nevoie pentru a ridica un alt rezonator. (Am avut doar 16 și 12 .. Nu sunt potrivite)
4. Viteza sunetului în aer depinde de temperatură - dacă acuratețea este foarte importantă (nu-mi pasă), atunci iau în considerare
5. Rețineți că, în imaginea intervalului de interval de caz, nu se referă la materialele plastice - o persoană a spus că atunci când mega-tuning ( această schemă Capabil și pe acest lucru) Sunetul de la sulf la microfon va fi transmis de caz, este mai bine să fie reînnoit
6. Un exemplu al celui mai simplu firmware de mega pe C (sub această schemă) poate fi vizualizat
7. Programatorul este mai bine de utilizat STK200 / 300 Este avreal - software-ul și schema pot fi tocate
8. Prin minte în firmware-ul, trebuie să urmăriți începutul și sfârșitul "ambalajului", în exemplul, numai începutul (precizia va crește în mod specific) .. Pot să-l termin.
9. Scena iubește 40 khz - un pic în direcția nu este deloc ... probabil adevărul în manual pe care îl scriu acel rezonant :-)
10. În diagrama unei prostii în radiatorul tranzistoarelor Ponapihan - dorea să dea mai multă volți decât 12 - Velkom - o persoană a spus că va scârțâi mai tare (conta pe). Nu am făcut acest lucru în trei motive: În primele 24 de volți, este necesar să se găsească în altă parte, în cea de-a doua versiune curentă la înființarea rhizistorului, deci vedeți peretele timp de 4 metri, adică Nu sunt unde să o experimentez și nu este nevoie. Ei bine, al treilea motiv pentru care aceeași persoană a spus că delenii tind să moară pe această tensiune
11. Consiliul General: Puteți găsi toate rezistoarele și condensatoarele din unitatea non-de lucru a sursei de alimentare de la computerul ATX (ele există totul este undeva 1/8 lână) - economisiți bani!
12. Opinia eronată că ultrasunetele publicate de Hestbe într-un fel poate auzi Sobami și alte creaturi, îi influențează prost: câinele meu a venit ca pe timp de noapte și a căzut în fața stoarceului inclus.
13. Mai mult - deci doar la mesajul - Mega și alți 8bit Controlere de la ATMLA - sunt urmărite perfect .. am în unele provocări în loc de stânga 16 la 24 și în mod normal.
14. La eliminarea R5 de mai sus, kiloma (10, 50, 100) va fi un câștig foarte mare și, cel mai probabil, vor avea nevoie de un corn, dar gama de măsurători va crește foarte mult.
15. În loc să eliminați rupurile (cu mari R5), vedeți mai sus, puteți actualiza firmware-ul că nu ar fi așteptat un semnal util la momentul inițial. Dar atunci este imposibil să se măsoare distanțele de aproximativ 10 cm și mai puțin.

Comentariul la Consiliul 8 - Galben Marcat momentul funcționării întreruperii ultrasonice la recepție, poate fi limitat la același moment, așteptați puțin și faceți următoarea măsurătoare, la următorul pachet de Pulsul - și timpul timpul de zbor este considerat timp de la primul puls trimis (sau din urmă nu este important) la prima adoptare.
A doua opțiune este marcată cu roșu - mai precisă - deoarece pachetul de impulsuri nu este de obicei realizat (acesta nu poate fi o pereche de primele trei sau ultimele impulsuri), în funcție de imagine, este clar că ea "aplatizată" În jurul marginilor, deși dreptunghiul perfect al impulsurilor a mers - așa: punctul este că mijlocul ambalajului ar trebui să rămână în poziție, în ciuda faptului că marginile nu mai pot fi comparatori. Deci, precizia în mai multe ... (Milmetre trebuie să gândească) depinde de faptul dacă a fost luată în considerare în firmware-ul de la distanță cu ultrasunete a mijlocului sau numai începutul ambalajului atunci când îl luați înapoi.

Senzorii de distanțe arduino cu ultrasunete sunt foarte solicitate în proiecte robotice datorită simplității sale relative, preciziei suficiente și disponibilității. Acestea pot fi folosite ca instrumente care ajută transversalele în jurul obstacolelor, obțineți dimensiunea articolelor, simulați harta camerei și semnalizați aproximarea sau îndepărtarea obiectelor. Una dintre variantele comune ale unui astfel de dispozitiv este un senzor de distanță, în proiectarea căreia include un interval de distribuție ultrasonic HC SR04. În acest articol vom fi familiarizați cu principiul senzorului de distanță, luați în considerare mai multe opțiuni pentru conectarea la plățile Arduino, schema de interacțiune și schițele.

Abilitatea unui senzor ultrasonic de a determina distanța față de obiect se bazează pe principiul sonar - trimiterea unui fascicul de ultrasunete și obținerea reflecției sale cu o întârziere, dispozitivul determină prezența obiectelor și a distanței față de ele. Semnalele ultrasonice generate de receptor, reflectate din obstacole, revin la el după o anumită perioadă de timp. Acest interval de timp care devine caracteristic pentru a ajuta la determinarea distanței de obiect.

Atenţie! Deoarece principiul operațiunii se bazează pe ultrasunete, acest senzor nu este potrivit pentru determinarea distanței la obiectele absorbante de sunet. Optimal pentru măsurători sunt obiecte cu o suprafață netedă plană.

Senzor Descriere HC SR04

Senzorul de distanță Arduino este un dispozitiv de tip fără contact și oferă măsurători și stabilitate de înaltă precizie. Gama de distanță a măsurătorilor sale variază de la 2 la 400 cm. Nu are efecte semnificative ale radiației electromagnetice și ale energiei solare. Modulul cu HC SR04 Arduino include, de asemenea, un receptor și un transmițător.

Ultrasonic HC SR04 Rangefinder are astfel de parametri tehnici:

  • Tensiunea de alimentare 5V;
  • Parametrul de lucru t oka - 15 ma;
  • Puterea curentă în stare pasivă< 2 мА;
  • Unghi panoramic - 15 °;
  • Rezoluție senzorială - 0,3 cm;
  • Unghiul de măsurare - 30 °;
  • Lățimea pulsului - 10 -6 s.

Senzorul este echipat cu patru ieșiri (standard 2, 54 mm):

  • Contactul de putere al unui tip pozitiv - + 5V;
  • Trig (t) - ieșirea semnalului de ieșire;
  • ECHO (R) - ieșirea semnalului de ieșire;
  • GND - Retragerea "Pământului".

Unde să cumpărați un modul SR04 pentru Arduino

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

Modul senzor de distanță HC-SR04 pentru Arduino O altă opțiune a senzorului HC-SR04 cu ultrasunete într-un furnizor fiabil
Senzori de distanță HC-SR05 cu ultrasonierală (caracteristici îmbunătățite) Modul HC-SR05 HY-SRF05 pentru UNO R3 Mega2560 Datorită unui furnizor fiabil

Schema de interacțiune cu Arduino

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

  • Trimiteți-l pe pulsul de trig de ieșire cu o durată de 10 microS;
  • În Rannellor HC SR04 cu ultrasunete conectat la Arduino, convertirea semnalului în 8 impulsuri cu o frecvență de 40 kHz va fi convertită, care va fi trimisă înainte prin emițător;
  • Atunci când impulsurile ating obstacolul, ele le vor afecta și vor fi acceptate de receptorul R, care va asigura prezența unui semnal de intrare la ieșirea ecoului;
  • Pe partea laterală a controlerului, semnalul primit cu ajutorul formulelor trebuie tradus în depărtare.

Când împărțiți lățimea pulsului la 58,2, vom primi date în centimetri, atunci când sunt împărțiți la 148 - în inci.

Conectați HC SR04 la Arduino

Conectați senzorul de distanță cu ultrasunete la panou Arduino. destul de simplu. Diagrama de conectare este prezentată în figură.

Contactați Pământul Conectarea ieșirii GND pe panoul Arduino, conectați puterea de la 5V. TRIG și ECHO Ieșirile se conectează la Arduino la pinii digitali. Opțiunea de conectare utilizând o bord îndrăzneț:

Biblioteca pentru lucrul cu HC SR04

Pentru a facilita lucrul cu senzorul de distanță HC SR04 pe Arduino, puteți utiliza biblioteca de noul. Nu are probleme cu accesul la Ping și adaugă câteva caracteristici noi.

Caracteristicile bibliotecii includ:

  • Capacitatea de a lucra cu diferiți senzori de ultrasunete;
  • Poate lucra cu un senzor de distanță într-un singur pin;
  • Nici o întârziere timp de 1 secundă în absența ecoului ping;
  • Pentru corectarea ușoară a erorilor, există un filtru digital încorporat;
  • Distanța maximă de calcul precisă.

Descărcați Bibilot Newing

Distanță de măsurare a acurateței cu senzorul HC SR04

Precizia senzorului depinde de mai mulți factori:

  • temperatura și umiditatea aerului;
  • distanțe față de obiect;
  • locație în raport cu senzorul (conform diagramei de radiație);
  • performanța calității elementelor modulului senzor.

Baza principiului de funcționare a oricărui senzor ultrasonic este fenomenul de reflectare a undelor acustice care se propagă în aer. Dar, așa cum este cunoscut din cursul fizicii, viteza de propagare a sunetului în aer depinde de proprietățile acestui aer însuși (în primul rând pe temperatură). Senzorul, valurile emise și timpul de măsurare înainte de întoarcerea lor, nu recunoaște, în ce mediu se vor răspândi și vor lua o valoare medie pentru calcule. În condiții reale, datorită factorului de temperatură a aerului, HC-SR04 poate fi greșit de la 1 la 3-5 cm.

Factorul de distanță la obiect este important, deoarece Probabilitatea de reflecție din elementele învecinate este în creștere, iar semnalul însuși se estompează de la distanță.

De asemenea, pentru a îmbunătăți acuratețea, trebuie să trimiteți corect senzorul: faceți-o astfel încât subiectul să se afle în conul diagramei de radiații. Pur și simplu pune, "ochii" HC-SR04 ar trebui să privească direct pe această temă.

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

  • valorile sunt medii (măsurați de mai multe ori, eliminăm explozii, apoi găsim media);
  • cu ajutorul senzorilor (de exemplu,), temperatura este determinată și se fac coeficienții de corecție;
  • senzorul este instalat pe servomotor, cu care "rotiți capul" prin deplasarea diagramei de radiații la stânga sau spre dreapta.

Exemple de utilizare a senzorului de distanță

Să luăm în considerare un exemplu de proiect simplu cu Board Arduino Uno și senzorul de distanță HC SR04. În schiță, vom primi valoarea distanței la elemente și vom afișa pe monitorul portului din mediu Arduino IDE.. Puteți schimba cu ușurință schema de schiță și conexiune, astfel încât senzorul să semnaleze aproximarea sau distanța elementului.

Conectarea senzorului la Arduino

La scrierea unei schițe, următoarea opțiune de identificare a conexiunii senzorului a fost utilizată:

  • VCC: + 5V
  • TRIG - 12 PIN
  • ECHO - 11 PIN
  • Pământ (GND) - Pământ (GND)

Eșantion de schiță

Să începem să lucrăm cu senzorul imediat de la opțiunea complexă relativă - fără a utiliza biblioteci externe.

În această schiță, efectuăm o astfel de secvență de acțiuni:

  • Un impuls scurt (2-5 microsecunde) traduce senzorul de distanță în modul de ecolocare, în care valurile cu ultrasunete cu o frecvență de 40 kHz sunt trimise în spațiul înconjurător.
  • Așteptăm până când senzorul analizează semnalele și întârzierea reflectată vor determina distanța.
  • Obținem valoarea distanței. Pentru aceasta așteptăm până când HC SR04 dă un impuls de ecou proporțional cu ecoul. Definim durata pulsului utilizând funcția Pulsein, care va reveni la timp înainte de a schimba nivelul semnalului (în cazul nostru, până când apare frontul invers al impulsului).
  • După ce am primit timp, o traducem în depărtare în centimetri prin împărțirea valorii la constantă (pentru senzorul SR04, este 29.1 pentru semnalul "acolo", la fel de mult ca semnalul "spate", care va da 58.2) .

Dacă senzorul de distanță nu citește semnalul, atunci conversia semnalului de ieșire nu va accepta niciodată valoarea pulsului scurt - scăzut. Deoarece unii senzori, timpul de întârziere variază în funcție de producător, este recomandat atunci când utilizați schițele specificate pentru a-și stabili manual valoarea (facem la începutul ciclului).

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

#Define pin_trig 12 #define pin_echo 11 durata lunga, cm; VOID SETUP () (// inițializați interacțiunea pe serial.BEGING SERIAL.BEIN (9600); durata pulsului de 2-5 microsecunde. Digital (Pin_trig, Low); DelawmicroSeconds (5); digital (Pin_trig, High); / / Expunere nivel inalt Semnal, așteptând aproximativ 10 microsecunde. În acest moment, senzorul va trimite semnale cu o frecvență de 40 kHz. ÎntârzieriMatecunde (10); DigitalWrite (Pin_trig, Low); // timpul de întârziere al semnalului acustic asupra ecolocatorului. Durata \u003d Pulsein (Pin_echo, High); // Acum rămâne să convertiți timpul la distanță cm \u003d (durata / 2) / 29.1; Serial.print ("Distanța față de obiect:"); Serial.print (cm); Serial.println ("a se vedea"); // întârzierea între măsurătorile pentru funcționarea corectă a întârzierii (250); )

Schiță folosind biblioteca de noul

Acum, să ne uităm la versiunea schiței folosind biblioteca de noul. Codul va fi erupt în mod semnificativ, pentru că Toate acțiunile descrise anterior sunt ascunse în interiorul bibliotecii. Tot ceea ce trebuie să facem este să creăm un obiect de clasă nou prin specificarea unui PIN, cu care conectăm senzorul de distanță și utilizarea metodelor de obiect. În exemplul nostru, este necesar să utilizați Ping_cm () pentru a obține o distanță de centimetri.

#Include. #define pin_trig 12 #define pin_echo 11 #define max_distance 200 // Constant pentru determinarea distanței maxime Vom fi considerate corecte. // Creați un obiect ale cărui metode va folosi apoi pentru a obține o distanță. // ca parametri trimit numărul de pini la care sunt conectate ieșirile Echo și Trig ale senzorului sonar nou (Pin_trig, Pin_echo, max_discagenie); Setup () (// inițializați interacțiunea pe un port serial la o viteză de 9600 serial.Bel (9600);) (// întârziere de pornire necesară pentru munca corectă. Întârzie (50); // obțineți Valoarea de la senzorul de distanță și salvați-o la o variabilă nesemnată Int Distance \u003d Sonar.ping_cm (); // Imprimați distanța în monitorul serialului (distanța); serial.println ("cm");)

Un exemplu de conectare a unui distribuitor ultrasonic HC SR04 cu un singur PIN

Conectarea HC-SR04 la Arduino poate fi efectuată utilizând un singur cod PIN. Această opțiune este utilă dacă lucrați cu un proiect mare și lipsiți de pini liberi. Pentru a vă conecta, trebuie doar să instalați între contactele TRIGA ECHO cu un rating de 2.2k și conectați Contact TRIG la Arduino.

#Include. #Define pin_ping 12 // PIN cu Arduino conectat la declanșator și știfturi de ecou pe #define max_distance 200 // distanța maximă pe care o putem controla (400-500cm). Sonar nou (Pin_ping, Pin_ping, Max_Distance); // ajustarea pinilor și configurarea maximă a VOID () (Serial.BEGIN (9600); // a deschis un protocol cu \u200b\u200bdate și o frecvență de transmisie de 115200 biți / s.) Buclă void () (întârziere (50); // 50 ms Întârzierea între valurile generate. 29 ms - valoarea minimă admisibilă nesemnată int distancesm \u003d sonar.ping (); // crearea unui semnal, primind parametrul duratei sale în ISS (SUA). Serial.print ("Ping:" ); Serial.print (distanțe / us_roundtrip_cm); // recalcularea parametrului de timp în valoarea distanței și ieșirea (0 corespunde ieșirii limită admisă) Serial.println ("cm"); )

Concluzii scurte

Senzorii de distanțe ultrasonice sunt destul de universale și corecte, ceea ce le permite să fie utilizate pentru majoritatea proiectelor amatori. Articolul descrie senzorul extrem de popular HC SR04, care este ușor conectat la placa Arduino (pentru aceasta, trebuie să furnizați imediat două știfturi libere, dar există o opțiune de conectare și cu un singur PIN). Există mai multe senzori pentru a lucra cu senzorul. biblioteci gratuite (Articolul descrie doar unul dintre ele, nou), dar puteți face fără ele - algoritmul de interacțiune cu controlerul senzorului intern este destul de simplu, l-am arătat în acest articol.

Bazat experiență proprieSe poate argumenta că senzorul HC-SR04 prezintă precizia în decurs de un centimetru la distanțe de la 10 cm până la 2 m. În distanțe mai scurte și lungi, este posibilă o interferență puternică, ceea ce depinde puternic de elementele înconjurătoare și de metoda de utilizare. Dar, în majoritatea cazurilor, HC-SR04 se confruntă perfect cu munca sa.

HC-SR04 Unul dintre cele mai frecvente și mai ieftine cadre în robotică. Vă permite să măsurați distanțele de la 2 cm la 4m (poate mai mult) cu o precizie decentă de 0,3-1 cm. La ieșire semnal digital., a cărui durată este proporțională cu distanța față de obstacole.

Distribuție ultrasonică

Acest senzor a fost deja achiziționat pentru o lungă perioadă de timp și a stat în cutia lui aproape uitat. Dar, în cadrul aceluiași proiect, a fost eliminat pe lumina albă și, pentru familiarizare, pe baza acesteia, iar taxa de voltmetru a fost construită un detector destul de compact.

Ultrasunete Ranger HC-SR04

Caracteristicile senzorului:

Nutriție - 5V.
Curent consumat - mai puțin de 2mA
Unghi de vizualizare eficient - 15g
Distanța măsurată - 2 cm - 5m
Precizie - 3mm.
Luate din documentația pentru senzor

Principiul operațiunii HC-SR04

Principiul de funcționare

Modulul are 4 ieșiri, dintre care două sunt masa de masă și + 5V și încă două date. Sondajul modulului se face în felul următor: un impuls este trimis la ieșirea TRIG cu o durată de 10μs. Rangefinder generează o parcelă de 8 impulsuri cu ultrasunete de 40kHz. Care, reflectând de la cele mai multe suprafețe, întoarceți-vă înapoi, dacă nu sunt estompate pe drum. Imediat după trimiterea semnalului la Trig, începem să așteptăm un semnal de răspuns cu o ieșire de ecou, \u200b\u200bo durată de la 150μs la 25 ms, care este proporțională cu distanța față de obiect. Mai precis, trecerea timpului de la senzor la obstacole și spate. Dacă nu există niciun răspuns (senzorul nu aude ecoul său) - atunci semnalul va reveni la 38 ms lungime. Distanța la obiect (obstacole) este calculată prin următoarea formulă simplă:

Unde: L este distanța în centimetri la obiect și f este lungimea pulsului la ieșirea ecoului.
Timpul de anchetă recomandat al senzorului 50 ms sau 20Hz.

Primele teste ale acestui modul efectuate cu ajutorul unui osciloscop digital, care a prins un răspuns din modulul și în manual, închiderea rapidă a trig-ului de + nutriție, a încercat să obțină impulsul de pornire 10 MX. În jumătăți de cazuri sa dovedit [:)].

Proiecta

Senzorul a fost conectat la placa de voltmetru cu un anod comun, puțin modificat pentru a lucra cu el (îndepărtat separator inutil cu un condensator și o putere adăugată de la RA3). Un microcontroler a fost aplicat din versiunea 5 a voltmetrului - PIC16F688, cu un firmware rafinat cu un interval de acțiune.

Senzor de distanță HC-SR04 cu ultrasunete (și module similare) utilizează valuri cu ultrasunete pentru a determina distanța de obiect.

În general, va trebui să ne dăm seama de distanța față de obiect, deoarece senzorul în sine ia în considerare pur și simplu timpul care merge pentru a prinde ecoul din valurile sonore trimise la ei. Acest lucru se întâmplă în acest fel:

  1. Modulul trimite unde de sunet, în același timp, hrăniți tensiunea unui ecou special IDU.
  2. Modulul captează semnalul reflectat și îndepărtează tensiunea de la știft.

Asta e tot ceea ce face un interval cu ultrasunete. Putem determina singura distanta, pentru ca stim cat de mult timp a luat de la sunet pentru a face o excursie de la modul si inapoi (cat timp ca ecoul PIN-ului a fost sub tensiune), precum si cunosc viteza sunetului in aer. Dar nu vom merge prea mult la detalii și nu vom lăsa pe Arduino să facă toate calculele.

Apropo, în ciuda faptului că principiul de funcționare a tuturor senzorilor cu ultrasunete este același, nu toți produc aceeași ieșire a tensiunii asupra echității IDU. Deci, dacă aveți un alt modul decât HC-S04, faceți o atenție la al patrulea pas, unde sunt descrise probleme posibile, și verificați, poate modulul dvs. este în listă. Dacă nu este acolo, va trebui să vă ocupați de propria dvs.

Pasul 1: Ansamblul de fier cu mâinile tale

Adunarea este foarte simplă (colectați totul deconectat de la tensiune):

  1. Cuplu 5V de la Arduino cu PIN VCC pe modul
  2. Conectați GND de la Arduino cu GND pe modul
  3. Conectați PIN-ul digital 7 pe Arduino cu Trig Trig pe modulul
  4. Cuplu modul digital. 8 pe Arduino cu ecou PIN pe modulul

Pasul 2: Programarea modulului HC-SR04

Pentru a vedea rezultatele programului, trebuie să executați monitorul serial pe Arduino. Dacă nu sunteți familiarizat cu această caracteristică, acum este timpul să-l deschideți și să aflați mai multe despre el - acesta este un lucru minunat care ajută la depanarea codului. În interfața Arduino, uitați-vă la colțul din dreapta, veți găsi un buton care rulează monitorul serial, arată ca un geam de lupă, faceți clic pe acesta și monitorul se va deschide (sau se selectează Instrumente / Serial Monitor sau apăsați CTRL + Shift + m).

Iată o schiță program de lucru:

// Schița de la Aruino -
// Determinați constantele (Constantele nu se schimbă și dacă încercați să le suprascrie, obțineți o eroare în timpul compilației)
Const int triggerpin \u003d 7; // creează o constantă cu numele "triggerpin" și atribuie pinul digital 7 pentru ea
Const int echopin \u003d 8; // creează o constantă cu numele "Echopin" și prescrie pinul digital 8 pe el
// determină variabilele (variabilele pot varia și, de obicei, se schimbă în cursul programului, acestea pot conține valori calculate)
INT DURATA \u003d 0; // creează o variabilă numită "Durata" pentru stocarea valorii returnate de Pulsein, inițial valoarea este setată la "0"
Int distanta \u003d 0; // creează o variabilă pentru stocarea valorii calculate ca o distanță la un obiect situat în fața senzorului, inițial valoarea este setată la "0"
VOID SETUP () // În această secțiune puteți configura taxa și alți parametri necesari pentru programul dvs.
{
Serial.Bel (9600); // inițializează comunicarea consistentă prin USB între Arduino și Computer, vom avea nevoie de ea
// determină modurile de pini
Pinmode (Triggerpin, ieșire); // "triggerpin" va fi folosit pentru a ieși, numărul PIN este declarat mai sus în secțiunile "Determinat variabile"
Pinmode (ecopină, intrare); // "Echopin" va fi folosit pentru a intra, numărul PIN este declarat mai sus în secțiunea "Determinată variabile"
) // SETUP SETUP
// Tot ceea ce a fost scris mai sus este citit de program o singură dată - când porniți sau resetați (resetați)
Loopul Void () // Codul programului din partea împrumutului este ușor de ușor și repetat până când alimentarea este oprită sau nu va fi resetată
{
Digital (Triggerpin, ridicat); // începe să hrănească valurile de ultrasunete de la modulul HC-SR04
Întârzierea (5); // Pauză mică, este necesară, astfel încât funcția modulului să fie corectă (puteți reduce această valoare, alte programe ale mele funcționează la o valoare de 1)
DigitalWrite (Triggerpin, Low); // oprește undele ultrasonice provenind din modulul HC-SR04
Durata \u003d pulsina (echopin, mare); // Funcție specială care vă permite să determinați durata timpului în care a fost furnizată tensiunea din ecoul final în ultimul ciclu de alimentare cu ultrasunete completate
Întârzierea (10); // Din nou o pauză mică. Este necesar ca stabilitatea, pauza prea scurtă poate să nu dau rezultate
Distanță \u003d (durata / 2) / 58; // Durata de transformare la distanță (valoarea salvată în "durată" este împărțită în 2, atunci această valoare este împărțită la 58 **) ** timp de centimetri
Întârzierea (500); // O altă pauză pentru stabilitate - puteți juca cu valoarea, dar poate strica munca programului, astfel încât să utilizați 500 de implicit
Serial.print (distanță); // trimite valoarea calculată a distanței la monitorul serial
Serial.println ("cm"); // adaugă cuvântul "cm" după valoarea distanței și traduce carul de pe monitorul serial la noua linie
Serial.println (); // adaugă un șir gol pe monitorul serial (pentru citirea ușoară)
) // sfârșitul ciclului

_________________________________________________

Deci, după ce mi-am citit instrucțiunile, mi-am dat seama că schița programului nu corespunde înțelegerii mele de simplitate. Prin urmare, am postat aceeași schiță cu comentarii de lumină.

// HC-SC04 Modul senzor de distanțare cu ultrasunete
Const int triggerpin \u003d 7; // declanșator la 7
Const int echopin \u003d 8; // Echo pe 8
INT DURATA \u003d 0; // stochează valoarea de la Pulsein
Int distanta \u003d 0; // stochează valoarea distanței calculate
VOID SETUP ()
{
Serial.Bel (9600);
Pinmode (Triggerpin, ieșire); // determină modurile de pini
Pinmode (ecopină, intrare);
}
buclă void ()
{
Digital (Triggerpin, ridicat); // începe să trimită ultrasunete
Întârzierea (5); // comanda necesară este configurată (dar nu mai mică de 10microspecți)
DigitalWrite (Triggerpin, Low); // modulul oprește trimiterea cu ultrasunete
Durata \u003d pulsina (echopin, mare); // determină cât timp a fost servit tensiunea de a fixa ecoul
Întârzierea (10); // comanda necesara este configurata, dar curat
Distanța \u003d (durata / 2) / 58; // hodie distanța în cc la obiect
Întârzierea (500); // pauza pentru stabilitate, scăderea poate sparge cursul programului, este mai bine să pleci așa cum este
Serial.print (distanță); // trimite valoarea curentă stocată în distanța de pe monitorul serial
Serial.println ("cm"); // afișează cuvântul "cm" imediat după distanță
Serial.println (); // creează un șir gol în monitorul serial (pentru citirea ușoară)
}

La instrucțiuni, voi aplica și fișiere.ino

Fișiere.

  1. HCSR04BAREBONES.INO - Acest fișier este foarte comentat și conține informații despre modulul HC-SR04, precum și o informație de asamblare.
  2. Bareboeslight.ino - Modul cu cantitate mica Comentarii

Iată sfatul meu. Știu că codul funcționează, dar înainte de a atașa fișierele în instrucțiuni, am rescris totul, iar monitorul serial a arătat constant "0 cm". Problema era în modulul ars, iar înlocuirea sa a corectat situația.

Uită-te la modul în care programul răspunde dacă decideți să jucați cu valorile comenzilor de întârziere. Un mod experimentat pe care l-am constatat că o scădere a valorilor de întârziere sau de echivalare a acestora la 0 poate conduce programul la o stare non-de lucru.

După ce ați configurat dispozitivul, totul este limitat la imaginația dvs. Puteți verifica dacă obiectele fixe sunt la aceeași distanță și rămân nemișcate. Puteți utiliza monitorul pentru a primi notificări pe care unele obiecte le deplasează peste senzor etc.

Schema a fost utilizată pentru a fi utilizată de mine pentru a determina că toate obiectele sunt pe senzor sunt pe distanța de mai mult de 60 cm. Proiectul a folosit trei diode și un squante. Când toate elementele erau în continuare 60 cm, dioda verde ardea. Când ceva a abordat mai puțin de 60 cm, gazul diodic verde și se aprinde roșu. Dacă obiectul a rămas aproape de ceva timp, atunci cea de-a doua diodă roșie se aprinde și scânteia începu să scârțâie. Când obiectul a fost îndepărtat pe 60 cm, sufletele s-au stricat, diodele roșii erau Gazley, iar verde se aprinde din nou. Nu a împiedicat toate alarmele false, ci a lucrat cu majoritatea cazurilor atunci când o pasăre sau o proteină curioasă a zburat peste senzor.

Pasul 4: Probleme celebre

Dacă vedeți modelul modulului dvs. cu ultrasunete în acest moment, apoi frunze mai jos. Sper că veți găsi problema dvs. și veți decide.

  1. US-105.
  2. DYP-ME007TX.

Modulul US-105

Modulul Ultrasonic US-105 utilizează ieșirea GPIO pentru a fixa ecoul, ceea ce implică alte calcule pentru a determina distanța. La retragerea GPIO la eco-ul PIN, PIN nu este ținut sub tensiune în timp ce trimiteți valul. În schimb, atunci când obțineți o ultrasunete reflectată, o tensiune specifică este furnizată la știftul de ecou, \u200b\u200bcare este proporțional cu timpul necesar printr-un val cu ultrasunete pentru a merge și a reveni la senzor. Cu acest modul, un astfel de cod va funcționa:

// cod pentru modulul cu ultrasunete US-105 nesemnat Echopin \u003d 2; int trigpin nesemnat \u003d 3; nesemnate lungi time_echo_us \u003d 0; // len_mm_x100 \u003d lungime * 100 nesemnate len_mm_x100 \u003d 0; Len_integer nesemnat Len_Integer \u003d 0; // nesemnat int str_fraction \u003d 0; VOID SETUP () (Serial.Bel (9600); Pinmode (Echopin, Input); Pinmode (Trigpin, Ieșire);) () (digital (Trigpin, High); DelaymicroSeconds (50); digital (Trigpin, Low) ; Time_echo_us \u003d pulsina (ecopină, mare); dacă ((time_echo_us 1)) (len_mm_x100 \u003d (time_echo_us * 34) / 2; len_integer \u003d len_mm_x100 / 100; len_fraction \u003d len_mm_x100% 100; serial.print ("gama:"); Serial.print (len_integer, dec); serial.print (""); dacă (len_fraction< 10) Serial.print("0"); Serial.print(Len_Fraction, DEC); Serial.println("mm"); delay(1000); } // Конец программы

Modul DYP-ME007TX

// Cod pentru modulul cu ultrasunete DYP-ME007TX / * Instrucțiuni pentru conexiune * 5V de la Arduino la VCC pe modulul * GNG de la Arduino la GND pe modulul * OUT Modulul de la modul la pinul digital 7 pe Arduino * / #include #define RXPIN 7 #Define TXPIN 7 Software-ul Myserial (RXPIN, TXPIN); Long Mili \u003d 0; Byte Mybuffer \u003d (0); Byte Bitpos \u003d 0; VOID SETUP () (Serial.Bel (9600); Myserial.Bel (9600);) Bucle (9600);) () (BOTPOS \u003d 0; în timp ce (Myserial.Available ()) (dacă (Bitpos< 4) { mybuffer = mySerial.read(); } else break; } mySerial.flush(); mili = mybuffer << 8 | mybuffer; Serial.print("Distance: "); Serial.print(mili / 25.4); Serial.print (" inches"); Serial.println(); delay(500); }

Ți-a plăcut articolul? Împărtășește-l