- Potrebni materiali:
- Shema vezja:
- Kako modul HC-SR04 dejansko deluje:
- Merjenje razdalje med dvema ultrazvočnimi senzorji (HC-SR04):
- Program za senzor oddajnika:
- Program za sprejemnik senzorja:
- Delo:
- Improvizirana ideja - umerjanje senzorja z znano razdaljo:
Ultrazvočni senzor (HC-SR04) se običajno uporablja za ugotavljanje oddaljenosti predmeta od določene točke. Z Arduinom je bilo to dokaj enostavno narediti, koda pa je tudi precej preprosta. Toda v tem članku bomo s temi priljubljenimi senzorji HC-SR04 poskusili nekaj drugačnega. Poskusili bomo izračunati razdaljo med dvema ultrazvočnimi senzorji, to je, naredili bomo en senzor, ki bo deloval kot oddajnik, drugi senzor pa kot sprejemnik. S tem lahko sledimo lokaciji enega oddajnika z uporabo številnih ultrazvočnih sprejemnikov, temu sledenju pravimo triangulacija in ga lahko uporabimo za avtomatske priklopne robote, sledilce prtljage in druge podobne aplikacije. Iskanje razdalje med dvema ameriškima senzorjema morda zveni precej preprosta naloga, vendar sem se soočil z nekaj izzivi, o katerih razpravlja ta projekt.
Tehnika, obravnavana v tem članku, ni dokaj natančna in morda ne bo uporabna v nobenem resničnem sistemu brez sprememb. V času te dokumentacije nisem našel nikogar, ki bi dosegel tako blizu rezultate kot jaz, zato sem pravkar delil svoje poglede na to, kako sem uspel delovati, tako da ljudem, ki to poskušajo, ni treba ponovno izumljati kolesa.
Potrebni materiali:
- Arduino (2Nos) - kateri koli model
- Modul HCSR04 (2 št.)
Shema vezja:
Čeprav bomo izdelali en ameriški (ultrazvočni) senzor, ki bo deloval kot oddajnik, drugega pa kot sprejemnik, je obvezno vse štiri zatiče senzorjev povezati z Arduinom. Zakaj bi? O tem bomo razpravljali kasneje, za zdaj pa bo shema vezja naslednja
Kot lahko vidite, je vezni diagram tako oddajnika kot sprejemnika enak. Preverite tudi: Vmesnik ultrazvočnega senzorja Arduino
Kako modul HC-SR04 dejansko deluje:
Preden nadaljujemo, še bolj razumemo, kako deluje senzor HC-SR04. Spodnji časovni diagram nam bo pomagal razumeti delovanje.
Senzor ima dva zatiča Trigger in Echo, ki se uporabljata za merjenje razdalje, kot je prikazano na časovnem diagramu. Najprej za začetek merjenja pošljite ultrazvočni val iz oddajnika, kar lahko storite tako, da zatič sprožilca nastavite visoko za 10uS. Takoj ko bo to storjeno, bo oddajniški zatič poslal 8 zvočnih izbruhov ameriških valov. Ta ameriški val bo zadel predmet, ki se bo odbil nazaj in ga bo sprejemnik sprejel.
Tu časovni diagram kaže, da bo sprejemnik, ko prejme val, povzročil visok odmev za čas, ki je enak času, potrebnemu za pot vala od ameriškega senzorja in nazaj do senzorja. Zdi se, da ta časovni diagram ni resničen.
Pokril sem del Tx (oddajnika) mojega senzorja in preveril, ali je impulz Echo previsok, in res gre visoko. To pomeni, da impulz Echo ne čaka, da ga sprejme (ultrazvočni) val. Ko prenaša ameriški val, gre visoko in ostane visoko, dokler se val ne vrne nazaj. Torej bi moral biti pravi časovni diagram nekaj takega, kot je prikazano spodaj (Oprostite za moje slabe sposobnosti pisanja)
Kako naj vaš HC-SR04 deluje samo kot oddajnik:
Skoraj naravnost je, da HC-SR04 deluje samo kot oddajnik. Kot je prikazano na časovnem diagramu, morate sprožilni zatič razglasiti za izhodni zatič in ga pustiti, da ostane visok 10 mikrosekund. To bo sprožilo ultrazvočni val. Torej, kadar želimo oddajati val, moramo samo nadzorovati sprožilni zatič senzorja oddajnika, za katerega je koda podana spodaj.
Kako naj vaš HC-SR04 deluje samo kot sprejemnik:
Kot je prikazano na časovnem diagramu, ne moremo nadzorovati dviga zatiča Echo, ker je povezan s sprožilnim zatičem. Torej nikakor ne bi mogli, da bi HC-SR04 deloval samo kot sprejemnik. Lahko pa uporabimo kramp, tako da del senzorja oddajnika pokrijemo s trakom (kot je prikazano na spodnji sliki) ali pokrovček, da ameriški val ne more uiti zunaj ohišja oddajnika, in ta val ZDA ne bo vplival na zatič Echo.
Da bi se eho zatič povzpel visoko, moramo le 10 sekund potegniti ta lažni zatič visoko. Ko ta sprejemnik sprejme ameriški val, ki ga oddaja senzor oddajnika, bo odmevni zatič nizek.
Merjenje razdalje med dvema ultrazvočnimi senzorji (HC-SR04):
Do zdaj smo razumeli, kako lahko en senzor deluje kot oddajnik, drugi pa kot sprejemnik. Zdaj moramo ultrazvočni val prenašati s senzorja oddajnika in ga sprejeti s sprejemnim senzorjem ter preveriti čas, potreben za potovanje vala od oddajnika do sprejemnika, enostavno? A na žalost !, tu imamo težavo in to ne bo delovalo.
Modul oddajnika in sprejemnik sta med seboj oddaljena in ko sprejemni modul prejme ameriški val od modula oddajnika, ne bo vedel, kdaj je oddajnik poslal ta val. Brez poznavanja začetnega časa ne moremo izračunati porabljenega časa in s tem razdalje. Da bi rešili to težavo, mora biti impulz odmeva sprejemnega modula nastavljen tako visoko, ko oddajniški modul odda ameriški val. Z drugimi besedami, modul oddajnika in sprejemnika morata sprožiti hkrati. To lahko dosežemo z naslednjo metodo.
V zgornjem diagramu Tx predstavlja senzor oddajnika, Rx pa senzor sprejemnika. Kot je prikazano, bo senzor oddajnika narejen za oddajanje ameriških valov s periodično znano zakasnitvijo, to je vse, kar mora storiti.
V senzorju sprejemnika moramo nekako narediti, da se sprožilni zatič dvigne natanko točno takrat, ko gre oddajniški zatič visoko. Torej sprva naključno sprožimo, da se sprejemniki sprožijo visoko, kar bo in ostane visoko, dokler eho pin ne pade nizko. Ta odmevni zatič se bo znižal šele, ko bo od oddajnika prejel ameriški val. Takoj ko se spusti, lahko domnevamo, da se je senzor oddajnika pravkar sprožil. Zdaj lahko s to predpostavko takoj, ko se odmev zmanjša, lahko počakamo na znano zakasnitev in nato sprožimo sprožilec sprejemnikov. To bi delno sinhroniziralo sprožilec oddajnika in sprejemnika, zato lahko s pulseIn () preberete trajanje takojšnjega odmeva in izračunate razdaljo.
Program za senzor oddajnika:
Celoten program za modul oddajnika najdete na dnu strani. Ne naredi nič drugega kot sprožiti senzor oddajnika v periodičnem intervalu.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Za sprožitev senzorja moramo narediti sprožilni zatič, da ostane visok 10uS. Koda, ki stori enako, je prikazana zgoraj
Program za sprejemnik senzorja:
V sprejemnem senzorju imamo pokrov oddajniškega očesa senzorja, da postane lažen, kot smo že omenili. Zdaj lahko z zgoraj omenjeno tehniko merimo razdaljo med dvema senzorjema. Celoten program je podan na dnu te strani. V nadaljevanju je razloženo nekaj pomembnih vrstic
Sprožilec_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Sprožilec_US (); trajanje = pulseIn (echoPin, HIGH);
Sprva sprožimo ameriški senzor s funkcijo Trigger_US (), nato pa z zanko while počakamo, da eho zatič ostane visok. Ko se zmanjša, počakamo na vnaprej določeno trajanje, to trajanje mora biti med 10 in 30 mikrosekundami, ki jih lahko določimo s poskusi in napakami (lahko pa uporabimo improvizirano idejo, navedeno spodaj). Po tej zakasnitvi z isto funkcijo znova sprožite ZDA in nato uporabite funkcijo pulseIn () za izračun trajanja vala.
Zdaj po enakih starih formulah lahko izračunamo razdaljo kot spodaj
razdalja = trajanje * 0,034;
Delo:
Povezave vzpostavite, kot je razloženo v programu. Prekrijte del Tx senzorja sprejemnika, kot je prikazano na sliki. Nato naložite kodo oddajnika in kodo sprejemnika, ki sta navedeni spodaj, na oddajnik oziroma sprejemnik Arduino. Odprite serijski monitor sprejemnega modula in opazili boste razdaljo med dvema moduloma, ki je prikazana, kot je prikazano na spodnjem videu.
Opomba: Ta metoda je zgolj ideologija in morda ni natančna ali zadovoljiva. Lahko pa poskusite spodnjo improvizirano idejo za boljše rezultate.
Improvizirana ideja - umerjanje senzorja z znano razdaljo:
Zdi se, da je bila metoda, ki je bila do zdaj nenavadno razložena, zadovoljiva, vendar je za moj projekt zadostovala. Vendar bi rad delil tudi pomanjkljivosti te metode in način, kako jih odpraviti. Ena glavnih pomanjkljivosti te metode je, da predpostavljamo, da eho zatič sprejemnika pade nizko takoj po tem, ko je senzor oddajnika prenašal ameriški val, kar pa ne drži, saj bo val potreboval nekaj časa, da bo potoval od oddajnika do sprejemnika. Zato sprožilec oddajnika in sprožilec sprejemnika ne bosta popolnoma sinhronizirana.
Da bi to premagali, lahko senzor najprej umerimo z znano razdaljo. Če je razdalja znana, bomo vedeli čas, potreben ameriškemu valu, da doseže sprejemnik od oddajnika. Naj bo ta čas vzet kot Del (D), kot je prikazano spodaj.
Zdaj bomo natančno vedeli, po koliko časa bi morali sprožilni zatič sprejemnika dvigniti na visoko, da se sinhronizira s sprožilcem oddajnika. To trajanje lahko izračunamo z znano zamudo (t) - Del (D). Zaradi časovnih omejitev te ideje nisem mogel preizkusiti, zato nisem prepričan, kako natančno bi delovala. Torej, če slučajno poskusite, mi sporočite rezultate prek komentarja.