- Material som krävs:
- Begreppet hinder som undviker robot:
- Kretsschema och förklaring:
- Programmering av din PIC Microcontroller:
- Hinder Avoider Robot i aktion:
Obstacle Avoider Robot är en annan känd robot som kryddar inbäddade projekt. För dem som är nya hinderundvikande robot är det bara en vanlig hjulrobot som kan navigera sig utan att slå på några hinder. Det finns många sätt att bygga en hinder-undvikande robot i projektet, vi ska använda en ultraljudssensor (fram) och två IR-sensorer (vänster / höger) så att vår robot har ögon i alla tre riktningarna. På så sätt kan du göra det mycket smartare och snabbare genom att upptäcka föremål på alla tre sidor och manövrera därefter. Här stämmer vi PIC Microcontroller PIC16F877A för detta hinder som undviker robot.
Driften av ett hinder som undviker robot kan observeras från en realtidsprodukt som kallas Hushållsrobotar. Även om tekniken och sensorerna som används i dessa är mycket komplicerade förblir konceptet detsamma. Låt oss se hur mycket vi kan åstadkomma med våra normala sensorer och PIC-mikrokontroller.
Kolla också våra andra hinder som undviker robotar:
- Raspberry Pi-baserat hinder som undviker robot
- DIY Smart dammsugningsrobot med Arduino
Material som krävs:
- PIC16F877A
- IR-sensor (2Nos)
- Ultraljudsensor (1Nos)
- DC växelmotor (2Nos)
- L293D Motor Driver
- Chaises (Du kan också bygga dina egna med kartonger)
- Kraftbank (alla tillgängliga strömkällor)
Begreppet hinder som undviker robot:
Konceptet med att hindra Robot är mycket enkelt. Vi använder sensorer för att upptäcka förekomsten av föremål runt roboten och använder dessa data för att inte kollidera roboten över dessa föremål. För att upptäcka ett objekt kan vi använda alla sensorer som IR-sensor och ultraljudssensor.
I vår robot har vi använt den amerikanska sensorn som den främre sensorn och två IR-sensorer för vänster respektive höger. Roboten kommer att gå framåt när det inte finns något föremål före det. Så roboten kommer att gå framåt tills Ultrasonic (US) sensorn upptäcker något föremål.
När ett objekt detekteras av den amerikanska sensorn är det dags att ändra robotens riktning. Vi kan antingen svänga åt vänster eller höger för att avgöra vändriktningen. Vi använder IR-sensorn för att kontrollera om det finns något föremål nära robotens vänstra eller högra sida.
Om det upptäcks en invändning på robotens främre och högra sida kommer roboten tillbaka och svänger vänster. Vi får roboten att springa bakåt för ett visst avstånd så att den inte kolliderar på objektet medan du gör svängen.
Om det upptäcks en invändning på robotens främre och vänstra sida kommer roboten att komma tillbaka och svänga åt höger.
Om roboten når ett hörn av rummet kommer det att känna objekt som finns i alla fyra. I det här fallet måste vi köra roboten bakåt tills någon av sidan blir fri.
Ett annat möjligt fall är att det kommer att finnas ett objekt framför men det kanske inte finns något objekt varken på vänster eller på höger sida, i det här fallet måste vi slumpmässigt vända i någon av riktningarna.
Hoppas att detta skulle ha gett en grov uppfattning om hur en hinderundvikare fungerar, låt oss nu fortsätta med kretsschemat för att bygga den här botten och njuta av den i aktion.
Kretsschema och förklaring:
Hela kretsschemat för den här PIC-baserade hinder som undviker roboten visas i bilden ovan. Som du kan se har vi använt två IR-sensorer för att upptäcka objekt till vänster respektive höger om roboten och en ultraljudssensor för att mäta avståndet på objektet som finns före roboten. Vi har också använt en L293D-motorförare-modul för att köra de två motorerna som finns i detta projekt. Dessa är bara vanliga DC-växelmotorer för hjul och kan därför härledas mycket enkelt. Följande tabell hjälper dig vid anslutningar.
S. nr |
Ansluten från |
Anslutna till |
1 |
IR-sensor Utelämnad stift |
RD2 (stift 21) |
2 |
IR-sensor Rakt ut stift |
RD3 (stift 22) |
4 |
Motor 1 kanal A-stift |
RC4 (stift 23) |
5 |
Motor 1 kanal B-stift |
RC5 (stift 25) |
6 |
Motor 2-kanal A-stift |
RC6 (stift 26) |
7 |
Motor 2-kanal B-stift |
RC7 (stift 27) |
8 |
US Trigger Pin |
RB1 (stift 34) |
9 |
US Echo Pin |
RB2 (stift 35) |
En motorförare-modul som L293D är obligatorisk eftersom mängden ström som krävs för att köra DC-växelmotorn inte kan hämtas av I / O-stiftet på PIC-mikrokontrollern. Sensorerna och modulen drivs av + 5V-matningen som regleras av 7805. Motordrivrutinmodulen kan drivas även med + 12V, men för det här projektet har jag precis fastnat på tillgängliga + 5V.
Hela roboten drivs av en kraftbank i mitt fall. Du kan också använda vilken vanlig kraftbank som helst och genom att passera regulatorsektionen eller använda ovanstående krets och använda valfritt 9V eller 12V batteri för roboten som visas i kretsschemat ovan. När dina anslutningar är klara skulle det se ut så här nedan
Programmering av din PIC Microcontroller:
Det är väldigt enkelt att programmera din PIC för att arbeta för en hinderundvikare. Vi måste bara läsa värdet av dessa tre sensorer och köra motorerna därefter. I det här projektet använder vi en ultraljudssensor. Vi har redan lärt oss hur man gränssnitt ultraljud med PIC mikrokontroller, om du är ny här vänligen vänta tillbaka till den handledning för att förstå hur en amerikansk sensor fungerar med en PIC, eftersom jag kommer att hoppa över detaljerna om det här för att undvika upprepning.
Det kompletta programmet eller den här roboten ges i slutet av denna sida, har jag förklaras ytterligare viktiga bitar av programmet nedan.
Som vi vet börjar alla program med Input och Output pin-deklarationerna. Här är de fyra stiften på motordrivrutinmodulen och utlösarstiften utgångsstiften, medan Echo-stiftet och två IR-utstiften kommer att matas in. Vi bör initiera Timer 1-modulen för att använda den med ultraljudssensorn.
TRISD = 0x00; // PORTD deklareras som utgång för gränssnitt mellan LCD TRISB1 = 0; // Trigger pin of US sensor is sent as output pin TRISB2 = 1; // Echo-stift på amerikansk sensor är inställt som ingångsstift TRISB3 = 0; // RB3 är utgångsstift för LED TRISD2 = 1; TRISD3 = 1; // Båda IR-sensorns stift deklareras som ingång TRISC4 = 0; TRISC5 = 0; // Motor 1-stiften deklarerade som utgång TRISC6 = 0; TRISC7 = 0; // Motor 2 stift deklareras som utgång T1CON = 0x20;
I det här programmet skulle vi behöva kontrollera avståndet mellan sensorn och objektet ganska ofta, så vi har skapat en funktion som heter Calc_distance () inom vilken vi kommer att mäta avståndet med metoden som diskuteras i den amerikanska sensorgränssnittshandledningen. Koden visas nedan
ogiltig beräkningsavstånd () // funktion för att beräkna avståndet för US {TMR1H = 0; TMR1L = 0; // rensa timerbitarna Trigger = 1; __fördröjning (10); Trigger = 0; medan (Echo == 0); TMR1ON = 1; medan (Echo == 1); TMRlON = 0; time_taken = (TMR1L - (TMR1H << 8)); distance = (0,0272 * time_taken) / 2; }
Nästa steg skulle vara att jämföra värdena för ultraljudssensor och IR-sensor och flytta roboten därefter. Här i detta program har jag använt ett värde på cm som det kritiska avståndet under vilket roboten ska börja ändra riktningen. Du kan använda dina önskade värden. Om det inte finns något objekt går roboten bara framåt
om (avstånd> 5) {RC4 = 0; RC5 = 1; // Motor 1 framåt RC6 = 1; RC7 = 0; // Motor 2 framåt}
Om ett objekt upptäcks kommer avståndet att gå under cm. I det här fallet överväger vi värdena för vänster och höger ultraljudssensor. Baserat på detta värde bestämmer vi antingen att svänga åt vänster eller sväng höger. En fördröjning på ms används så att ändringen är riktning syns.
if (RD2 == 0 && RD3 == 1 && distance <= 5) // Vänster sensor är blockerad {back_off (); RC4 = 1; RC5 = 1; // Motor 1 stopp RC6 = 1; RC7 = 0; // Motor 2 framåt __fördröjning_ms (500); } beräkna_avstånd (); if (RD2 == 1 && RD3 == 0 && distans <= 5) // Höger sensor är blockerad {back_off (); RC4 = 0; RC5 = 1; // Motor 1 framåt RC6 = 1; RC7 = 1; // Motor 2 stopp __fördröjning_ms (500); }
Ibland upptäckte ultraljudssensorn ett objekt, men det upptäcktes inget objekt av IR-sensorerna. I det här fallet svänger roboten till vänster som standard. Du kan också få det att svänga åt höger eller i en slumpmässig riktning baserat på dina preferenser. Om det finns föremål på båda sidorna får vi det gå bakåt. Koden för att göra detsamma visas nedan.
beräkna_avstånd (); if (RD2 == 0 && RD3 == 0 && distans <= 5) // Båda sensorerna är öppna {back_off (); RC4 = 0; RC5 = 1; // Motor 1 framåt RC6 = 1; RC7 = 1; // Motor 2 stopp __fördröjning_ms (500); } beräkna_avstånd (); if (RD2 == 1 && RD3 == 1 && distance <= 5) // Båda sensorerna är blockerade {back_off (); RC4 = 1; RC5 = 0; // Motor 1 omvänd RC6 = 1; RC7 = 1; // Motor 2 stopp __fördröjning_ms (1000); }
Hinder Avoider Robot i aktion:
Projektets arbete är väldigt intressant och roligt att titta på. När du är klar med din krets och kod, slå bara på din Bot och lämna den på marken. Den ska kunna identifiera hinder och undvika dem på ett smart sätt. Men här kommer den roliga delen. Du kan ändra koden och få den att göra fler saker som att få den att undvika en trappa, göra den smartare genom att lagra värdefulla svängar och vad inte?
Den här roboten hjälper dig att förstå grunderna för programmering och lära dig hur en faktisk hårdvara svarar på din kod. Det är alltid kul att programmera den här roboten och se hur den beter sig för koden i verkliga världen.
Här har vi använt samma PIC perf-kort som vi har gjort för att blinka LED med PIC-mikrokontroller och använt detta kort i andra projekt i PIC Tutorial Series.
Din robot ska se ut som den som visas på bilden ovan. Det fullständiga arbetet med detta projekt visas i videon nedan.
Hoppas att du förstod projektet och gillade att bygga ett. Om du är osäker eller fastnat kan du använda kommentarsektionen för att skicka dina frågor så ska jag göra mitt bästa för att svara på dem.