Cum se măsoară distanța dintre două puncte folosind Arduino?

În electronică, de cele mai multe ori senzorii cu ultrasunete sunt utilizați pentru a măsura distanța de la un anumit punct la altul. Este foarte ușor să scrieți un cod pe placa Arduino și să integrați un senzor cu ultrasunete pentru a îndeplini această sarcină. Dar, în acest articol, vom adopta o abordare diferită. Vom folosi doi senzori cu ultrasunete separate, care vor fi integrați cu doi Arduino separați. Aceste două module vor fi plasate în două puncte diferite între care urmează să fie măsurată distanța. Un senzor va fi făcut receptor, iar celălalt va fi transformat. Procedând astfel, vom putea măsura distanța dintre ele doar localizând poziția transmițătorului utilizând multe receptoare cu ultrasunete. Tehnica pe care o folosim aici se numește Triangulaţie.



Măsurarea distanței folosind Arduino

Tehnica utilizată aici este utilă doar la sistemele la scară mică, unde se găsește o distanță mică. Pentru a-l implementa la scară largă, sunt necesare cu siguranță unele modificări. Toate provocările cu care s-au confruntat în timpul derulării acestui proiect sunt discutate mai jos.



Cum se utilizează Arduino și senzorul cu ultrasunete pentru a măsura distanța?

După cum știm rezumatul din spatele proiectului, permiteți-ne să mergem mai departe și să adunăm informații suplimentare pentru a începe proiectul.



Pasul 1: Adunarea componentelor (hardware)

Dacă doriți să evitați orice inconvenient în mijlocul oricărui proiect, cea mai bună abordare este să faceți o listă completă a tuturor componentelor pe care le vom folosi. Al doilea pas, înainte de a începe să faci circuitul, este să parcurgi un scurt studiu al tuturor acestor componente. O listă cu toate componentele de care avem nevoie în acest proiect este prezentată mai jos.



  • Sârme jumper
  • Adaptor de 5V AC la DC (x2)

Pasul 2: Adunarea componentelor (software)

  • Proteus 8 Professional (poate fi descărcat de pe Aici )

După descărcarea Proteus 8 Professional, proiectați circuitul de pe acesta. Am inclus aici simulări software, astfel încât să fie convenabil pentru începători să proiecteze circuitul și să facă conexiuni adecvate pe hardware.

Pasul 3: Funcționarea HCR-05

După cum știm acum rezumatul principal al proiectului nostru, să mergem mai departe și să parcurgem un scurt studiu al funcționării HCR-05 . Puteți înțelege funcționarea principală a acestui senzor prin următoarea diagramă.

Acest senzor are doi pini, pinul de declanșare, și pin ecologic ambele sunt utilizate pentru a măsura distanța dintre două puncte particulare. Procesul este inițiat prin trimiterea unei unde ultrasonice de la senzor. Această sarcină se realizează prin declanșarea pinului de declanșare pentru 10us. O emisiune sonică de 8 unde ultrasonice este trimisă de la transmițător imediat ce această sarcină este finalizată. această undă va călători în aer și de îndată ce lovește un obiect în calea sa, va lovi înapoi și va fi recepționată de receptorul încorporat în senzor.



Când unda ultrasonică va fi recepționată de receptor după reflectarea senzorului, va pune pin ecologic la o stare înaltă. Acest pin va rămâne în stare înaltă pe durata de timp care va fi exact egală cu timpul luat de unda ultrasonică pentru a călători de la transmițător și înapoi la receptorul senzorului.

Pentru a vă face senzorul cu ultrasunete transmiţător numai, faceți doar pinul de declanșare ca pin de ieșire și trimiteți un impuls mare la acest pin pentru 10us. O explozie cu ultrasunete va fi inițiată de îndată ce se va face acest lucru. Deci, ori de câte ori va fi transmisă unda, trebuie controlat doar pinul de declanșare al senzorului cu ultrasunete.

Nu există nicio modalitate de a face senzorul ultrasonic ca numai receptor deoarece creșterea pinului ECO nu poate fi controlată de microcontroler deoarece este legată de pinul trigonal al senzorului. Dar există un lucru pe care îl putem face este să putem acoperi transmițătorul acestui senzor cu ultrasunete cu bandă adezivă pe care nu iese nicio undă UV. Atunci pinul ECO al acestui transmițător nu va fi afectat de transmițător.

Pasul 4: Funcționarea circuitului

Acum, deoarece am făcut ca ambii senzori să funcționeze separat ca emițător și receptor, există o mare problemă cu care se confruntă aici. Receptorul nu va ști timpul luat de unda cu ultrasunete pentru a călători de la transmițător la receptor, deoarece nu știe exact când a fost transmisă această undă.

