- Vereiste materialen:
- Concept van obstakel vermijden van robot:
- Schakelschema en uitleg:
- Programmering van uw PIC-microcontroller:
- Obstakel vermijdende robot in actie:
Obstacle Avoider Robot is een andere beroemde robot die ingebedde projecten kruiden. Voor degenen die een nieuwe Obstacle vermijden-robot zijn, het is gewoon een normale robot op wielen die zijn weg kan navigeren zonder obstakels te raken. Er zijn veel manieren om een obstakelvermijdingsrobot in het project te bouwen, we gaan een ultrasone sensor (voorkant) en twee IR-sensoren (links / rechts) gebruiken, zodat onze robot ogen in alle drie de richtingen heeft. Op deze manier kunt u het veel slimmer en sneller maken door objecten aan alle drie de zijden te detecteren en dienovereenkomstig te manoeuvreren. Hier vervolgen we PIC Microcontroller PIC16F877A voor deze obstakelvermijdende robot.
De werking van een obstakelvermijdende robot kan worden waargenomen vanuit een realtime product genaamd Home cleaning robots. Hoewel de technologie en sensoren die hierbij worden gebruikt veel gecompliceerd zijn, blijft het concept hetzelfde. Laten we eens kijken hoeveel we kunnen bereiken met onze normale sensoren en PIC-microcontrollers.
Bekijk ook onze andere obstakelvermijdende robots:
- Raspberry Pi-gebaseerde obstakel vermijden van robot
- DIY Smart Vacuum Cleaning Robot met Arduino
Vereiste materialen:
- PIC16F877A
- IR-sensor (2Nos)
- Ultrasone sensor (1 nrs)
- DC-reductiemotor (2Nos)
- L293D-motorstuurprogramma
- Chaises (je kunt er ook zelf een bouwen met karton)
- Powerbank (elke beschikbare voedingsbron)
Concept van obstakel vermijden van robot:
Het concept van Obstacle Avoiding Robot is heel eenvoudig. We gebruiken sensoren om de aanwezigheid van objecten rondom de robot te detecteren en gebruiken deze data om de robot niet over die objecten heen te laten botsen. Om een object te detecteren, kunnen we sensoren gebruiken, zoals een IR-sensor en een ultrasone sensor.
In onze robot hebben we de US-sensor als frontsensor en twee IR-sensoren voor respectievelijk links en rechts gebruikt. De robot gaat vooruit als er geen object voor is. De robot gaat dus vooruit totdat de ultrasone (VS) sensor een object detecteert.
Wanneer een object wordt gedetecteerd door de US-sensor, is het tijd om de richting van de robot te veranderen. We kunnen naar links of rechts draaien, om de draairichting te bepalen, gebruiken we de IR-sensor om te controleren of er een object aanwezig is in de buurt van de linker- of rechterkant van de robot.
Als er een object wordt gedetecteerd aan de voor- en rechterkant van de robot, zal de robot terugkomen en naar links draaien. We laten de robot een bepaalde afstand achteruit rennen zodat hij tijdens het draaien niet tegen het object botst.
Als er een object wordt gedetecteerd aan de voor- en linkerkant van de robot, zal de robot terugkomen en naar rechts draaien.
Als de robot een hoek van de kamer bereikt, zal hij in alle vier de objecten waarnemen. In dit geval moeten we de robot achteruit rijden totdat een van de zijkanten vrij komt.
Een ander mogelijk geval is dat er een object vooraan staat, maar er is misschien geen enkel object noch aan de linkerkant, noch aan de rechterkant, in dit geval moeten we willekeurig in een van de richtingen draaien.
Ik hoop dat dit een ruw idee zou hebben gegeven van hoe een obstakelontwijker werkt, laten we nu verder gaan met het schakelschema om deze bot te bouwen en ervan te genieten in actie.
Schakelschema en uitleg:
Het volledige schakelschema van de op PIC gebaseerde obstakelvermijdende robot wordt getoond in de bovenstaande afbeelding. Zoals je kunt zien, hebben we twee IR-sensoren gebruikt om objecten links en rechts van de robot te detecteren en een ultrasone sensor om de afstand te meten van het object dat voor de robot aanwezig is. We hebben ook een L293D Motor Driver-module gebruikt om de twee motoren in dit project aan te drijven. Dit zijn gewoon gewone DC-tandwielmotoren voor wielen en kunnen daarom heel gemakkelijk worden afgeleid. De volgende tabel helpt u bij het maken van verbindingen.
S.No |
Verbonden vanaf |
Verbonden met |
1 |
IR-sensor Pin weggelaten |
RD2 (pen 21) |
2 |
IR-sensor Rechtse pin |
RD3 (pen 22) |
4 |
Motor 1 kanaal A pin |
RC4 (pen 23) |
5 |
Motor 1 kanaal B-pin |
RC5 (pen 25) |
6 |
Motor 2 kanaal A-pin |
RC6 (pen 26) |
7 |
Motor 2 kanaal B-pin |
RC7 (pen 27) |
8 |
Amerikaanse triggerpin |
RB1 (pen 34) |
9 |
Amerikaanse Echo Pin |
RB2 (pen 35) |
Een motorstuurprogrammamodule zoals L293D is verplicht omdat de hoeveelheid stroom die nodig is om de DC-reductiemotor te laten draaien, niet kan worden verkregen via de I / O-pin van de PIC-microcontroller. De sensoren en de module worden gevoed door de + 5V voeding die wordt geregeld door de 7805. De motor driver module kan zelfs gevoed worden met + 12V, maar voor dit project heb ik me gewoon vastgehouden aan de beschikbare + 5V.
De complete Robot wordt in mijn geval aangedreven door een Powerbank. U kunt ook elke gewone powerbank gebruiken en het regelaargedeelte passeren of het bovenstaande circuit gebruiken en elke 9V- of 12V-batterij voor de robot gebruiken, zoals weergegeven in het bovenstaande schakelschema. Zodra uw verbindingen zijn voltooid, ziet het er hieronder ongeveer zo uit
Programmering van uw PIC-microcontroller:
Je PIC programmeren om te werken voor een obstakelontwijker is heel eenvoudig. We hoeven alleen de waarde van deze drie sensoren af te lezen en de motoren dienovereenkomstig te besturen. In dit project maken we gebruik van een ultrasone sensor. We hebben al geleerd hoe we ultrasoon kunnen communiceren met de PIC-microcontroller.Als je hier nieuw bent, val dan alstublieft terug op die tutorial om te begrijpen hoe een Amerikaanse sensor werkt met een PIC, aangezien ik de details hierover hier zal overslaan om herhaling te voorkomen.
Het volledige programma of deze Robot staat aan het einde van deze pagina, ik heb de belangrijke delen van het programma hieronder nader toegelicht.
Zoals we weten beginnen alle programma's met de Input en Output pin declaraties. Hier zijn de vier pinnen van de Motor Driver-module en de triggerpinnen de uitgangspennen, terwijl de echopin en twee IR-uit-pinnen worden ingevoerd. We moeten de module Timer 1 initialiseren om deze te gebruiken met de ultrasone sensor.
TRISD = 0x00; // PORTD gedeclareerd als uitvoer voor interfacing LCD TRISB1 = 0; // Triggerpin van Amerikaanse sensor wordt verzonden als outputpin TRISB2 = 1; // Echopin van Amerikaanse sensor is ingesteld als invoerpin TRISB3 = 0; // RB3 is output pin voor LED TRISD2 = 1; TRISD3 = 1; // Beide IR-sensorpinnen worden verklaard als invoer TRISC4 = 0; TRISC5 = 0; // Motor 1-pinnen gedeclareerd als uitvoer TRISC6 = 0; TRISC7 = 0; // Motor 2 pinnen gedeclareerd als output T1CON = 0x20;
In dit programma zouden we de afstand tussen de sensor en het object vrij vaak moeten controleren, dus hebben we een functie gemaakt met de naam bereken_afstand () waarbinnen we de afstand zullen meten volgens de methode die wordt besproken in de Amerikaanse handleiding voor sensorinterfaces. De code wordt hieronder weergegeven
void bereken_afstand () // functie om de afstand van US {TMR1H = 0 te berekenen; TMR1L = 0; // wis de timerbits Trigger = 1; __delay_us (10); Trigger = 0; while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); afstand = (0,0272 * time_taken) / 2; }
De volgende stap zou zijn om de waarden van de ultrasone sensor en de IR-sensor te vergelijken en de robot dienovereenkomstig te verplaatsen. Hier in dit programma heb ik een waarde van cm gebruikt als de kritische afstand waaronder de robot moet beginnen met het veranderen van de richting. U kunt uw voorkeurswaarden gebruiken. Als er geen object is, gaat de robot gewoon vooruit
if (afstand> 5) {RC4 = 0; RC5 = 1; // Motor 1 vooruit RC6 = 1; RC7 = 0; // Motor 2 vooruit}
Als er een object wordt gedetecteerd, zal de afstand kleiner zijn dan cm. In dit geval kijken we naar de waarden van de linker en rechter ultrasone sensor. Op basis van deze waarde besluiten we ofwel linksaf ofwel rechtsaf te slaan. Er wordt een vertraging van ms gebruikt zodat de verandering in de richting zichtbaar is.
if (RD2 == 0 && RD3 == 1 && afstand <= 5) // Linkersensor is geblokkeerd {back_off (); RC4 = 1; RC5 = 1; // Motor 1 stop RC6 = 1; RC7 = 0; // Motor 2 vooruit __delay_ms (500); } bereken_afstand (); if (RD2 == 1 && RD3 == 0 && afstand <= 5) // Rechter sensor is geblokkeerd {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vooruit RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (500); }
Soms detecteerde de ultrasone sensor een object, maar werd er geen object gedetecteerd door de IR-sensoren. In dit geval draait de robot standaard naar links. U kunt het ook naar rechts of in een willekeurige richting laten draaien op basis van uw voorkeuren. Als er aan beide kanten objecten zijn, laten we deze achteruit gaan. De code om hetzelfde te doen, wordt hieronder weergegeven.
bereken_afstand (); if (RD2 == 0 && RD3 == 0 && afstand <= 5) // Beide sensoren zijn open {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vooruit RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (500); } bereken_afstand (); if (RD2 == 1 && RD3 == 1 && afstand <= 5) // Beide sensoren zijn geblokkeerd {back_off (); RC4 = 1; RC5 = 0; // Motor 1 achteruit RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (1000); }
Obstakel vermijdende robot in actie:
De werking van het project is erg interessant en leuk om te zien. Als je klaar bent met je Circuit en Code, zet je gewoon je Bot aan en laat je hem op de grond liggen. Het moet obstakels kunnen identificeren en deze slim kunnen vermijden. Maar hier komt het leuke gedeelte. U kunt de code wijzigen en ervoor zorgen dat deze meer dingen doet, zoals het vermijden van een trap, het slimmer maken door kostbare beurten op te slaan en wat niet?
Deze robot zal u helpen de basis van programmeren te begrijpen en te leren hoe echte hardware op uw code reageert. Het is altijd leuk om deze robot te programmeren en te kijken hoe hij zich gedraagt voor de code in de echte wereld.
Hier hebben we hetzelfde PIC-perf-bord gebruikt dat we hebben gemaakt voor knipperende LED's met behulp van PIC-microcontroller en dit bord hebben we gebruikt in andere projecten van de PIC Tutorial-serie.
Uw robot moet er ongeveer zo uitzien als de robot die in de bovenstaande afbeelding wordt getoond. De volledige werking van dit project wordt getoond in de onderstaande video.
Ik hoop dat je het project hebt begrepen en het leuk vond om er een te bouwen. Als je twijfels hebt of vastloopt, kun je het commentaargedeelte gebruiken om je vragen te posten en ik zal mijn best doen om ze te beantwoorden.