- Kako z uporabo ultrazvočnega senzorja zgraditi robota, ki se izogne oviram
- Potrebne komponente
- Shema vezja
- Izogibanje oviram Robot z uporabo Arduino - kode
Robot, ki se izogiba oviram, je inteligentna naprava, ki lahko samodejno zazna oviro pred seboj in se jim izogne tako, da se obrne v drugo smer. Ta zasnova robotu omogoča navigacijo v neznanem okolju z izogibanjem trkom, kar je glavna zahteva za vsak avtonomni mobilni robot. Uporaba robota za izogibanje oviram ni omejena in se uporablja v večini vojaških organizacij, ki pomagajo izvajati številna tvegana dela, ki jih noben vojak ne more opraviti.
Pred tem smo z Raspberry Pi in mikrokrmilnikom PIC zgradili robota, ki se izogiba oviram. Tokrat bomo z uporabo ultrazvočnega senzorja in Arduina zgradili robota, ki se izogiba oviram. Tu se ultrazvočni senzor uporablja za zaznavanje ovir na poti z izračunom razdalje med robotom in oviro. Če robot najde kakršno koli oviro, spremeni smer in nadaljuje s premikanjem.
Kako z uporabo ultrazvočnega senzorja zgraditi robota, ki se izogne oviram
Preden začnete graditi robota, je pomembno razumeti, kako deluje ultrazvočni senzor, saj bo imel ta senzor pomembno vlogo pri odkrivanju ovir. Osnovno načelo delovanja ultrazvočnega senzorja je zapisati čas, ki ga senzor potrebuje za prenos ultrazvočnih žarkov in sprejemanje ultrazvočnih žarkov po udarcu na površino. Nato se razdalja izračuna po formuli. V tem projektu se uporablja ultrazvočni senzor HC-SR04. Za uporabo tega senzorja bomo uporabili podoben pristop, razložen zgoraj.
Torej, Trig zatič HC-SR04 je narejen visoko za vsaj 10 nas. Zvočni žarek se oddaja z 8 impulzi po 40KHz.
Nato signal zadene površino in se vrne nazaj ter ga zajame sprejemni odmevni zatič HC-SR04. Echo pin je bil takrat že visoko postavljen.
Čas, ki ga žarek potrebuje za vrnitev nazaj, se shrani v spremenljivko in z ustreznimi izračuni, kot je prikazano spodaj, pretvori v razdaljo
Razdalja = (čas x hitrost zvoka v zraku (343 m / s)) / 2
Pri mnogih projektih smo uporabljali ultrazvočni senzor, če želite izvedeti več o ultrazvočnem senzorju, preveriti druge projekte, povezane z ultrazvočnim senzorjem.
Komponente za robota, ki se izogiba oviram, je enostavno najti. Za izdelavo podvozja lahko uporabite katero koli podvozje igrač ali pa ga lahko izdelate po meri.
Potrebne komponente
- Arduino NANO ali Uno (katera koli različica)
- Ultrazvočni senzor HC-SR04
- LM298N Gonilni modul motorja
- 5V enosmerni motorji
- Baterija
- Kolesa
- Podvozje
- Jumper žice
Shema vezja
Popoln diagram vezja za ta projekt je podan spodaj, saj vidite, da uporablja Arduino nano. Lahko pa z robotom Arduino UNO z istim vezjem (sledimo istemu pinout-u) in kodo izdelamo tudi oviro, ki se izogne robotu.
Ko je vezje pripravljeno, moramo svoj avtomobil, ki se izogiba oviram, zgraditi tako, da sestavimo vezje na robotsko šasijo, kot je prikazano spodaj.
Izogibanje oviram Robot z uporabo Arduino - kode
Celoten program z demonstracijskim videom je podan na koncu tega projekta. Program bo vključeval nastavitev modula HC-SR04 in oddajanje signalov na motorne zatiče za ustrezno premikanje smeri motorja. V tem projektu ne bo uporabljena nobena knjižnica.
Najprej v programu definirajte trig in odmevni zatič HC-SR04. V tem projektu je trig pin priključen na GPIO9, echo pin pa na GPIO10 Arduino NANO.
int trigPin = 9; // trig pin HC-SR04 int echoPin = 10; // Odmevni zatič HC-SR04
Določite zatiče za vhod gonilnega modula motorja LM298N. LM298N ima 4 zatiče za vnos podatkov, ki se uporabljajo za nadzor smeri motorja, priključenega nanj.
int revleft4 = 4; // REVerse gibanja levega motorja int fwdleft5 = 5; // ForWarD gibanje levega motorja int revright6 = 6; // REVerse gibanja desnega motorja int fwdright7 = 7; // ForWarD gibanje desnega motorja
V funkciji setup () določite smer podatkov uporabljenih zatičev GPIO. Štirje zatiči motorja in zatič Trig so nastavljeni kot IZHOD, odmev pa je kot vhod.
pinMode (revleft4, IZHOD); // nastavimo zatiče motorja kot izhodni pinMode (fwdleft5, OUTPUT); pinMode (revright6, IZHOD); pinMode (fwdright7, IZHOD); pinMode (trigPin, IZHOD); // nastavimo trig pin kot izhodni pinMode (echoPin, INPUT); // nastavimo odmevni zatič kot vhod za zajem odsevnih valov
V funkciji zanke () dobite razdaljo od HC-SR04 in glede na razdaljo premaknite smer motorja. Razdalja bo pokazala razdaljo predmeta, ki prihaja pred robota. Razdaljo vzamemo tako, da razpočimo ultrazvočni žarek do 10 us in ga prejmemo po 10 urah. Če želite izvedeti več o merjenju razdalje z ultrazvočnim senzorjem in Arduinom, sledite povezavi.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // pošljemo valove za 10 us delayMicroseconds (10); trajanje = pulseIn (echoPin, HIGH); // sprejem odseva odsevanih valov = trajanje / 58,2; // pretvori v zakasnitev razdalje (10);
Če je razdalja večja od določene razdalje, pomeni, da na njeni poti ni ovire in se bo premikala naprej.
if (razdalja> 19) { digitalWrite (fwdright7, HIGH); // premik naprej digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Če je razdalja manjša od določene razdalje, da se prepreči ovira, pomeni, da je pred nami kakšna ovira. Torej se bo v tej situaciji robot za nekaj časa ustavil in se nato za nekaj časa spet ustavil in nato zavil v drugo smer.
if (razdalja <18) { digitalWrite (fwdright7, LOW); // Ustavi digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); zamuda (500); digitalWrite (fwdright7, LOW); // premik povratne besede digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); zamuda (500); digitalWrite (fwdright7, LOW); // Ustavi digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); zamuda (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); zamuda (500); }
Torej, tako se lahko robot izogne oviram na svoji poti, ne da bi se kje zataknil. Spodaj poiščite celotno kodo in video.