- Materiale necesare:
- Diagrama circuitului:
- Cum funcționează modulul HC-SR04:
- Măsurarea distanței între doi senzori cu ultrasunete (HC-SR04):
- Program pentru senzorul emițătorului:
- Program pentru senzorul receptorului:
- Lucru:
- Idee improvizate - calibrarea senzorului folosind o distanță cunoscută:
Senzorul cu ultrasunete (HC-SR04) este utilizat în mod obișnuit pentru a găsi distanța unui obiect de la un anumit punct. A fost destul de ușor să faceți acest lucru cu Arduino, iar codul este, de asemenea, destul de simplu. Dar în acest articol vom încerca ceva diferit cu acești senzori HC-SR04 populari. Vom încerca să calculăm distanța dintre doi senzori cu ultrasunete, adică vom face ca un senzor să acționeze ca emițător și celălalt senzor să acționeze ca receptor. Făcând acest lucru, putem urmări locația unui transmițător folosind multe receptoare cu ultrasunete, această urmărire se numește triunghi și poate fi utilizată pentru andocarea automată a roboților adepți ai bagajelor și a altor aplicații similare. Găsirea distanței dintre doi senzori americani ar putea părea o sarcină destul de simplă, dar m-am confruntat cu puține provocări care sunt discutate în acest proiect.
Tehnica discutată în acest articol nu este destul de precisă și s-ar putea să nu fie utilă în niciun sistem real fără modificări. În timpul acestei documentații, nu am găsit pe nimeni care să obțină rezultate la fel de apropiate ca ale mele, așa că tocmai am împărtășit opiniile mele despre cum am reușit să funcționeze, astfel încât oamenii care încearcă acest lucru să nu mai reinventeze roata.
Materiale necesare:
- Arduino (2Nos) - Orice model
- Modulul HCSR04 (2Nos)
Diagrama circuitului:
Chiar dacă vom face ca un senzor american (cu ultrasunete) să funcționeze ca emițător și celălalt ca receptor, este obligatoriu să conectați toți cei patru pini ai senzorilor cu Arduino. De ce ar trebui? Mai multe despre acestea vor fi discutate mai târziu, dar pentru moment schema circuitului va fi după cum urmează
După cum puteți vedea, schema de circuit atât pentru emițător, cât și pentru receptor, sunt ambele identice. De asemenea, verificați: interfațarea senzorului cu ultrasunete Arduino
Cum funcționează modulul HC-SR04:
Înainte de a continua, permiteți-ne să înțelegem cum funcționează senzorul HC-SR04. Diagrama de sincronizare de mai jos ne va ajuta să înțelegem funcționarea.
Senzorul are doi pini Trigger și Echo care sunt folosiți pentru a măsura distanța așa cum se arată în diagrama de sincronizare. Mai întâi pentru a iniția măsurarea ar trebui să trimitem o undă cu ultrasunete de la transmițător, acest lucru se poate face prin setarea pinului de declanșare înalt pentru 10uS. De îndată ce se face acest lucru, pinul emițătorului va trimite 8 explozii sonore de unde SUA. Această undă americană va lovi un obiect care va răsuci și va fi recepționată de receptor.
Aici, diagrama de sincronizare arată că, odată ce receptorul primește unda, acesta va face pinul Echo să meargă în sus pentru o durată de timp care este egală cu timpul necesar pentru ca unda să se deplaseze de la senzorul SUA și să ajungă înapoi la senzor. Această diagramă de sincronizare nu pare a fi adevărată.
Am acoperit partea Tx (emițător) a senzorului meu și am verificat dacă pulsul Echo a crescut și da, acesta crește. Aceasta înseamnă că pulsul Echo nu așteaptă ca unda SUA (cu ultrasunete) să fie primită de acesta. Odată ce transmite valul SUA, acesta se ridică și rămâne ridicat până când unda revine înapoi. Deci, diagrama corectă de sincronizare ar trebui să fie așa cum se arată mai jos (Ne pare rău pentru abilitățile mele scăzute de scriere)
Făcând HC-SR04 să funcționeze doar ca emițător:
Este destul de simplu să faci un HC-SR04 să funcționeze doar ca emițător. Așa cum se arată în diagrama de sincronizare, trebuie să declarați pinul de declanșare ca pin de ieșire și să îl mențineți ridicat timp de 10 microsecunde. Aceasta va iniția explozia de undă cu ultrasunete. Deci, ori de câte ori dorim să transmitem unda, trebuie doar să controlăm pinul de declanșare al senzorului transmițătorului, pentru care codul este dat mai jos.
Făcând HC-SR04 să funcționeze doar ca receptor:
Așa cum se arată în diagrama de sincronizare, nu putem controla creșterea pinului Echo, deoarece este legat de pinul de declanșare. Deci, nu putem face ca HC-SR04 să funcționeze doar ca receptor. Dar putem folosi un hack, acoperind doar partea transmițătorului senzorului cu bandă (așa cum se arată în imaginea de mai jos) sau capacul, valul SUA nu poate scăpa în afara carcasei emițătorului și pinul Echo nu va fi afectat de această undă SUA.
Acum, pentru a face pinul de ecou să fie ridicat, trebuie doar să tragem acest pin de declanșare ridicat timp de 10 microsecunde. Odată ce acest senzor receptor primește valul SUA transmis de senzorul transmițătorului, pinul de ecou va scădea.
Măsurarea distanței între doi senzori cu ultrasunete (HC-SR04):
Până acum am înțeles cum să facem ca un senzor să funcționeze ca emițător și celălalt senzor să funcționeze ca receptor. Acum, trebuie să transmitem unda ultrasonică de la senzorul transmițătorului și să o primim cu senzorul receptorului și să verificăm timpul necesar pentru ca unda să se deplaseze de la transmițător la receptor sună ușor, nu? Dar, din păcate !, avem o problemă aici și acest lucru nu va funcționa.
Modulul emițătorului și modulul receptor sunt la distanță și atunci când modulul receptor primește valul SUA de la modulul emițător nu va ști când emițătorul a trimis această undă specială. Fără a cunoaște ora de început, nu putem calcula timpul luat și deci distanța. Pentru a rezolva această problemă, pulsul Echo al modulului receptor trebuie să fie ridicat exact când modulul transmițător a transmis unda SUA. Cu alte cuvinte, modulul Transmițător și modulul receptor ar trebui să se declanșeze în același timp. Acest lucru poate fi realizat prin următoarea metodă.
În diagrama de mai sus, Tx reprezintă senzorul emițătorului și Rx reprezintă senzorul receptorului. Așa cum se arată, senzorul transmițătorului va fi făcut să transmită undele SUA la o întârziere cunoscută periodic, aceasta este tot ceea ce trebuie să facă.
În senzorul receptorului, trebuie să facem cumva pinul declanșatorului să se ridice exact în timpul când pinul transmițătorului se ridică. Deci, inițial, facem aleatoriu declanșatorul receptorului să meargă la mare, ceea ce va rămâne și va rămâne înalt până când pinul de ecou scade. Acest pin de ecou va scădea numai atunci când primește o undă SUA de la transmițător. Deci, de îndată ce scade, putem presupune că senzorul transmițătorului tocmai a fost declanșat. Acum, cu această ipoteză de îndată ce ecoul scade, putem aștepta întârzierea cunoscută și apoi să declanșăm declanșatorul receptorilor. Acest lucru ar sincroniza parțial declanșatorul atât al emițătorului, cât și al receptorului și, prin urmare, puteți citi durata impulsului de ecou imediat folosind pulseIn () și puteți calcula distanța.
Program pentru senzorul emițătorului:
Programul complet pentru modulul transmițător poate fi găsit în partea de jos a paginii. Nu face altceva decât să declanșeze senzorul emițătorului la un interval periodic.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Pentru a declanșa un senzor, trebuie să facem pinul de declanșare să rămână înalt timp de 10uS. Codul pentru a face același lucru este prezentat mai sus
Program pentru senzorul receptorului:
În senzorul receptorului, acoperim ochiul emițătorului senzorului pentru a-l face fals, așa cum am discutat mai devreme. Acum putem folosi tehnica menționată mai sus pentru a măsura distanța dintre doi senzori. Programul complet este dat în partea de jos a acestei pagini. Puține linii importante sunt explicate mai jos
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); durata = pulseIn (echoPin, HIGH);
Inițial declanșăm senzorul SUA utilizând funcția Trigger_US () și apoi așteptăm până când pinul de ecou rămâne ridicat folosind o buclă while. Odată ce scade, așteptăm o durată prestabilită, această durată ar trebui să fie între 10 și 30 de microsecunde, care poate fi determinată folosind încercări și erori (Sau puteți utiliza ideea improvizată dată mai jos). După această întârziere declanșează din nou SUA utilizând aceeași funcție și apoi folosește funcția pulseIn () pentru a calcula durata undei.
Acum folosind aceleași formule vechi putem calcula distanța ca mai jos
distanta = durata * 0,034;
Lucru:
Faceți conexiunile așa cum este explicat în program. Acoperiți partea Tx a senzorului receptorului așa cum se arată în imagine. Apoi încărcați codul transmițătorului și codul receptorului, care sunt date mai jos la emițător și, respectiv, la receptorul Arduino. Deschideți monitorul serial al modulului receptor și ar trebui să observați distanța dintre cele două module afișate așa cum se arată în videoclipul de mai jos.
Notă: Această metodă este doar o ideologie și s-ar putea să nu fie exactă sau satisfăcătoare. Cu toate acestea, puteți încerca ideea improvizată de mai jos pentru a obține rezultate mai bune.
Idee improvizate - calibrarea senzorului folosind o distanță cunoscută:
Metoda explicată până acum pare a fi satisfăcătoare, dar a fost suficientă pentru proiectul meu. Cu toate acestea, aș dori să împărtășesc dezavantajele acestei metode și o modalitate de a le depăși. Un dezavantaj major al acestei metode este că presupunem că pinul Echo al receptorului scade imediat după ce senzorul emițătorului a transmis unda SUA, ceea ce nu este adevărat, deoarece unda va dura ceva timp pentru a călători de la emițător la receptor. Prin urmare, declanșatorul emițătorului și declanșatorul receptorului nu vor fi sincronizate perfect.
Pentru a depăși acest lucru, putem calibra senzorul folosind inițial o distanță de cunoaștere. Dacă distanța este cunoscută, vom cunoaște timpul necesar valului SUA pentru a ajunge la receptor de la emițător. Să păstrăm acest timp luat ca Del (D) așa cum se arată mai jos.
Acum vom ști exact după cât timp ar trebui să punem pinul de declanșare al receptorului la maxim pentru a sincroniza cu declanșatorul transmițătorului. Această durată poate fi calculată prin Întârziere cunoscută (t) - Del (D). Nu am reușit să testez această idee din cauza limitărilor de timp, așa că nu sunt sigur cât de corectă ar funcționa. Deci, dacă se întâmplă să-l încercați, spuneți-mi rezultatele prin secțiunea de comentarii.