Pentru a rezolva această problemă, ceea ce trebuie să facem este să trimitem un ÎNALT semnalul către ECO al receptorului imediat ce unda ultrasonică este transmisă de senzorul emițătorului. Sau, în cuvinte simple, putem spune că ECO-ul receptorului și declanșatorul transmițătorului trebuie trimise la HIGH în același timp. Deci, pentru a realiza acest lucru, vom face cumva declanșatorul receptorului să se ridice imediat ce declanșatorul transmițătorului se va ridica. Acest declanșator al receptorului va rămâne ridicat până când pinul ECO va porni SCĂZUT . Când un semnal cu ultrasunete va fi primit de pinul ECO al receptorului, acesta va deveni LOW. Acest lucru va însemna că declanșatorul senzorului emițător tocmai a primit un semnal HIGH. Acum, de îndată ce ECO scade, vom aștepta întârzierea cunoscută și vom pune declanșatorul receptorului ÎNALT. Procedând astfel, declanșatorii ambilor senzori vor fi sincronizați, iar distanța va fi calculată cunoscând întârzierea de deplasare a undei.

Pasul 5: Asamblarea componentelor

Chiar dacă folosim doar emițătorul unui senzor cu ultrasunete și receptorul celuilalt, dar este obligatoriu să conectați toți cei patru pini ai senzor cu ultrasunete la Arduino. Pentru a conecta circuitul, urmați pașii de mai jos:

  1. Luați doi senzori cu ultrasunete. Acoperiți receptorul primului senzor și emițătorul celui de-al doilea senzor. Utilizați bandă adezivă albă în acest scop și asigurați-vă că aceste două sunt complet acoperite, astfel încât niciun semnal să nu părăsească emițătorul celui de-al doilea senzor și niciun semnal să nu intre în receptorul primului senzor.
  2. Conectați două Arduino pe două panouri separate și conectați senzorii lor cu ei. Conectați pinul de declanșare la pin-ul 9 al Arduino și ecoPin la pin-ul 10 al Arduino-ului. Porniți senzorul cu ultrasunete de 5V Arduino și comun toate motivele.
  3. Încărcați codul receptorului pe Arduino al receptorului și codul transmițătorului pe Arduino al transmițătorului.
  4. Acum deschideți monitorul serial al părții de recepție și notați distanța care este măsurată.

Diagrama circuitului acestui proiect arată ca:

Diagrama circuitului

Pasul 6: Noțiuni introductive despre Arduino

Dacă nu sunteți deja familiarizați cu Arduino IDE, nu vă faceți griji, deoarece o procedură pas cu pas pentru a configura și utiliza Arduino IDE cu o placă de microcontroler este explicată mai jos.

  1. Descărcați cea mai recentă versiune a Arduino IDE de la Arduino.
  2. Conectați placa Arduino Nano la laptop și deschideți panoul de control. în panoul de control, faceți clic pe Hardware și sunet . Acum faceți clic pe Dispozitive și imprimante. Aici găsiți portul la care este conectată placa de microcontroler. În cazul meu este COM14 dar este diferit pe diferite computere.

    Găsirea portului

  3. Faceți clic pe meniul Instrument. și setați tabla la Arduino Nano din meniul derulant.

    Placă de setare

  4. În același meniu Tool, setați portul la numărul de port pe care l-ați observat anterior în Dispozitive și imprimante .

    Setarea portului

  5. În același meniu Instrument, setați procesorul la ATmega328P (vechi Bootloader ).

    Procesor

  6. Descărcați codul atașat mai jos și lipiți-l în ID-ul dvs. Arduino. Faceți clic pe încărcați butonul pentru a arde codul de pe placa de microcontroler.

    Încărcare

Pentru a descărca codul, Click aici.

Pasul 7: Înțelegerea codului

Codul utilizat în acest proiect este foarte simplu și destul de bine comentat. Există două fișiere de coduri în folderul atașat. Codul pentru emițător și un cod pentru partea receptorului sunt ambele date separat. Vom încărca aceste coduri în ambele plăci Arduino respective. Deși se explică de la sine, este descris pe scurt mai jos.

Cod pentru partea transmițătorului

1. La început sunt inițializați pinii plăcii Arduino care vor fi conectați la senzorul cu ultrasunete. Apoi sunt declarate variabilele care vor fi folosite pentru a stoca valori pentru calcularea timpului și a distanței în timpul rulării codului.

// definește numerele pinilor const int trigPin = 9; // Conectați pinul de declanșare al senzorului ultrasonic la pin-ul Arduino const int echoPin = 10; // Conectați pinul ecologic al senzorului cu ultrasunete la pinul 10 al Arduino // definește variabilele de lungă durată; // variabil pentru a stoca timpul luat de unda cu ultrasunete t parcurs int distanta; // variabilă pentru a stoca distanța calculată

