- Wie man mit einem Ultraschallsensor einen Roboter baut, der Hindernisse vermeidet
- Erforderliche Komponenten
- Schaltplan
- Hindernis vermeidender Roboter mit Arduino - Code
Hindernisvermeidungsroboter ist ein intelligentes Gerät, das das vor ihm liegende Hindernis automatisch erkennt und es vermeidet, indem es sich in eine andere Richtung dreht. Dieses Design ermöglicht es dem Roboter, in einer unbekannten Umgebung zu navigieren, indem Kollisionen vermieden werden, was eine Hauptanforderung für jeden autonomen mobilen Roboter ist. Die Anwendung des Roboters zur Vermeidung von Hindernissen ist nicht beschränkt und wird derzeit in den meisten militärischen Organisationen eingesetzt, um viele riskante Aufgaben auszuführen, die von keinem Soldaten ausgeführt werden können.
Wir haben zuvor einen Hindernisvermeidungsroboter mit Raspberry Pi und PIC Microcontroller gebaut. Dieses Mal werden wir einen Roboter zur Vermeidung von Hindernissen bauen , der einen Ultraschallsensor und Arduino verwendet. Hier wird ein Ultraschallsensor verwendet, um die Hindernisse auf dem Weg zu erfassen, indem der Abstand zwischen dem Roboter und dem Hindernis berechnet wird. Wenn der Roboter ein Hindernis findet, ändert er die Richtung und bewegt sich weiter.
Wie man mit einem Ultraschallsensor einen Roboter baut, der Hindernisse vermeidet
Vor dem Bau des Roboters ist es wichtig zu verstehen, wie der Ultraschallsensor funktioniert, da dieser Sensor eine wichtige Rolle bei der Erkennung von Hindernissen spielt. Das Grundprinzip hinter der Arbeit des Ultraschallsensors besteht darin, die Zeit zu notieren, die der Sensor benötigt, um Ultraschallstrahlen zu senden und die Ultraschallstrahlen nach dem Auftreffen auf die Oberfläche zu empfangen. Dann wird weiter die Entfernung unter Verwendung der Formel berechnet. In diesem Projekt wird der weit verbreitete Ultraschallsensor HC-SR04 verwendet. Um diesen Sensor zu verwenden, wird ein ähnlicher Ansatz verfolgt, der oben erläutert wurde.
Der Trig-Pin von HC-SR04 ist also für mindestens 10 us hoch eingestellt. Ein Schallstrahl wird mit 8 Impulsen von jeweils 40 kHz übertragen.
Das Signal trifft dann auf die Oberfläche und kehrt zurück und wird vom Empfänger-Echo-Pin des HC-SR04 erfasst. Der Echo-Pin war zu dem Zeitpunkt, als er hoch sendete, bereits hoch geworden.
Die Zeit, die der Strahl benötigt, um zurückzukehren, wird variabel gespeichert und unter Verwendung geeigneter Berechnungen wie unten in die Entfernung umgerechnet
Entfernung = (Zeit x Schallgeschwindigkeit in Luft (343 m / s)) / 2
Wir haben in vielen Projekten Ultraschallsensoren verwendet, um mehr über Ultraschallsensoren zu erfahren und andere Projekte im Zusammenhang mit Ultraschallsensoren zu überprüfen.
Die Komponenten für diesen Hindernisvermeidungsroboter sind leicht zu finden. Zur Herstellung von Chassis kann jedes Spielzeugchassis verwendet oder nach Maß angefertigt werden.
Erforderliche Komponenten
- Arduino NANO oder Uno (jede Version)
- Ultraschallsensor HC-SR04
- LM298N Motortreibermodul
- 5V Gleichstrommotoren
- Batterie
- Räder
- Chassis
- Überbrückungsdrähte
Schaltplan
Der vollständige Schaltplan für dieses Projekt ist unten angegeben, da ein Arduino-Nano verwendet wird. Wir können aber auch ein Hindernis zur Vermeidung von Robotern bauen, indem wir Arduino UNO mit derselben Schaltung (folgen Sie derselben Pinbelegung) und demselben Code verwenden.
Sobald die Rennstrecke fertig ist, müssen wir unser Hindernis aus dem Auto bauen, indem wir die Rennstrecke wie unten gezeigt auf einem Roboterchassis montieren.
Hindernis vermeidender Roboter mit Arduino - Code
Das vollständige Programm mit einem Demonstrationsvideo finden Sie am Ende dieses Projekts. Das Programm umfasst das Einrichten des HC-SR04-Moduls und die Ausgabe der Signale an die Motorstifte, um die Motorrichtung entsprechend zu ändern. In diesem Projekt werden keine Bibliotheken verwendet.
Definieren Sie zuerst den Trigger- und Echo-Pin von HC-SR04 im Programm. In diesem Projekt ist der Trigger-Pin mit GPIO9 und der Echo-Pin mit GPIO10 von Arduino NANO verbunden.
int trigPin = 9; // Trigger Pin von HC-SR04 int echoPin = 10; // Echo-Pin von HC-SR04
Definieren Sie die Pins für den Eingang des LM298N-Motortreibermoduls. Der LM298N verfügt über 4 Dateneingangspins zur Steuerung der Richtung des daran angeschlossenen Motors.
int revleft4 = 4; // Bewegung des linken Motors umkehren int fwdleft5 = 5; // Vorwärtsbewegung des linken Motors int revright6 = 6; // Bewegung des rechten Motors umkehren int fwdright7 = 7; // Vorwärtsbewegung des rechten Motors
In Setup () Funktion, definieren die Datenrichtung verwendet GPIO - Pins. Die vier Motorstifte und der Triggerstift werden als AUSGANG und der Echostift als Eingang eingestellt.
pinMode (revleft4, OUTPUT); // Motorpins als Ausgangs- PinMode setzen (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // Trigger Pin als Ausgangs- PinMode setzen (echoPin, INPUT); // Echo Pin als Eingang setzen, um reflektierte Wellen zu erfassen
In Schleife () Funktion erhalten, die Entfernung von HC-SR04 und basierend auf dem Abstand die Drehrichtung bewegen. Die Entfernung zeigt die Objektentfernung vor dem Roboter. Die Entfernung wird genommen, indem ein Ultraschallstrahl bis zu 10 us geplatzt und nach 10us empfangen wird. Um mehr über die Entfernungsmessung mit Ultraschallsensor und Arduino zu erfahren, folgen Sie dem Link.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // sende Wellen für 10 us delayMicroseconds (10); Dauer = PulsIn (echoPin, HIGH); // reflektiere Wellen empfangen entfernung = dauer / 58,2; // in Distanzverzögerung umwandeln (10);
Wenn die Entfernung größer als die definierte Entfernung ist, befindet sich kein Hindernis auf dem Weg und es bewegt sich in Vorwärtsrichtung.
if (Entfernung> 19) { digitalWrite (fwdright7, HIGH); // vorwärts bewegen digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }}
Wenn der Abstand kleiner als der definierte Abstand ist, um Hindernisse zu vermeiden, bedeutet dies, dass ein Hindernis vor Ihnen liegt. In dieser Situation stoppt der Roboter für eine Weile und bewegt sich danach wieder zurück. Halten Sie dann eine Weile an und drehen Sie sich dann in eine andere Richtung.
if (Abstand <18) { digitalWrite (fwdright7, LOW); // Stop digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); Verzögerung (500); digitalWrite (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); Verzögerung (500); digitalWrite (fwdright7, LOW); // Stop digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); Verzögerung (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); Verzögerung (500); }}
Auf diese Weise kann ein Roboter Hindernissen auf seinem Weg ausweichen, ohne irgendwo hängen zu bleiben. Den vollständigen Code und das Video finden Sie unten.