- Hoe een obstakel te bouwen door een robot te vermijden met behulp van een ultrasone sensor
- Componenten vereist
- Schakelschema
- Obstakel Robot vermijden met Arduino - Code
Obstakel vermijden Robot is een intelligent apparaat dat automatisch het obstakel ervoor kan detecteren en deze kan vermijden door zichzelf in een andere richting te draaien. Dit ontwerp stelt de robot in staat om in een onbekende omgeving te navigeren door botsingen te vermijden, wat een primaire vereiste is voor elke autonome mobiele robot. De toepassing van de Obstacle Avoiding-robot is niet beperkt en wordt nu in de meeste militaire organisaties gebruikt, wat helpt bij het uitvoeren van veel risicovolle taken die door geen enkele soldaat kunnen worden gedaan.
We hebben eerder Obstacle Avoiding Robot gebouwd met Raspberry Pi en PIC Microcontroller. Deze keer zullen we een Obstacle vermijdende robot bouwen met behulp van een ultrasone sensor en Arduino. Hier wordt een ultrasone sensor gebruikt om de obstakels in het pad te detecteren door de afstand tussen de robot en het obstakel te berekenen. Als de robot een obstakel vindt, verandert hij van richting en blijft hij bewegen.
Hoe een obstakel te bouwen door een robot te vermijden met behulp van een ultrasone sensor
Voordat u de robot gaat bouwen, is het belangrijk om te begrijpen hoe de ultrasone sensor werkt, omdat deze sensor een belangrijke rol zal spelen bij het detecteren van obstakels. Het basisprincipe achter de werking van een ultrasone sensor is het noteren van de tijd die de sensor nodig heeft om ultrasone stralen uit te zenden en de ultrasone stralen te ontvangen nadat ze het oppervlak hebben geraakt. Vervolgens wordt de afstand verder berekend met behulp van de formule. In dit project wordt de algemeen verkrijgbare HC-SR04 Ultrasone Sensor gebruikt. Om deze sensor te gebruiken, zal een vergelijkbare aanpak worden gevolgd, zoals hierboven uitgelegd.
Dus de Trig-pin van HC-SR04 is hoog gemaakt voor minstens 10 ons. Een sonische straal wordt uitgezonden met 8 pulsen van elk 40 KHz.
Het signaal raakt dan het oppervlak en keert terug en wordt opgevangen door de ontvanger Echo-pin van HC-SR04. De Echo-pin was op dat moment al hoog gemaakt en hoog verzonden.
De tijd die de straal nodig heeft om terug te keren, wordt in variabele opgeslagen en omgezet in afstand met behulp van geschikte berekeningen zoals hieronder
Afstand = (tijd x geluidssnelheid in lucht (343 m / s)) / 2
We hebben in veel projecten een ultrasone sensor gebruikt, om meer te weten te komen over de ultrasone sensor, bekijk andere projecten met betrekking tot de ultrasone sensor.
De componenten voor deze obstakelvermijdende robot zijn gemakkelijk te vinden. Om chassis te maken, kan elk speelgoedchassis worden gebruikt of op maat worden gemaakt.
Componenten vereist
- Arduino NANO of Uno (elke versie)
- HC-SR04 Ultrasone sensor
- LM298N Motorbesturingsmodule
- 5V DC-motoren
- Batterij
- Wielen
- Chassis
- Doorverbindingsdraden
Schakelschema
Het volledige schakelschema voor dit project wordt hieronder gegeven, zoals je kunt zien dat het een Arduino nano gebruikt. Maar we kunnen ook een obstakel bouwen om de robot te vermijden met Arduino UNO met hetzelfde circuit (volg dezelfde pinout) en code.
Zodra het circuit klaar is, moeten we onze obstakel-ontwijkende auto bouwen door het circuit op een robotchassis te monteren, zoals hieronder wordt weergegeven.
Obstakel Robot vermijden met Arduino - Code
Aan het einde van dit project wordt het complete programma met een demonstratievideo gegeven. Het programma omvat het instellen van de HC-SR04-module en het uitvoeren van de signalen naar de motorpennen om de motorrichting overeenkomstig te verplaatsen. In dit project worden geen bibliotheken gebruikt.
Definieer eerst de triggering en de echopin van HC-SR04 in het programma. In dit project is de trig-pin verbonden met GPIO9 en is de echo-pin verbonden met GPIO10 van Arduino NANO.
int trigPin = 9; // trig-pin van HC-SR04 int echoPin = 10; // Echopin van HC-SR04
Definieer pinnen voor invoer van de LM298N Motor Driver Module. De LM298N heeft 4 data-invoerpennen die worden gebruikt om de richting van de aangesloten motor te regelen.
int revleft4 = 4; // Omgekeerde beweging van linkermotor int fwdleft5 = 5; // ForWarD-beweging van linkermotor int revright6 = 6; // Omgekeerde beweging van de rechtermotor int fwdright7 = 7; // ForWarD-beweging van de rechtermotor
In setup () functie, bepalen de data richting gebruikt GPIO pinnen. De vier motorpinnen en de triggerpin zijn ingesteld als OUTPUT en de Echo Pin is ingesteld als input.
pinMode (revleft4, OUTPUT); // stel Motorpennen in als output pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // stel trig-pin in als output pinMode (echoPin, INPUT); // stel echo-pin in als invoer om gereflecteerde golven op te vangen
In loop () functie, verkrijg de afstand van HC-SR04 en beweeg op basis van de afstand de motorrichting. De afstand geeft de objectafstand weer die voor de robot komt. De afstand wordt genomen door een ultrasone straal tot 10 us te laten barsten en deze na 10 us te ontvangen. Volg de link voor meer informatie over het meten van afstanden met een ultrasone sensor en Arduino.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // stuur golven voor 10 ons delayMicroseconds (10); duur = pulseIn (echoPin, HIGH); // ontvang gereflecteerde golven afstand = duur / 58,2; // converteren naar afstandsvertraging (10);
Als de afstand groter is dan de gedefinieerde afstand, betekent dit dat er geen obstakel op zijn pad is en dat het in voorwaartse richting zal bewegen.
if (afstand> 19) { digitalWrite (fwdright7, HIGH); // ga vooruit digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Als de afstand kleiner is dan de gedefinieerde afstand, betekent het vermijden van obstakels dat er een obstakel voor de boeg is. Dus in deze situatie zal de robot een tijdje stoppen en daarna weer een tijdje naar achteren gaan stoppen en dan een andere richting inslaan.
if (afstand <18) { digitalWrite (fwdright7, LOW); // Stop digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); vertraging (500); digitalWrite (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); vertraging (500); digitalWrite (fwdright7, LOW); // Stop digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); vertraging (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); vertraging (500); }
Zo kan een robot obstakels op zijn pad vermijden zonder ergens vast te komen te zitten. Vind de volledige code en video hieronder.