- Kaip sukurti kliūčių, išvengiant roboto, naudojant ultragarso jutiklį
- Būtini komponentai
- Grandinės schema
- Kliūčių išvengimas roboto naudojant „Arduino-Code“
Roboto išvengimas kliūčių yra intelektualus prietaisas, kuris gali automatiškai pajusti priešais esančią kliūtį ir jos išvengti, pasisukdamas kita linkme. Ši konstrukcija leidžia robotui naršyti nežinomoje aplinkoje, išvengiant susidūrimų, o tai yra pagrindinis bet kurio autonominio mobiliojo roboto reikalavimas. Roboto „Vengti kliūčių“ taikymas nėra ribotas ir dabar jis naudojamas daugumoje karinių organizacijų, padedančių atlikti daug rizikingų darbų, kurių negali atlikti jokie kariai.
Anksčiau mes sukūrėme „Robotą nuo kliūčių išvengti“, naudodami „Raspberry Pi“ ir naudodami PIC mikrovaldiklį. Šį kartą mes sukursime kliūčių išvengiantį robotą, naudodami ultragarso jutiklį ir „Arduino“. Čia ultragarso jutiklis naudojamas kelio kliūtims pajusti, apskaičiuojant atstumą tarp roboto ir kliūties. Jei robotas randa kokių nors kliūčių, jis keičia kryptį ir tęsia judėjimą.
Kaip sukurti kliūčių, išvengiant roboto, naudojant ultragarso jutiklį
Prieš einant statyti robotą, svarbu suprasti, kaip veikia ultragarso jutiklis, nes šis jutiklis vaidins svarbų vaidmenį nustatant kliūtį. Pagrindinis ultragarso jutiklio veikimo principas yra užfiksuoti laiką, kurį jutiklis užima perduoti ultragarso pluoštus ir gauti ultragarso pluoštus pataikius į paviršių. Tada toliau apskaičiuojamas atstumas pagal formulę. Šiame projekte naudojamas plačiai prieinamas ultragarso jutiklis HC-SR04. Norint naudoti šį jutiklį, bus laikomasi panašaus požiūrio, paaiškinto aukščiau.
Taigi, HC-SR04 „Trig“ kaištis yra aukštas mažiausiai 10 mūsų. Garso spindulys perduodamas 8 impulsais po 40 kHz.
Tada signalas atsitrenkia į paviršių ir grįžta atgal ir užfiksuojamas imtuvo HC-SR04 aido kaiščiu. Echo kaištis tuo metu jau buvo pakeltas aukštai.
Laikas, per kurį pluoštas grįžta atgal, įrašomas į kintamąjį ir konvertuojamas į atstumą, naudojant atitinkamus skaičiavimus, kaip nurodyta toliau
Atstumas = (laikas x garso greitis ore (343 m / s)) / 2
Daugelyje projektų naudojome ultragarso jutiklį, norėdami sužinoti daugiau apie ultragarso jutiklį, patikrinti kitus su ultragarso jutikliu susijusius projektus.
Šio kliūčių išvengiančio roboto komponentus galima lengvai rasti. Norint pagaminti važiuoklę, galima naudoti bet kurią žaislų važiuoklę arba pagaminti pagal užsakymą.
Būtini komponentai
- „Arduino NANO“ arba „Uno“ (bet kuri versija)
- HC-SR04 ultragarso jutiklis
- LM298N variklio tvarkyklės modulis
- 5 V nuolatinės srovės varikliai
- Baterija
- Ratai
- Važiuoklė
- Šuolių laidai
Grandinės schema
Visa šio projekto schema pateikta žemiau, nes matote, kad ji naudoja „Arduino“ nano. Bet mes taip pat galime sukurti kliūtį, išvengdami roboto, naudodami „Arduino UNO“ su ta pačia grandine (vadovaukitės tuo pačiu pinoutu) ir kodu.
Kai trasa bus paruošta, turime pastatyti savo kliūtį vengdami automobilio, montuodami grandinę ant robotų važiuoklės, kaip parodyta žemiau.
Kliūčių išvengimas roboto naudojant „Arduino-Code“
Visa programa su demonstraciniu vaizdo įrašu pateikiama šio projekto pabaigoje. Programa apims HC-SR04 modulio nustatymą ir signalų išleidimą į variklio kaiščius, kad atitinkamai judėtų variklio kryptis. Šiame projekte nebus naudojamos jokios bibliotekos.
Pirmiausia programoje apibrėžkite HC-SR04 trigą ir aidą. Šiame projekte trigeris yra prijungtas prie GPIO9, o aido kaištis - prie „Arduino NANO“ GPIO10.
int trigPin = 9; // HC- SR04 kištuko kaištis int echoPin = 10; HC-SR04 aido kaištis
Nustatykite LM298N variklio tvarkyklės modulio įvesties kaiščius. LM298N turi 4 duomenų įvesties kaiščius, naudojamus prie jo prijungto variklio krypčiai valdyti.
int revleft4 = 4; // Kairiojo variklio atbulinis judesys int fwdleft5 = 5; // „ForWarD“ kairiojo variklio judėjimas int atgal6 = 6; // Reversinis dešiniojo variklio judėjimas int fwdright7 = 7; // Dešiniojo variklio „ForWarD“ judėjimas
Į sąrankos () funkcija, apibrėžti duomenų kryptį naudojamų GPIO kaiščių. Keturi variklio kaiščiai ir paleidimo kaištis yra nustatyti kaip OUTPUT, o aido kaištis - kaip įvestis.
pinMode (revleft4, OUTPUT); // nustatyti variklio kaiščius kaip išvesties pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); „pinMode“ (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // nustatyti paleidimo kaištį kaip išvesties pinMode (echoPin, INPUT); // nustatykite aido kaištį kaip įvestį, kad užfiksuotumėte atspindėtas bangas
„ Loop“ () funkcijoje gaukite atstumą nuo HC-SR04 ir, atsižvelgiant į atstumą, perkelkite variklio kryptį. Atstumas parodys objekto atstumą, ateinantį priešais robotą. Atstumas atliekamas nudaužant ultragarso pluoštą iki 10 mus ir gaunant po 10 us. Norėdami sužinoti daugiau apie atstumo matavimą naudojant ultragarso jutiklį ir „Arduino“, spustelėkite nuorodą.
„digitalWrite“ (trigPin, LOW); vėlavimasMikrosekundės (2); „digitalWrite“ (trigPin, HIGH); // siųsti bangas 10 us delsaMikrosekundės (10); trukmė = pulseIn (echoPin, HIGH); // gauti atspindėtų bangų atstumas = trukmė / 58,2; // konvertuoti į atstumo vėlavimą (10);
Jei atstumas didesnis nei nustatytas atstumas, tai reiškia, kad jo kelyje nėra kliūčių ir ji judės pirmyn.
if (atstumas> 19) { digitalWrite (fwdright7, HIGH); // judėti į priekį digitalWrite (revright6, LOW); „digitalWrite“ (fwdleft5, HIGH); „digitalWrite“ (revleft4, LOW); }
Jei atstumas yra mažesnis už nustatytą atstumą, kad išvengtumėte kliūčių, reiškia, kad yra keletas kliūčių. Taigi šioje situacijoje robotas kuriam laikui sustos, o po to vėl trumpam sustos ir pasuks kita kryptimi.
if (atstumas <18) { digitalWrite (fwdright7, LOW); // Sustabdyti digitalWrite (revright6, LOW); „digitalWrite“ (fwdleft5, LOW); „digitalWrite“ (revleft4, LOW); vėlavimas (500); „digitalWrite“ (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); „digitalWrite“ (fwdleft5, LOW); „digitalWrite“ (revleft4, HIGH); vėlavimas (500); „digitalWrite“ (fwdright7, LOW); // Sustabdyti digitalWrite (revright6, LOW); „digitalWrite“ (fwdleft5, LOW); „digitalWrite“ (revleft4, LOW); vėlavimas (100); „digitalWrite“ (fwdright7, HIGH); „digitalWrite“ (revright6, LOW); „digitalWrite“ (revleft4, LOW); „digitalWrite“ (fwdleft5, LOW); vėlavimas (500); }
Taigi taip robotas gali išvengti kliūčių savo kelyje, niekur neužstrigdamas. Žemiau rasite visą kodą ir vaizdo įrašą.