- Nepieciešamie materiāli:
- Šķēršļu novēršanas robota jēdziens:
- Shēmas shēma un skaidrojums:
- PIC mikrokontrollera programmēšana:
- Šķēršļu novēršanas robots darbībā:
Robots Obstacle Avoider ir vēl viens slavens robots, kas papildina iegultos projektus. Tiem, kas ir jauni šķēršļu gājēju roboti, tas ir tikai parasts robots ar riteņiem, kurš varētu pārvietoties pa savu ceļu, neuzķeroties uz šķēršļiem. Projektā, kurā mēs izmantosim vienu ultraskaņas sensoru (priekšā) un divus infrasarkano staru sensorus (pa kreisi / pa labi), ir daudz veidu, kā izveidot šķēršļu novēršanas robotu, lai mūsu robotam būtu acis visos trīs virzienos. Tādā veidā jūs varat padarīt to daudz gudrāku un ātrāku, atklājot objektus visās trijās pusēs un attiecīgi manevrējot. Šeit mēs iesūdzam PIC mikrokontrolleru PIC16F877A par šo šķērsli, kas ļauj izvairīties no robota.
Šķēršļu novēršanas robota darbību var novērot no reālā laika produkta, ko sauc par mājas tīrīšanas robotiem. Lai gan tehnoloģija un sensori, ko tajās izmanto, ir daudz sarežģīti, koncepcija paliek nemainīga. Apskatīsim, cik daudz mēs varam paveikt, izmantojot mūsu parastos sensorus un PIC mikrokontrollerus.
Pārbaudiet arī mūsu citus robotus, kas ļauj izvairīties no šķēršļiem:
- Aveņu Pi bāzes šķērslis, kas ļauj izvairīties no robota
- DIY Smart putekļsūcēja robots, izmantojot Arduino
Nepieciešamie materiāli:
- PIC16F877A
- IR sensors (2Nos)
- Ultraskaņas sensors (1Nos)
- DC zobrata motors (2Nos)
- L293D motora draiveris
- Cheeses (Jūs varat arī izveidot pats, izmantojot kartonus)
- Barošanas banka (jebkurš pieejamais enerģijas avots)
Šķēršļu novēršanas robota jēdziens:
Šķēršļu novēršanas robota jēdziens ir ļoti vienkāršs. Mēs izmantojam sensorus, lai noteiktu objektu klātbūtni ap robotu, un šos datus izmantojam, lai robots nesaskartos pār šiem objektiem. Objekta noteikšanai mēs varam izmantot jebkurus izmantošanas sensorus, piemēram, IR sensoru un Ultraskaņas sensoru.
Mūsu robotā mēs izmantojām ASV sensoru kā priekšējo sensoru un divus infrasarkano sensoru attiecīgi kreisajam un labajam. Robots virzīsies uz priekšu, kad pirms tā nav neviena priekšmeta. Tātad robots virzīsies uz priekšu, līdz ultraskaņas (ASV) sensors noteiks jebkuru objektu.
Kad objektu atklāj ASV sensors, ir pienācis laiks mainīt robota virzienu. Mēs varam pagriezties pa kreisi vai pa labi, lai izlemtu pagrieziena virzienu, mēs izmantojam IR sensora palīdzību, lai pārbaudītu, vai robota kreisās vai labās puses tuvumā nav objektu.
Ja robota priekšpusē un labajā pusē ir konstatēts iebildums, robots atgriezīsies un pagriezīsies pa kreisi. Mēs liekam robotam noteiktā attālumā darboties atpakaļ, lai pagrieziena laikā tas nesadurtos pret objektu.
Ja robota priekšējā un kreisajā pusē ir konstatēts iebildums, tad robots atgriezīsies un pagriezīsies pa labi.
Ja robots nonāk istabas stūrī, tas jutīs objektu, kas atrodas visos četros. Šajā gadījumā mums robots jābrauc atpakaļ, līdz kāda no sāniem kļūst brīva.
Vēl viens iespējamais gadījums ir tāds, ka priekšā būs objekts, bet ne kreisajā, ne labajā pusē var nebūt neviena objekta, šajā gadījumā mums ir nejauši jāpagriežas jebkurā virzienā.
Ceru, ka tas būtu devis aptuvenu priekšstatu par to, kā darbojas šķēršļu pārvarētājs, tagad turpināsim ķēdes diagrammu, lai izveidotu šo botu un izbaudītu to darbībā.
Shēmas shēma un skaidrojums:
Šī PIC balstītā šķēršļa novēršanas robota ķēdes shēma ir parādīta iepriekš redzamajā attēlā. Kā redzat, mēs esam izmantojuši divus infrasarkanos sensorus, lai noteiktu objektus attiecīgi robota kreisajā un labajā pusē, un ultraskaņas sensoru, lai izmērītu objekta attālumu, kas atrodas pirms robota. Mēs izmantojām arī L293D motora draivera moduli, lai darbinātu divus šajā projektā esošos motorus. Tie ir tikai parastie līdzstrāvas zobratu motori riteņiem, un tāpēc tos var viegli iegūt. Šī tabula palīdzēs jums izveidot savienojumus.
S.No |
Savienojums izveidots no |
Savienots ar |
1 |
Infrasarkanais sensors Atstāts tapas |
RD2 (21. tapa) |
2 |
Infrasarkanais sensors |
RD3 (22. tapa) |
4 |
1. motora kanāls A tapa |
RC4 (23. tapa) |
5 |
1. motora B kanāla tapa |
RC5 (25. tapa) |
6 |
2. motora A kanāla tapa |
RC6 (26. tapa) |
7 |
2. motora kanāla B tapa |
RC7 (27. tapa) |
8 |
ASV sprūda tapa |
RB1 (34. tapa) |
9 |
ASV atbalss tapa |
RB2 (35. tapa) |
Motora draivera modulis, piemēram, L293D, ir obligāts, jo PIC mikrokontrollera I / O tapa nevar iegūt strāvas daudzumu, kas nepieciešams līdzstrāvas pārnesuma motora darbināšanai. Sensori un modulis tiek darbināti ar + 5V barošanu, ko regulē 7805. Motora draivera moduli var darbināt pat ar + 12V, taču šim projektam es tikko esmu pielipis pie pieejamā + 5V.
Pilnīgu robotu manā gadījumā darbina Power banka. Varat arī izmantot jebkuru parasto enerģijas banku un nodot regulatora sadaļu vai izmantot iepriekš minēto shēmu un izmantot jebkuru 9V vai 12V akumulatoru robotam, kā parādīts iepriekšējā shēmā. Kad savienojumi ir izveidoti, tas izskatās apmēram šādi
PIC mikrokontrollera programmēšana:
Programmēt PIC, lai strādātu šķēršļu pārvarētāja darbā, ir patiešām viegli. Mums vienkārši jāizlasa šo trīs sensoru vērtība un attiecīgi jābrauc ar Motors. Šajā projektā mēs izmantojam ultraskaņas sensoru. Mēs jau esam iemācījušies sazināties ar ultraskaņu ar PIC mikrokontrolleru, ja esat jauns šeit, lūdzu, atgriezieties šajā apmācībā, lai saprastu, kā ASV sensors darbojas ar PIC, jo es šeit izlaidīšu sīkāku informāciju par to, lai izvairītos no atkārtošanās.
Pilnu programmu vai šis robots ir dota beigās šo lapu, man ir tālāk paskaidrots svarīgus gabalos zem programmā.
Kā mēs zinām, visas programmas sākas ar deklarāciju Ievade un Izeja. Šeit četras motora draivera moduļa un sprūda tapas ir izejas tapas, bet tiks ievadīta atbalss tapa un divas IR izejas tapas. Mums vajadzētu inicializēt Timer 1 moduli, lai to izmantotu ar ultraskaņas sensoru.
TRISD = 0x00; // PORTD deklarēts kā izeja LCD TRISB1 saskarnei = 0; // ASV sensora sprūda tapa tiek nosūtīta kā izejas tapa TRISB2 = 1; // ASV sensora atbalss tapa ir iestatīta kā ievades tapa TRISB3 = 0; // RB3 ir izejas tapa LED TRISD2 = 1; TRISD3 = 1; Abas IR sensoru tapas tiek deklarētas kā ieeja TRISC4 = 0; TRISC5 = 0; // Motora 1 tapas deklarētas kā izeja TRISC6 = 0; TRISC7 = 0; // Motora 2 tapas deklarētas kā izeja T1CON = 0x20;
Šajā programmā mums diezgan bieži būtu jāpārbauda attālums starp sensoru un objektu, tāpēc mēs esam izveidojuši funkciju ar nosaukumu aprēķināt_tālums (), kuras iekšpusē mēs izmērīsim attālumu ar metodi, kas apspriesta ASV sensoru saskarnes apmācībā. Kods ir parādīts zemāk
void calc_distance () // funkcija, lai aprēķinātu ASV attālumu {TMR1H = 0; TMR1L = 0; // notīrīt taimera bitus Trigger = 1; __kavēšanās_us (10); Aktivizētājs = 0; kamēr (Atbalss == 0); TMR1ON = 1; kamēr (Atbalss == 1); TMR1ON = 0; laiks_uzņemts = (TMR1L - (TMR1H << 8)); attālums = (0,0272 * uzņemtais laiks) / 2; }
Nākamais solis būtu salīdzināt ultraskaņas sensora un IR sensora vērtības un attiecīgi pārvietot robotu. Šeit šajā programmā es izmantoju cm vērtību kā kritisko attālumu, zem kura robotam jāsāk mainīt virzienu. Varat izmantot vēlamās vērtības. Ja nav priekšmeta, robots vienkārši virzās uz priekšu
ja (attālums> 5) {RC4 = 0; RC5 = 1; // Motors 1 uz priekšu RC6 = 1; RC7 = 0; // 2. motors uz priekšu}
Ja tiek atklāts objekts, tad attālums būs mazāks par cm. Šajā gadījumā mēs ņemam vērā kreisā un labā ultraskaņas sensora vērtības. Pamatojoties uz šo vērtību, mēs nolemjam vai nu pagriezties pa kreisi, vai pagriezties pa labi. Tiek izmantota ms aizkave, lai redzētu izmaiņas virzienu.
if (RD2 == 0 && RD3 == 1 && attālums <= 5) // Kreisais sensors ir bloķēts {back_off (); RC4 = 1; RC5 = 1; // Motora 1 pietura RC6 = 1; RC7 = 0; // Motors 2 uz priekšu __delay_ms (500); } aprēķināt attālumu (); if (RD2 == 1 && RD3 == 0 && attālums <= 5) // Labais sensors ir bloķēts {back_off (); RC4 = 0; RC5 = 1; // Motors 1 uz priekšu RC6 = 1; RC7 = 1; // Motora 2 apstāšanās __delay_ms (500); }
Dažreiz ultraskaņas sensors atklāja objektu, bet infrasarkano staru sensori to neatklāja. Šajā gadījumā robots pēc noklusējuma pagriežas pa kreisi. Varat arī likt pagriezties pa labi vai nejaušā virzienā, pamatojoties uz jūsu vēlmēm. Ja abās pusēs ir objekti, tad mēs to virzāmies atpakaļ. Kods, kā rīkoties tāpat, ir parādīts zemāk.
aprēķināt_attālums (); if (RD2 == 0 && RD3 == 0 && attālums <= 5) // Abi sensori ir atvērti {back_off (); RC4 = 0; RC5 = 1; // Motors 1 uz priekšu RC6 = 1; RC7 = 1; // Motora 2 apstāšanās __delay_ms (500); } aprēķināt attālumu (); if (RD2 == 1 && RD3 == 1 && attālums <= 5) // Abi sensori ir bloķēti {back_off (); RC4 = 1; RC5 = 0; // Motors 1 reversais RC6 = 1; RC7 = 1; // Motora 2 apstāšanās __delay_ms (1000); }
Šķēršļu novēršanas robots darbībā:
Projekta darbs ir ļoti interesants un jautri skatīties. Kad esat pabeidzis ķēdi un kodu, vienkārši ieslēdziet savu Bot un atstājiet to uz zemes. Tai jāspēj identificēt šķēršļus un gudri no tiem izvairīties. Bet, šeit nāk jautrā daļa. Jūs varat modificēt kodu un padarīt to darīt vairāk, piemēram, padarīt to izvairīties no kāpnēm, padarīt to gudrāku, uzglabājot dārgus pagriezienus, un kas ne?
Šis robots palīdzēs jums izprast programmēšanas pamatus un uzzināt, kā faktiskā aparatūra reaģēs uz jūsu kodu. Vienmēr ir jautri ieprogrammēt šo robotu un skatīties, kā tas reaģē uz kodu reālajā pasaulē.
Šeit mēs izmantojām to pašu PIC perf plāksni, kuru esam izgatavojuši LED mirgošanai, izmantojot PIC mikrokontrolleru, un izmantojām šo plāksni citos PIC Tutorial Series projektos.
Jūsu robotam vajadzētu izskatīties kaut kas līdzīgs tam, kas parādīts attēlā iepriekš. Šī projekta pilnīga darbība ir parādīta zemāk esošajā video.
Ceru, ka sapratāt projektu un patika to uzcelt. Ja jums ir kādas šaubas vai esat iestrēdzis, varat izmantot komentāru sadaļu, lai ievietotu savus jautājumus, un es centīšos darīt visu iespējamo, atbildot uz tiem.