- Nødvendige materialer:
- Konseptet med hindring som unngår robot:
- Kretsdiagram og forklaring:
- Programmering av PIC Microcontroller:
- Hindring Avoider-robot i aksjon:
Obstacle Avoider Robot er en annen kjent robot som krydder innebygde prosjekter. For de som er en ny hindringsmykrobot, er det bare en vanlig hjulrobot som kan navigere seg uten å treffe noen hindringer. Det er mange måter å bygge en Hindring-unngåelsesrobot i prosjektet, vi skal bruke en ultralydssensor (foran) og to IR-sensorer (venstre / høyre) slik at roboten vår har øyne i alle tre retninger. På denne måten kan du gjøre det mye smartere og raskere ved å oppdage gjenstander på alle tre sider og manøvrere deretter. Her saksøker vi PIC Microcontroller PIC16F877A for denne hindringen som unngår roboten.
Driften av en hindring som unngår en robot, kan observeres fra et sanntidsprodukt som kalles Hjem rengjøringsroboter. Selv om teknologien og sensorene som brukes i disse er mye kompliserte, forblir konseptet det samme. La oss se hvor mye vi kan oppnå ved å bruke våre normale sensorer og PIC-mikrokontrollere.
Sjekk også de andre hindringene som unngår roboter:
- Raspberry Pi-basert hindring som unngår robot
- DIY Smart støvsugerrobot ved hjelp av Arduino
Nødvendige materialer:
- PIC16F877A
- IR-sensor (2Nos)
- Ultralydssensor (1Nos)
- DC-girmotor (2Nos)
- L293D Motordriver
- Chaises (Du kan også lage dine egne ved hjelp av papp)
- Kraftbank (hvilken som helst tilgjengelig strømkilde)
Konseptet med hindring som unngår robot:
Konseptet med Obstacle Unngå Robot er veldig enkelt. Vi bruker sensorer for å oppdage tilstedeværelsen av gjenstander rundt roboten og bruker disse dataene for ikke å kollidere roboten over disse gjenstandene. For å oppdage et objekt kan vi bruke sensorer som IR-sensorer og ultralydsensorer.
I roboten vår har vi brukt den amerikanske sensoren som frontføleren og to IR-sensorer for henholdsvis venstre og høyre. Roboten vil bevege seg fremover når det ikke er noen gjenstand til stede før den. Så roboten vil bevege seg fremover til Ultrasonic (US) sensoren oppdager noe objekt.
Når en gjenstand blir oppdaget av den amerikanske sensoren, er det på tide å endre retning på roboten. Vi kan enten svinge til venstre eller høyre for å bestemme dreieretningen, ved hjelp av IR-sensoren for å sjekke om det er noe gjenstand nær robotens venstre eller høyre side.
Hvis det oppdages en innvending på forsiden og høyre side av roboten, vil roboten komme tilbake og svinge til venstre. Vi får roboten til å løpe bakover en viss avstand, slik at den ikke kolliderer på objektet mens du tar svingen.
Hvis det oppdages en innvending på forsiden og venstre side av roboten, vil roboten komme tilbake og svinge til høyre.
Hvis roboten når et hjørne av rommet, vil det føle objektet til stede i alle fire. I dette tilfellet må vi kjøre roboten bakover til noe av siden blir ledig.
Et annet mulig tilfelle er at det vil være et objekt foran, men det kan ikke være noe objekt verken på venstre side eller på høyre side, i dette tilfellet må vi slå tilfeldig i hvilken som helst retning.
Håper dette ville ha gitt en grov ide om hvordan en hindring unngåer fungerer, la oss nå fortsette med kretsdiagrammet for å bygge denne bot og nyte den i aksjon.
Kretsdiagram og forklaring:
Det komplette kretsdiagrammet for denne PIC-baserte hindringen som unngår hindring er vist på bildet ovenfor. Som du ser har vi brukt to IR-sensorer til å oppdage objekter på henholdsvis venstre og høyre side av roboten og en ultralydssensor for å måle avstanden til objektet som er tilstede foran roboten. Vi har også brukt en L293D- motordriver- modul til å kjøre de to motorene som er tilstede i dette prosjektet. Dette er bare vanlige DC-girmotorer for hjul og kan derfor utledes veldig enkelt. Tabellen nedenfor vil hjelpe deg i forbindelse.
S. nr |
Koblet fra |
Koblet til |
1 |
IR-sensor Utelatt pin |
RD2 (pin 21) |
2 |
IR-sensor Rett ut pin |
RD3 (pin 22) |
4 |
Motor 1 kanal A pin |
RC4 (pin 23) |
5 |
Motor 1 kanal B pin |
RC5 (pin 25) |
6 |
Motor 2-kanals A-pinne |
RC6 (pin 26) |
7 |
Motor 2-kanals B-pinne |
RC7 (pin 27) |
8 |
US Trigger Pin |
RB1 (pin 34) |
9 |
US Echo Pin |
RB2 (pin 35) |
En motordriver-modul som L293D er obligatorisk fordi strømmen som kreves for å kjøre DC-girmotoren ikke kan hentes av I / O-pinnen på PIC-mikrokontrolleren. Sensorene og modulen drives av + 5V-forsyningen som reguleres av 7805. Motordrivermodulen kan drives med til og med + 12V, men for dette prosjektet har jeg nettopp holdt fast på tilgjengelig + 5V.
Hele roboten drives av en kraftbank i mitt tilfelle. Du kan også bruke en hvilken som helst vanlig strømbank og ved å passere regulatorseksjonen eller bruke kretsen ovenfor og bruke et hvilket som helst 9V eller 12V batteri til roboten som vist i kretsskjemaet ovenfor. Når tilkoblingene er gjort, vil det se ut som dette nedenfor
Programmering av PIC Microcontroller:
Det er veldig enkelt å programmere PIC til å jobbe for en hindring. Vi må bare lese verdien av disse tre sensorene og kjøre motorene deretter. I dette prosjektet bruker vi en ultralydssensor. Vi har allerede lært hvordan vi kan grensesnitt ultralyd med PIC-mikrokontroller, hvis du er ny her, vennligst fall tilbake til den veiledningen for å forstå hvordan en amerikansk sensor fungerer med en PIC, siden jeg vil hoppe over detaljene om det her for å unngå repetisjon.
Hele programmet eller denne roboten er gitt på slutten av denne siden. Jeg har forklart de viktige delene av programmet nedenfor.
Som vi vet begynner alle programmer med Input og Output pin-erklæringer. Her er de fire pinnene på motordrivermodulen og utløserpinnene utgangspinnene, mens ekko-pinnen og to IR-ut-pinner vil bli inngått. Vi bør initialisere Timer 1-modulen for å bruke den med ultralydsensoren.
TRISD = 0x00; // PORTD erklært som utgang for grensesnitt LCD TRISB1 = 0; // Trigger pin of US sensor is sent as output pin TRISB2 = 1; // Ekko pin av US sensor er satt som inngang pin TRISB3 = 0; // RB3 er utgangsstift for LED TRISD2 = 1; TRISD3 = 1; // Begge IR-pinnene er erklært som inngang TRISC4 = 0; TRISC5 = 0; // Motor 1 pinner erklært som utgang TRISC6 = 0; TRISC7 = 0; // Motor 2 pinner erklært som utgang T1CON = 0x20;
I dette programmet må vi sjekke avstanden mellom sensoren og objektet ganske ofte, så vi har opprettet en funksjon som heter Calc_distance () der vi vil måle avstanden etter metoden som er diskutert i den amerikanske sensorgrensesnittveiledningen. Koden er vist nedenfor
ugyldig beregningsavstand () // funksjon for å beregne avstanden til USA {TMR1H = 0; TMR1L = 0; // fjern timebitene Trigger = 1; __forsink_us (10); Utløser = 0; mens (Echo == 0); TMR1ON = 1; mens (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); avstand = (0,0272 * tid) / 2; }
Det neste trinnet vil være å sammenligne verdiene til ultralydsensor og IR-sensor og flytte roboten deretter. Her i dette programmet har jeg brukt en verdi på cm som den kritiske avstanden under hvilken roboten skal begynne å gjøre retningsendringer. Du kan bruke dine foretrukne verdier. Hvis det ikke er noe, beveger roboten seg bare fremover
hvis (avstand> 5) {RC4 = 0; RC5 = 1; // Motor 1 frem RC6 = 1; RC7 = 0; // Motor 2 fremover}
Hvis et objekt oppdages, vil avstanden gå under cm. I dette tilfellet vurderer vi verdiene til venstre og høyre ultralydsensor. Basert på denne verdien bestemmer vi oss enten for å svinge til venstre eller ta til høyre. En forsinkelse på ms brukes slik at endringen er retning er synlig.
hvis (RD2 == 0 && RD3 == 1 && avstand <= 5) // Venstre sensor er blokkert {back_off (); RC4 = 1; RC5 = 1; // Motor 1 stopp RC6 = 1; RC7 = 0; // Motor 2 fremover __forsink_ms (500); } beregne_avstand (); hvis (RD2 == 1 && RD3 == 0 && avstand <= 5) // Høyre sensor er blokkert {back_off (); RC4 = 0; RC5 = 1; // Motor 1 frem RC6 = 1; RC7 = 1; // Motor 2 stopp __forsink_ms (500); }
Noen ganger vil ultralydssensoren oppdage et objekt, men det vil ikke oppdage noe objekt av IR-sensorene. I dette tilfellet svinger roboten til venstre som standard. Du kan også få det til å svinge til høyre eller i en tilfeldig retning basert på dine preferanser. Hvis det er gjenstander på begge sider, får vi det til å gå bakover. Koden for å gjøre det samme er vist nedenfor.
beregne avstand (); hvis (RD2 == 0 && RD3 == 0 && avstand <= 5) // Begge sensoren er åpen {back_off (); RC4 = 0; RC5 = 1; // Motor 1 frem RC6 = 1; RC7 = 1; // Motor 2 stopp __forsink_ms (500); } beregne_avstand (); hvis (RD2 == 1 && RD3 == 1 && avstand <= 5) // Begge sensoren er blokkert {back_off (); RC4 = 1; RC5 = 0; // Motor 1 revers RC6 = 1; RC7 = 1; // Motor 2 stopp __forsink_ms (1000); }
Hindring Avoider-robot i aksjon:
Arbeidet med prosjektet er veldig interessant og morsomt å se på. Når du er ferdig med kretsen og koden, er det bare å slå på boten og la den ligge på bakken. Den skal kunne identifisere hindringer og unngå dem på en smart måte. Men, her kommer den morsomme delen. Du kan endre koden og få den til å gjøre flere ting som å få den til å unngå trapp, gjøre den smartere ved å lagre dyrebare svinger og hva ikke?
Denne roboten vil hjelpe deg med å forstå det grunnleggende ved programmering og lære hvordan en faktisk maskinvare vil reagere på koden din. Det er alltid morsomt å programmere denne roboten og se hvordan den oppfører seg for koden i den virkelige verden.
Her har vi brukt det samme PIC perf-kortet som vi har laget for å blinke LED ved hjelp av PIC-mikrokontroller og brukt dette kortet i andre prosjekter i PIC Tutorial Series.
Roboten din skal se ut som den som er vist på bildet ovenfor. Komplett arbeid av dette prosjektet er vist i videoen nedenfor.
Håper du forsto prosjektet og likte å bygge et. Hvis du er i tvil eller har sittet fast, kan du bruke kommentarseksjonen til å legge ut spørsmålene dine, og jeg vil prøve mitt beste for å svare på dem.