- Nødvendige materialer:
- Begrebet hindring, der undgår robot:
- Kredsløbsdiagram og forklaring:
- Programmering af din PIC Microcontroller:
- Hindring Avoider-robot i aktion:
Hindring Avoider Robot er en anden berømt robot, der krydrer indlejrede projekter. For dem, der er nye forhindringsroboter, er det bare en normal hjulrobot, der kunne navigere sig uden at ramme nogen forhindringer. Der er mange måder at opbygge en hindringsundgåelsesrobot på i projektet, vi skal bruge en ultralydssensor (foran) og to IR-sensorer (venstre / højre), så vores robot har øjne i alle tre retninger. På denne måde kan du gøre det meget smartere og hurtigere ved at registrere objekter på alle tre sider og manøvrere i overensstemmelse hermed. Her sagsøger vi PIC Microcontroller PIC16F877A for denne hindring, der undgår robot.
Betjeningen af en forhindring, der undgår robot, kan observeres fra et realtidsprodukt kaldet Hjemmereensningsrobotter. Selvom teknologien og sensorerne, der anvendes i disse, er meget komplicerede, forbliver konceptet det samme. Lad os se, hvor meget vi kan opnå ved hjælp af vores normale sensorer og PIC-mikrocontrollere.
Tjek også vores andre forhindringsundgående robotter:
- Hindbær Pi-baseret forhindring, der undgår robot
- DIY Smart støvsugerrobot ved hjælp af Arduino
Nødvendige materialer:
- PIC16F877A
- IR-sensor (2Nos)
- Ultralydssensor (1Nos)
- DC gearmotor (2Nos)
- L293D motordriver
- Chaises (Du kan også bygge dine egne ved hjælp af pap)
- Strømbank (enhver tilgængelig strømkilde)
Begrebet hindring, der undgår robot:
Konceptet med hindring, der undgår robot, er meget simpelt. Vi bruger sensorer til at registrere tilstedeværelsen af objekter omkring robotten og bruger disse data til ikke at kollidere robotten over disse objekter. For at opdage et objekt kan vi bruge enhver brugssensor som IR-sensor og ultralydssensor.
I vores robot har vi brugt den amerikanske sensor som den forreste sensor og to IR-sensorer til henholdsvis venstre og højre. Robotten bevæger sig fremad, når der ikke er nogen genstand til stede før den. Så robotten bevæger sig fremad, indtil Ultrasonic (US) sensoren registrerer ethvert objekt.
Når en genstand registreres af den amerikanske sensor, er det tid til at ændre retning af robotten. Vi kan enten dreje til venstre eller højre for at bestemme drejeretningen, ved hjælp af IR-sensoren til at kontrollere, om der er nogen genstand nær venstre eller højre side af robotten.
Hvis der registreres en indsigelse på forsiden og højre side af robotten, vil robotten vende tilbage og dreje til venstre. Vi får robotten til at løbe bagud i en bestemt afstand, så den ikke kolliderer på objektet, mens du drejer.
Hvis der registreres en indsigelse på forsiden og venstre side af robotten, vil robotten vende tilbage og dreje til højre.
Hvis robotten når et hjørne af rummet, vil det føle objekt, der er til stede i alle fire. I dette tilfælde er vi nødt til at køre robotten bagud, indtil nogen af siden bliver fri.
Et andet muligt tilfælde er, at der vil være et objekt foran, men der er muligvis ikke noget objekt hverken i venstre side eller på højre side, i dette tilfælde er vi nødt til tilfældigt at dreje i en hvilken som helst retning.
Håber, at dette ville have givet en grov ide om, hvordan en forhindringsundgåelse fungerer, lad os nu fortsætte med kredsløbsdiagrammet for at bygge denne bot og nyde den i aktion.
Kredsløbsdiagram og forklaring:
Det komplette kredsløbsdiagram for denne PIC-baserede forhindringsrobot er vist i ovenstående billede. Som du kan se, har vi brugt to IR-sensorer til at registrere objekter på henholdsvis venstre og højre på robotten og en ultralydssensor til at måle afstanden på objektet, der er til stede foran robotten. Vi har også brugt et L293D- motordriver- modul til at køre de to motorer, der er til stede i dette projekt. Disse er bare almindelige DC-gearmotorer til hjul og kan derfor udledes meget let. Følgende tabel hjælper dig med forbindelser.
S. nr |
Forbundet fra |
Forbundet til |
1 |
IR-sensor Udeladt pin |
RD2 (pin 21) |
2 |
IR-sensor Stik ud |
RD3 (pin 22) |
4 |
Motor 1 kanal A pin |
RC4 (pin 23) |
5 |
Motor 1 kanal B pin |
RC5 (pin 25) |
6 |
Motor 2 Channel A pin |
RC6 (pin 26) |
7 |
Motor 2 kanal B pin |
RC7 (pin 27) |
8 |
US Trigger Pin |
RB1 (pin 34) |
9 |
US Echo Pin |
RB2 (pin 35) |
Et motordrivermodul som L293D er obligatorisk, fordi strømmen, der kræves til at køre jævnstrømsgearmotoren, ikke kan hentes af I / O-stiften på PIC-mikrocontrolleren. Sensorerne og modulet drives af + 5V-forsyningen, der reguleres af 7805. Motordrivermodulet kan strømforsynes selv ved hjælp af + 12V, men til dette projekt har jeg lige holdt fast på den tilgængelige + 5V.
Den komplette robot drives af en Power bank i mit tilfælde. Du kan også bruge en hvilken som helst almindelig strømbank og ved at passere regulatorsektionen eller bruge ovenstående kredsløb og bruge ethvert 9V eller 12V batteri til robotten som vist i kredsløbsdiagrammet ovenfor. Når dine forbindelser er færdige, ser det ud som dette nedenfor
Programmering af din PIC Microcontroller:
Det er virkelig nemt at programmere din PIC til at arbejde for en hindring. Vi skal bare læse værdien af disse tre sensorer og køre motorerne i overensstemmelse hermed. I dette projekt bruger vi en ultralydssensor. Vi har allerede lært, hvordan man interagerer ultralyd med PIC-mikrocontroller, hvis du er ny her, bedes du falde tilbage til den vejledning for at forstå, hvordan en amerikansk sensor fungerer med en PIC, da jeg vil springe over detaljerne om det her for at undgå gentagelse.
Det komplette program eller denne robot findes i slutningen af denne side, jeg har yderligere forklaret de vigtige klumper af programmet nedenfor.
Som vi ved, starter alle programmer med Input og Output pin-erklæringerne. Her er de fire ben på motordrivermodulet og udløserstifterne udgangsstifterne, mens ekko-stiften og to IR-ud-stifter vil blive input. Vi skal initialisere Timer 1-modulet for at bruge det med Ultralydssensoren.
TRISD = 0x00; // PORTD erklæret som output til grænseflade mellem LCD TRISB1 = 0; // Trigger pin af US sensor sendes som output pin TRISB2 = 1; // Ekko-pin på US-sensor er indstillet som input-pin TRISB3 = 0; // RB3 er udgangsstift til LED TRISD2 = 1; TRISD3 = 1; // Begge IR-sensorstifter er deklareret som input TRISC4 = 0; TRISC5 = 0; // Motor 1 ben erklæret som output TRISC6 = 0; TRISC7 = 0; // Motor 2 ben erklæret som output T1CON = 0x20;
I dette program bliver vi nødt til at kontrollere afstanden mellem sensoren og objektet ganske ofte, så vi har oprettet en funktion med navnet calc_distance (), indeni hvilken vi måler afstanden ved hjælp af metoden diskuteret i den amerikanske sensorinterfacetutorial. Koden er vist nedenfor
ugyldig beregningsafstand () // funktion til beregning af afstanden for US {TMR1H = 0; TMR1L = 0; // ryd timer-bitene Trigger = 1; __forsinkelse (10); Trigger = 0; mens (Echo == 0); TMR1ON = 1; mens (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); distance = (0,0272 * time_taken) / 2; }
Det næste trin ville være at sammenligne værdierne for ultralydssensor og IR-sensor og flytte robotten i overensstemmelse hermed. Her i dette program har jeg brugt en værdi på cm som den kritiske afstand, hvorunder robotten skal begynde at foretage ændringer i retningen. Du kan bruge dine foretrukne værdier. Hvis der ikke er objekt, bevæger robotten sig bare fremad
hvis (afstand> 5) {RC4 = 0; RC5 = 1; // Motor 1 frem RC6 = 1; RC7 = 0; // Motor 2 fremad}
Hvis der registreres et objekt, vil afstanden gå under cm. I dette tilfælde overvejer vi værdierne for venstre og højre ultralydssensor. Baseret på denne værdi beslutter vi os enten for at dreje til venstre eller dreje til højre. En forsinkelse på ms bruges, så ændringen er retning er synlig.
hvis (RD2 == 0 && RD3 == 1 && afstand <= 5) // Venstre sensor er blokeret {back_off (); RC4 = 1; RC5 = 1; // Motor 1 stop RC6 = 1; RC7 = 0; // Motor 2 fremad __forsink_ms (500); } beregne afstand (); hvis (RD2 == 1 && RD3 == 0 && afstand <= 5) // Højre sensor er blokeret {back_off (); RC4 = 0; RC5 = 1; // Motor 1 frem RC6 = 1; RC7 = 1; // Motor 2 stop __forsink_ms (500); }
Nogle gange registrerer ultralydssensoren et objekt, men der registreres ingen objekt af IR-sensorerne. I dette tilfælde drejer robotten til venstre som standard. Du kan også få det til at dreje til højre eller i en tilfældig retning baseret på dine præferencer. Hvis der er genstande på begge sider, får vi det til at gå baglæns. Koden til at gøre det samme er vist nedenfor.
beregne afstand (); hvis (RD2 == 0 && RD3 == 0 && afstand <= 5) // Begge sensorer er åbne {back_off (); RC4 = 0; RC5 = 1; // Motor 1 frem RC6 = 1; RC7 = 1; // Motor 2 stop __forsink_ms (500); } beregne afstand (); hvis (RD2 == 1 && RD3 == 1 && afstand <= 5) // Begge sensorer er blokeret {back_off (); RC4 = 1; RC5 = 0; // Motor 1 omvendt RC6 = 1; RC7 = 1; // Motor 2 stop __forsink_ms (1000); }
Hindring Avoider-robot i aktion:
Arbejdet med projektet er meget interessant og sjovt at se. Når du er færdig med din kredsløb og kode, skal du bare tænde for din Bot og lade den stå på jorden. Det skal være i stand til at identificere forhindringer og undgå dem smart. Men her kommer den sjove del. Du kan ændre koden og få den til at gøre flere ting som at få den til at undgå en trappe, hvilket gør det smartere ved at gemme dyrebare sving og hvad ikke?
Denne robot hjælper dig med at forstå det grundlæggende ved programmering og lære, hvordan en egentlig hardware reagerer på din kode. Det er altid sjovt at programmere denne robot og se, hvordan den opfører sig for koden i den virkelige verden.
Her har vi brugt det samme PIC perf-kort, som vi har lavet til at blinke LED ved hjælp af PIC-mikrocontroller og brugt dette kort i andre projekter i PIC Tutorial Series.
Din robot skal se ud som den, der er vist på billedet ovenfor. Den komplette bearbejdning af dette projekt er vist i videoen nedenfor.
Håber du forstod projektet og nød at bygge et. Hvis du er i tvivl eller sidder fast, kan du bruge kommentarsektionen til at stille dine spørgsmål, og jeg vil gøre mit bedste for at besvare dem.