- Reikalingos medžiagos:
- Grandinės schema:
- Kaip iš tikrųjų veikia „HC-SR04“ modulis:
- Atstumo tarp dviejų ultragarso jutiklių (HC-SR04) matavimas:
- Siųstuvo jutiklio programa:
- Imtuvo jutiklio programa:
- Darbas:
- Patobulinta idėja - jutiklio kalibravimas naudojant žinomą atstumą:
Ultragarsinis jutiklis (HC-SR04) paprastai naudojamas objekto atstumui nuo vieno konkretaus taško surasti. Tai buvo gana lengva padaryti naudojant „Arduino“, o kodas taip pat yra gana paprastas. Tačiau šiame straipsnyje mes išbandysime ką nors kita su šiais populiariais HC-SR04 jutikliais. Pabandysime apskaičiuoti atstumą tarp dviejų ultragarso jutiklių, ty padarysime, kad vienas jutiklis veiktų kaip siųstuvas, o kitas - kaip imtuvas. Tai atlikdami galime stebėti vieno siųstuvo vietą naudodamiesi daugeliu ultragarsinių imtuvų. Šis sekimas vadinamas trianguliacija ir gali būti naudojamas automatiniams robotų dokų bagažo sekėjams ir kitoms panašioms programoms. Rasti atstumą tarp dviejų JAV jutikliai gali atrodyti gana paprasta užduotis, bet aš susidūriau su keletu iššūkių, kurie aptariami šiame projekte.
Šiame straipsnyje aptarta technika nėra gana tiksli ir gali būti nenaudinga jokiose realiose sistemose be modifikacijų. Per šią dokumentaciją aš neradau nė vieno žmogaus, kuris pasiektų tokius pat rezultatus, kaip mano, todėl aš tiesiog pasidalinau savo nuomone, kaip aš tai veikiau, kad žmonėms, kurie tai bando, nereikėtų išradinėti dviračio.
Reikalingos medžiagos:
- „Arduino“ (2Nos) - bet koks modelis
- HCSR04 modulis (2Nos)
Grandinės schema:
Nors ketiname, kad vienas JAV (ultragarsinis) jutiklis veiktų kaip siųstuvas, o kitas - kaip imtuvas, privaloma visus keturis jutiklių kaiščius prijungti prie „Arduino“. Kodėl turėtume? Daugiau apie tai bus aptarta vėliau, tačiau kol kas schema bus tokia
Kaip matote, tiek siųstuvo, tiek imtuvo grandinės schema yra identiška. Taip pat patikrinkite: „Arduino“ ultragarso jutiklio sąsajos
Kaip iš tikrųjų veikia „HC-SR04“ modulis:
Prieš tęsdami toliau, leiskite mums suprasti, kaip veikia HC-SR04 jutiklis. Žemiau esanti laiko schema padės mums suprasti, kaip veikia.
Jutiklis turi du kaiščius „Trigger“ ir „Echo“, kurie naudojami atstumui matuoti, kaip parodyta laiko schemoje. Pirmiausia, norėdami pradėti matavimą, turėtume siųsti ultragarso bangą iš siųstuvo. Tai galima padaryti nustatant aukštą gaiduko kaištį 10uS Kai tik tai bus padaryta, siųstuvo kaištis pasiųs 8 garsinius JAV bangų pliūpsnius. Ši JAV banga pasieks objekto atšokimą ir ją priims imtuvas.
Čia laiko schema rodo, kad gavėjui priėmus bangą, „Echo“ kaištis bus aukštas tam tikrą laiką, kuris yra lygus laikui, per kurį banga sklinda iš JAV jutiklio ir pasiekia atgal prie jutiklio. Panašu, kad ši laiko schema nėra teisinga.
Aš uždengiau savo jutiklio dalį Tx (siųstuvas) ir patikrinau, ar aido impulsas padidėjo, ir taip, jis aukštas. Tai reiškia, kad aido impulsas nelaukia, kol jį priims JAV (ultragarso) banga. Kai ji perduoda JAV bangą, ji eina aukštai ir išlieka aukšta, kol banga grįžta atgal. Taigi teisinga laiko schema turėtų būti kažkas panašaus, kaip parodyta žemiau (Atsiprašau už prastus rašymo įgūdžius)
Kad jūsų HC-SR04 veiktų tik kaip siųstuvas:
Gerai, kad HC-SR04 veiktų tik kaip siųstuvas. Kaip parodyta laiko schemoje, turite paskelbti paleidiklio kaištį kaip išvesties kaištį ir priversti jį išlaikyti 10 mikrosekundžių. Tai sukels ultragarso bangos pliūpsnį. Taigi, kai tik norime perduoti bangą, tiesiog turime valdyti siųstuvo jutiklio paleidimo kaištį, kurio kodas pateiktas žemiau.
Kad jūsų HC-SR04 veiktų tik kaip imtuvas:
Kaip parodyta laiko schemoje, mes negalime kontroliuoti aido kaiščio pakilimo, nes jis yra susijęs su paleidimo kaiščiu. Taigi jokiu būdu negalėtume priversti HC-SR04 veikti tik kaip imtuvą. Bet mes galime naudoti nulaužimą, tiesiog uždengdami jutiklio dalį „Transmitter“ juostele (kaip parodyta paveikslėlyje žemiau) arba dangteliu, JAV banga negali ištrūkti už jo siųstuvo korpuso ribų, o „Echo“ kaiščio ši JAV banga nepaveiks.
Dabar, kad aido kaištis būtų aukštas, mes tiesiog turime 10 mikrosekundžių aukštai ištraukti šį manekeno gaiduką. Kai šis imtuvo jutiklis gauna siųstuvo jutiklio perduodamą JAV bangą, aido kaištis bus žemas.
Atstumo tarp dviejų ultragarso jutiklių (HC-SR04) matavimas:
Iki šiol supratome, kaip priversti vieną jutiklį veikti kaip siųstuvą, o kitą - kaip imtuvą. Dabar mes turime perduoti ultragarso bangą iš siųstuvo jutiklio ir priimti ją su imtuvo jutikliu bei patikrinti, kiek laiko banga sklinda nuo siųstuvo iki imtuvo, ar ne? Deja, čia yra problema, ir tai neveiks.
Siųstuvo modulis ir imtuvo modulis yra toli vienas nuo kito, o kai imtuvo modulis gauna JAV bangą iš siųstuvo modulio, jis nežinos, kada siųstuvas išsiuntė šią bangą. Nežinodami pradžios laiko, negalime apskaičiuoti užimto laiko ir tokiu būdu atstumo. Norėdami išspręsti šią problemą, imtuvo modulio aido impulsas turi būti aukštas tiksliai tada, kai siųstuvo modulis perdavė JAV bangą. Kitaip tariant, siųstuvo modulis ir imtuvo modulis turėtų suveikti tuo pačiu metu. Tai galima pasiekti tokiu metodu.
Aukščiau pateiktoje diagramoje Tx reiškia siųstuvo jutiklį, o Rx - imtuvo jutiklį. Kaip parodyta, siųstuvo jutiklis bus priverstas perduoti JAV bangas periodiškai žinomu vėlavimu, tai yra viskas, ką jis turi padaryti.
Imtuvo jutiklyje mes turime kažkaip priversti paleidimo kaištį pakilti tiksliai tuo metu, kai siųstuvo kaištis pakyla aukštai. Taigi iš pradžių mes atsitiktinai imtuvų paleidiklį einame aukštai, kuris bus aukštas ir išliks aukštas, kol aido kaištis bus žemas. Šis aido kaištis bus žemas tik tada, kai jis gaus JAV bangą iš siųstuvo. Taigi, kai tik bus mažai, galime manyti, kad siųstuvo jutiklis ką tik suveikė. Dabar, remdamiesi šia prielaida, kai tik aidas sumažės, galime laukti žinomo delsimo ir tada suveikti imtuvų trigerį. Tai iš dalies sinchronizuotų tiek siųstuvo, tiek imtuvo trigerį, todėl naudodamiesi „pulseIn“ () galite nuskaityti tiesioginio aido impulso trukmę ir apskaičiuoti atstumą.
Siųstuvo jutiklio programa:
Visą siųstuvo modulio programą rasite puslapio apačioje. Jis nieko nedaro, tik periodiškai suveikia siųstuvo jutiklį.
„digitalWrite“ (trigPin, HIGH); vėlavimasMikrosekundės (10); „digitalWrite“ (trigPin, LOW);
Norėdami suaktyvinti jutiklį, mes turime padaryti, kad paleidimo kaištis išliktų aukštas 10uS. Kodas daryti tą patį rodomas aukščiau
Imtuvo jutiklio programa:
Imtuvo jutiklyje mes uždengiame jutiklio siųstuvo akį, kad jis būtų manekenas, kaip aptarta anksčiau. Dabar mes galime naudoti aukščiau paminėtą metodiką atstumui tarp dviejų jutiklių matuoti. Visa programa pateikiama šio puslapio apačioje. Toliau paaiškinta keletas svarbių eilučių
Trigger_US (); o (digitalRead (echoPin) == AUKŠTAS); vėlavimasMikrosekundės (10); Trigger_US (); trukmė = pulseIn (echoPin, HIGH);
Iš pradžių mes suaktyviname JAV jutiklį naudodami funkciją „Trigger_US“ () ir palaukite, kol aido kaištis išliks aukštas, naudodamiesi „loop“. Kai ji bus maža, mes laukiame iš anksto nustatytos trukmės, ši trukmė turėtų būti nuo 10 iki 30 mikrosekundžių, kurią galima nustatyti naudojant bandymus ir klaidas (Arba galite naudoti toliau pateiktą improvizuotą idėją). Po šio uždelsimo vėl suaktyvinkite JAV naudodami tą pačią funkciją ir tada naudokite pulseIn () funkciją, kad apskaičiuotumėte bangos trukmę.
Dabar naudodami tas pačias senas formules galime apskaičiuoti atstumą, kaip nurodyta toliau
atstumas = trukmė * 0,034;
Darbas:
Atlikite ryšius taip, kaip paaiškinta programoje. Uždenkite imtuvo jutiklio Tx dalį, kaip parodyta paveikslėlyje. Tada įkelkite siųstuvo kodą ir imtuvo kodą, kurie pateikiami žemiau, atitinkamai į siųstuvą ir imtuvą „Arduino“. Atidarykite nuoseklų imtuvo modulio monitorių ir turėtumėte pastebėti atstumą tarp dviejų rodomų modulių, kaip parodyta toliau pateiktame vaizdo įraše.
Pastaba: Šis metodas yra tik ideologija ir gali būti netikslus ar patenkinamas. Tačiau norėdami gauti geresnių rezultatų, galite išbandyti toliau pateiktą improvizuotą idėją.
Patobulinta idėja - jutiklio kalibravimas naudojant žinomą atstumą:
Atrodo, kad iki šiol keistai paaiškintas metodas tenkina, tačiau jo pakako mano projektui. Tačiau aš taip pat norėčiau pasidalinti šio metodo trūkumais ir būdais, kaip juos įveikti. Pagrindinis šio metodo trūkumas yra tas, kad mes manome, kad imtuvo aido kaištis nukrenta žemai iškart po to, kai siųstuvo jutiklis perduoda JAV bangą, o tai netiesa, nes banga užtruks šiek tiek laiko, kol pereis iš siųstuvo į imtuvą. Taigi siųstuvo trigeris ir imtuvo gaidukas nebus visiškai sinchronizuojami.
Norėdami tai įveikti, iš pradžių galime kalibruoti jutiklį naudodami žinomą atstumą. Jei atstumas yra žinomas, žinosime, kiek laiko JAV banga pasiekė imtuvą iš siųstuvo. Laikykime, kad šis laikas būtų Del (D), kaip parodyta žemiau.
Dabar mes tiksliai žinosime, po kiek laiko turėtume aukštai nustatyti imtuvo smeigtuko kaištį, kad sinchronizuotume su siųstuvo gaiduku. Šią trukmę galima apskaičiuoti pagal žinomą vėlavimą (t) - del (D). Negalėjau išbandyti šios idėjos dėl laiko apribojimų, todėl nesu tikras, kaip tiksliai ji veiks. Taigi, jei atsitiktų išbandyti, praneškite man rezultatus per komentarų skyrių.