2. configurare nulă () este o funcție care rulează o singură dată la început când placa este pornită sau butonul de activare este apăsat. Aici ambii pini ai Arduino sunt declarați a fi folosiți ca INTRARE și IEȘIRE . Baudrate este setat în această funcție. Rata de transmisie este viteza în biți pe secundă prin care microcontrolerul comunică cu senzorul cu ultrasunete.

void setup () {pinMode (trigPin, OUTPUT); // Setează trigPin ca Output pinMode (echoPin, INPUT); // Setează echoPin ca Intrare Serial.begin (9600); // Pornește comunicarea în serie}

3. bucla nulă () este o funcție care rulează din nou și din nou în buclă. Aici am codificat microcontrolerul astfel încât să trimită un semnal HIGH către pinul Trigger al senzorului ultrasonic, să aibă 20 de microsecunde și să-i trimită un semnal LOW.

void loop () {// Setează trigPin pe starea HIGH pentru 10 micro secunde digitalWrite (trigPin, HIGH); // trimiteți un semnal HIGH la declanșatorul primei întârzieri a senzorului Microsecunde (10); // așteptați 10 micro secunde digitalWrite (trigPin, LOW); // trimiteți un semnal LOW la declanșatorul primei întârzieri a senzorului (2); // așteptați 0,2 secunde}

Cod pentru partea receptorului

1. La început sunt inițializați pinii plăcii Arduino care vor fi conectați la senzorul cu ultrasunete. Apoi sunt declarate variabilele care vor fi folosite pentru a stoca valori pentru calcularea timpului și a distanței în timpul rulării codului.

// definește numerele pinilor const int trigPin = 9; // Conectați pinul de declanșare al senzorului ultrasonic la pin-ul Arduino const int echoPin = 10; // Conectați pinul ecologic al senzorului cu ultrasunete la pinul 10 al Arduino // definește variabilele de lungă durată; // variabil pentru a stoca timpul luat de unda cu ultrasunete t parcurs int distanta; // variabilă pentru a stoca distanța calculată

2. configurare nulă () este o funcție care rulează o singură dată la început când placa este pornită sau butonul de activare este apăsat. Aici ambii pini ai Arduino sunt declarați a fi folosiți ca INPUT și OUTPUT. Baudrate este setat în această funcție. Rata de transmisie este viteza în biți pe secundă prin care microcontrolerul comunică cu senzorul cu ultrasunete.

void setup () {pinMode (trigPin, OUTPUT); // Setează trigPin ca Output pinMode (echoPin, INPUT); // Setează echoPin ca Intrare Serial.begin (9600); // Pornește comunicarea în serie}

3. void Trigger_US () este o funcție care va fi apelată pentru declanșarea falsă a pinului trigonal al celui de-al doilea senzor ultrasonic. Vom sincroniza timpul de declanșare al pinului de declanșare al ambilor senzori.

void Trigger_US () {// Declanșează fals senzorul SUA digitalWrite (trigPin, HIGH); // Trimiteți un semnal HIGH la pinul de declanșare al celui de-al doilea senzor delayMicroseconds (10); // așteptați 10 secunde de micro digitalWrite (trigPin, LOW); // trimite un semnal LOW la pinul de declanșare al doilea expeditor}

Patru. void Calc () este o funcție care este utilizată pentru a calcula timpul necesar semnalului ultrasonic pentru a călători de la primul senzor la al doilea senzor.

void Calc () // funcție pentru calcularea timpului parcurs de unda cu ultrasunete {durata = 0; // durata setată inițial la zero Trigger_US (); // apelează funcția Trigger_US while (digitalRead (echoPin) == HIGH); // în timp ce starea pinului eo în întârziere mare (2); // pune o întârziere de 0,2 secunde Trigger_US (); // apelează funcția Trigger_US durata = pulseIn (echoPin, HIGH); // calculați timpul necesar}

5. Aici, în bucla nulă () funcția, calculăm distanța utilizând timpul necesar semnalului ultrasonic pentru a călători de la primul senzor la al doilea senzor.

bucla void () {Pdistance = distanta; Calc (); // apelează funcția Calc () distanță = durată * 0,034; // calcularea distanței parcurse de unda cu ultrasunete dacă (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Distanța măsurată:'); // imprimați pe monitorul serial Serial.println (distanță / 2); // tipăriți pe monitorul serial} //Serial.print('Distance: '); //Serial.println(distanță/2); întârziere (500); // așteptați 0,5 secunde}