Hackster Inc.
2020_288_41
Običajno ultrazvočne senzorje uporabljamo za merjenje razdalje do nekega objekta, v tem projektu pa jih uporabljamo za določanje položaja ciljnega objekta v dveh dimenzijah.
Kaj potrebujemo za ta projekt?
- Strojna oprema:
- Potrebovali bomo Arduino UNO ploščico in štiri ultrazvočne senzorje HC-SR04
Programska oprema:
- Integriramo razvojno okolje (IDE) Arduino
Zgodba
Ultrazvočno merjenje razdalje je zapletena naloga, ki jo je olajšal lahko dostopen in poceni modul za Arduino. Za zaznavanje ali merjenje razdalje odda ultrazvočni signal proti cilju in od ciljnega objekta se ta odbije nazaj. Arduino nato izmeri čas celotnega potovanja zvoka. Ker je hitrost zvoka znana, se lahko razdalja med modulom in ciljem enostavno izračuna.
Ta vaja je razdeljena na dva dela. V prvem delu je razložena kalibracija ultrazvočnega senzorja in 2D sledenje z 2 senzorjema, drugi del pa govori o bolj natančnem 2D sledenju z več ultrazvočnimi senzorji.
Ultrazvočna kalibracija in 2D sledenje
Ultrazvočne senzorje ali sonarne senzorje, ki se običajno uporabljajo za merjenje oddaljenosti do cilja, bomo poskusili uporabiti tako, da bomo dobili natančno lokacijo oziroma koordinato cilja. V ta namen sem uporabil senzorske module z oznako HC-SR04.
Podrobno sem poskušal to metodo razložiti kot je prikazan na videoposnetku. Razlaga zamisli o 2D sledenju z dvema moduloma.
Umerjanje senzorja
Za preverjanje natančnosti tega senzorja sem postavil ciljni predmet pred njim in meril razdaljo s pomočjo ultrazvočnega senzorja in tudi ravnila. Merjenje s pomočjo ultrazvočnega senzorja se je izkazalo kot zelo natančno. Iz grafa na sliki 2 je zelo jasno razvidno, da je izhod iz senzorja dokaj linearen. Prav tako je tudi naklon premice v razmerju 1:1, kot je bilo pričakovano. Standardni odklon napake pri meritvah je okrog 9 mm, kar je večinoma statična napaka, saj sem meril vse razdalje od skrajne točke senzorja, medtem ko Arduino razdaljo meri od oddajnega do zaznavnega elementa.
Koncept merjenja koordinat 2D
V prejšnjem primeru smo merili le eno razdaljo do ciljnega predmeta, ki predstavlja izmerjen polmer kroga, na čigar krožnici se predmet nahaja. Predmet bi se lahko nahajal kjerkoli na krožnici kroga z izmerjenim polmerom, vendar senzor deluje samo v območju, ki je oblike stožca, zato se nabor verjetnosti, kje na krožnici bi se predmet lahko nahajal, skrči na nek lok, ki se nahaja na krožnici tega kroga. Če prvemu senzorju dodamo še en senzor, bo presečišče teh senzorjev dalo točno lokacijo cilja. Kot je prikazano na sliki 4, imata oba senzorja operacijski stožec, v območju, kjer se oba stožca sekata, pa lahko izračunamo točno lokacijo predmeta. Če se predmet nahaja v območju, ki ga pokriva samo stožec iz enega senzorja, je mogoče izračunati samo razdaljo do njega, očitno pa ne bomo dobili prav nobenih informacij o predmetu, če se nahaja izven teh stožcev.
Merjenje za 2D koordinate: izračun
Z merjenjem razdalje z dvema senzorjema bo ustvarjen trikotnik. v katerem je en kot cilj, ostala dva kota pa sta senzorja. Dolžina vseh stranic tega trikotnika je znana.
Trikotnik je popolnoma zaključen in vse potrebne podatke je mogoče izračunati z uporabo osnovne geometrije. Za merjenje koordinat ciljnega predmeta je uporabljeno pravilo kosinusa, saj jih je mogoče izračunati iz kota enega izmed senzorjev, rezultat pa se lahko naprej pretvori v kartezijske koordinate ali polarne koordinate z zahtevano referenčno točko.
Na sliki 4 je prikazana tudi formula za izračun lokacije.
Merjenje 2D koordinat: nastavitev
Nastavitev je zelo preprosta in kot smo že prej omenili, sta bila potrebna vsaj dva ultrazvočna senzorja. Pritrdil sem ju na nosilno podlago. Potem je bilo treba izmeriti razdaljo med moduloma. To razdaljo je treba meriti od leve skrajne točke prvega senzorja na levi strani do leve skrajne točke drugega senzorja ali obratno. Pri določanju ločilne razdalje med senzorjema je treba upoštevati skrajno spodnjo točko senzorjev.
Če je cilj bližje, morata biti oba senzorja nekoliko bližje, tako da se stožca obeh senzorjev sekata bliže.
Manjša razdalja med senzorjema bo povzročila manjšo natančnost (zlasti pri velikem območju), večja razdalja med njima pa bo izboljšala natančnost.
Kot nagiba posameznega senzorja lahko spremenite v skladu z zahtevo glede prekrivanja stožcev posameznega senzorja.
Delovanje programske kode
Delovanje programske kode sledi naslednjim korakom:
- meritev območja senzorja 1,
- meritev območja senzorja 2,
- izračun koordinat predmeta.
Programska koda je na voljo na povezavi na koncu članka.
Ko je sistem nastavljen, ga je mogoče preveriti glede natančnosti določanja koordinat različnih ciljev. Oglejte si predstavitev na video posnetku, ki ga najdete na isti spletni strani.
Ultrazvočna kalibracija in 2D sledenje
Tudi ta metoda je razložena na videoposnetku.
Delovanje
Pri tej metodi za določanje koordinat predmeta je uporabljeno več senzorjev. Na splošno je za natančnejše merjenje koristno uporabiti večje število senzorja. Vzemimo primer nastavitve s štirimi senzorji, kot sem jih uporabil v tej vaji. Po končanem merjenju bomo dobili oddaljenost ciljnega predmeta od tega senzorja.
Za izračun položaja cilja v bočni smeri potrebujemo dve meritvi, da dobimo trikotnik in z izračunom najdemo položaj ciljnega predmeta. Ker imamo 4 senzorje, bomo imeli tako šest kombinacij (4C2) parov. Te pare vidimo na sliki 5.
Ko se pari določijo, moramo izračunati ciljno lokacijo za vsako kombinacijo senzorskih parov. Na koncu bomo imeli šest meritev za ciljno lokacijo. Z uporabo vseh teh šestih vrednosti je mogoče narediti razmeroma natančne meritve. Zdaj so vsi ti podatki povezani z veliko natančnostjo in če upoštevamo trikotnik, bo višja razdalja med senzorji pomenila večjo natančnost. Tako je večja teža dana tistemu paru, ki imata vsak svoj senzor nameščen daleč drug od drugega.
Ta metoda še vedno ni zelo natančna, ker meritev ne izvajamo do ene točke ciljnega predmeta, saj vemo, da je cilj nek ploščat predmet, mi pa merimo razdaljo od najbližje točke tega predmeta.
Priprava nastavitve
Ta nastavitev je podobna prejšnjemu primeru 2D sledenja z dvema senzorjema. Napajanje z ozemljitvijo in Vcc je povezano s skupno linijo, vsi Tx in Rx priključki pa so povezani z enim od Arduino priključkov. Lahko je povezan s katerimkoli Arduino priključkom,vendar ga je treba definirati v programski kodi. Slika 6 se tako nanaša na vse povezave.
Zatem je treba vse te senzorje namestiti z enako medsebojno razdaljo. Podobno kot v prejšnjem primeru, bo večja medsebojna razdalje pomenila večjo natančnost in obratno. Vsak posamezni senzor se lahko obrne v katero koli smer za najboljšo pokritost območja zaznavanja. Večje število senzorjev bo zaznalo ciljni predmet boljši bo rezultat, ki ga bomo dobili.
Delovanje programske kode
V bistvu obstajajo štiri funkcije, ki delujejo tako, da dobijo natančen rezultat in se izognejo lažnemu branju.
Raw_cap (): Ta funkcija bo preprosto prebrala podatke iz razpoložljivega senzorja, številka senzorja je lahko poljubno število saj, kot smo ugotovili že prej, bo višja številka tista, ki bo dala boljšo natančnost. Druga točka, ki jo je treba upoštevati, je vrednost v ukazu programske vrstice:
pulseIn(Rx[i], HIGH,5000);
Vrednost 5000 je treba spremeniti glede na postavitev predmeta, ko imamo približno določen delovni razpon, lahko izračunamo vrednost časa, ki ga (v mikrosekundah) potrebuje zvočni val, ki potuje skozi prostor do ciljnega predmeta in nazaj in ga ponovno nadomestimo s 5000. Funkcijo bomo zaključili z matriko, v kateri so vrednosti, ki so jih izmerili vsi senzorji.
Position_calc (): Ta funkcija bo sprejela različne kombinacije parov (nC2 za n število senzorjev) in bo izračunala položaj cilja v 2D formatu,
check (); Ta funkcija bo preverjala, ali bi lahko vsaka kombinacija, ki jo ima funkcija Position_calc (), oblikovala trikotnik ali ne. Če Position_calc () zaključi ta test z negativnim rezultatom, bo preprosto vnesla vrednost »0« in se tej funkciji tako izognemo in ne upoštevamo morebitne napačne vrednosti senzorjev. Ta funkcija izrablja lastnost trikotnika, da je seštevek dolžin katerih koli dveh stranic trikotnika vedno večji od dolžine preostale stranice trikotnika.
Fuse_data () Ta funkcija upošteva povprečje vseh meritev razdalj, ki je sorazmerna z razdaljo med pari senzorjev.
Nastavitev programske kode in testiranje izhoda:
- Vrednosti, kot so število senzorjev in velikosti nizov, kot so komentirani v programski kodi, je treba posodabljati. Drug pomemben parameter je določanje razdalje med temi senzorji. Tu se v polju z imenom Položaj [] doda razdalja od skrajnega levega senzorja do vseh senzorjev.
- Ko je vse nastavljeno, lahko ciljni predmet postavite pred senzorje in preverite njihove izhode.
Programska koda
Vso programsko kodo lahko najdete in si jo tudi prenesete s spletne strani, kjer je objavljen ta projekt (slika 8): https://www.hackster.io/abhilashpatel121/ultrasound-sensor-2d-tracking-with-arduino-d0b974#toc-b–ultrasound-sensor-calibration-and-2d-tracking-5