Servogesteuerter Hindernisvermeidungs-Roboter: Bauen mit Arduino & HC-SR04
Komponenten und Zubehör
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
|
× | 1 | ||||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 |
Notwendige Werkzeuge und Maschinen
![]() |
|
Apps und Online-Dienste
![]() |
|
Über dieses Projekt
Alles über das Projekt
Ich bin Student der Media Arts Design an der Multimedia University, Cyberjaya, Malaysia. Dies ist mein Gamma-Jahr im Studium Media Art, Interaction Design ist das Fach, das Studenten beibringt, wie man Arduino-Komponenten verwendet und wie sie funktionieren. Für meine Abschlussarbeit habe ich den Hindernisvermeidungs-Roboter als eigenes Projekt gewählt und gelernt, wie jede Komponente funktioniert.
Schritt 1:
Bereiten Sie Ihr Roboter-Chassis vor und bauen Sie es zusammen. Im Paket befinden sich einige Komponenten: Chassis, zwei Motoren, zwei Räder, ein Vorderrad, ein Batteriehalter, einige Schrauben, ein Schalter und Jumper-Wires. Foto unten:

Schritt 2:
Bevor Sie die Jumper-Wires an beide Motoren löten, empfehle ich, jede Komponente zu testen, um sicherzustellen, dass alles gut funktioniert: beide DC-Motoren, Arduino-Board, Motor Shield, Servomotor und Ultraschallsensor. Dann beginnen wir, die roten und schwarzen Drähte an beiden Motoren zu löten, Beispielbild unten:

Schritt 3:
Kommen wir zum Batterie-Chassis und Schalter. Wir müssen nur die Hälfte des schwarzen Drahts vom Batterie-Chassis abschneiden und eine Drahtseite an ein Loch löten, den anderen schwarzen Draht an das andere Loch. Unser Schalter ist bereit!
Schritt 4:
Wir müssen Arduino-Board und Motor Shield-Board stapeln, das Motor Shield wird auf das Arduino-Board gesteckt. Beispiel unten:

Schritt 5:
Wir widmen uns dem Motor Shield Board. Dieser Shield liefert Strom für die Motoren und den Servomotor; die Motoren benötigen viel Strom, und dieser Shield kann bis zu 600 mA pro Motor liefern. Wir müssen die DC-Motorkabel am Motor Shield Board verlöten/fixieren. Wenn Ihre DC-Motorkabel lang genug sind, um den Motor Shield zu erreichen, ist das super; wenn nicht, benötigen Sie möglicherweise externe Jumper-Wires (egal ob Male/Female), schneiden Sie den Jumper-Wire-Kopf ab und stellen Sie sicher, dass der Kupferleiter sichtbar wird. Dann löten Sie die externen Drähte an die DC-Motorkabel. Beispiel:

Verbinden Sie dann das linke Motorkabel mit dem M1-Anschluss des Motor Shields. Das rechte Motorkabel wird mit dem M3-Anschluss des Motor Shield Boards verbunden. Beispiel:

Schritt 6:
Dann müssen wir die Batterie-Schalter-Kabel (rot und schwarz) mit dem Motor Shield Board verbinden.

Danach benötigen wir Male- und Female-Jumper-Wires, um sie an 5V, GND, Analog Pin 4 und Analog Pin 5 zu löten. Zuvor müssen wir gleichfarbige Male- und Female-Jumper-Wires finden und sie halbieren. Warum gleiche Farbe? Erstens, um leicht zu erkennen, welches Kabel für welchen Teil ist. Zweitens: Weißer Male-Jumper-Wire wird mit weißem Female-Jumper-Wire verlötet, der an 5V angeschlossen wird. Schwarzer Male-Jumper-Wire wird mit Female-Jumper-Wire verlötet und der Male-Jumper-Wire an GND. Oranger Male-Jumper-Wire wird mit orangenem Female-Jumper-Wire verlötet, der orangene Male-Jumper-Wire wird an Analog Pin 5 gelötet. Zuletzt, aber nicht weniger wichtig: Brauner Male-Jumper-Wire wird mit braunem Female-Jumper-Wire verlötet, dann wird der braune Male-Jumper-Wire an Analog Pin 4 gelötet. Beispiel:

Schritt 7:
Sie können doppelseitiges Klebeband oder eine Heißklebepistole verwenden, um beide Shields am Roboter-Chassis zu befestigen.
Schritt 8: Ultraschallsensor
Von den Female- & Male-Jumper-Wires, die wir gerade verlötet haben, wird der weiße Jumper-Wire (5V) (Female-Seite) mit dem VCC-Pin des Ultraschallsensors verbunden. Schwarzer Jumper-Wire (GND) (Female-Seite) wird an GND-Pin angeschlossen. Brauner Jumper-Wire (Analog Pin 4) (Female-Seite) wird an Echo-Pin angeschlossen. Oranger Jumper-Wire (Analog Pin 5) (Female-Seite) wird an TRIG-Pin angeschlossen.

Schritt 9:
Zuletzt wird der Servomotor an den servo_2-Steckplatz angeschlossen. Hinweis* (Es gibt verschiedene Arten von Servomotoren. Sie müssen eventuell online nachschauen, wie sie in den servo_2-Slot gesteckt werden). Unten ist meine eigene Version des Servo-Slots.

Letzter Schritt: Code
Für diesen Hindernisvermeidungs-Roboter benötigen wir 3 Bibliotheken: Motor Shield Library für den Motor Shield Treiber, New Ping Library für den Ultraschallsensor. Drittens die Arduino IDE. Unten sind die Download-Links für die Bibliotheken:
Motor Shield Library- New Ping Library
Ich danke euch, dass ihr euch mein Projekt anseht. Ich hoffe, die Anweisungen sind klar genug, damit ihr den Hindernisvermeidungs-Roboter selbst bauen könnt. Danke!
Video zum Test:
Code
- Arduino IDE
Arduino IDE C#
Kopieren Sie den Code in die Arduino IDE und laden Sie ihn auf Ihr Arduino-Board hoch
#include#include #include #define TRIG_PIN A4 #define ECHO_PIN A5 #define MAX_DISTANCE_POSSIBLE 1000 #define MAX_SPEED 150 // #define MOTORS_CALIBRATION_OFFSET 3 #define COLL_DIST 20 #define TURN_DIST COLL_DIST+10 NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE_POSSIBLE); AF_DCMotor leftMotor(3, MOTOR12_8KHZ); AF_DCMotor rightMotor(1, MOTOR12_8KHZ); Servo neckControllerServoMotor; int pos = 0; int maxDist = 0; int maxAngle = 0; int maxRight = 0; int maxLeft = 0; int maxFront = 0; int course = 0; int curDist = 0; String motorSet = ""; int speedSet = 0; void setup() { neckControllerServoMotor.attach(10); neckControllerServoMotor.write(90); delay(2000); checkPath(); motorSet = "FORWARD"; neckControllerServoMotor.write(90); moveForward(); } void loop() { checkForward(); checkPath(); } void checkPath() { int curLeft = 0; int curFront = 0; int curRight = 0; int curDist = 0; neckControllerServoMotor.write(144); delay(120); for(pos = 144; pos >= 36; pos-=18) { neckControllerServoMotor.write(pos); delay(90); checkForward(); curDist = readPing(); if (curDist < COLL_DIST) { checkCourse(); break; } if (curDist < TURN_DIST) { changePath(); } if (curDist > curDist) {maxAngle = pos;} if (pos > 90 && curDist > curLeft) { curLeft = curDist;} if (pos == 90 && curDist > curFront) {curFront = curDist;} if (pos < 90 && curDist > curRight) {curRight = curDist;} } maxLeft = curLeft; maxRight = curRight; maxFront = curFront; } void setCourse() { if (maxAngle < 90) {turnRight();} if (maxAngle > 90) {turnLeft();} maxLeft = 0; maxRight = 0; maxFront = 0; } void checkCourse() { moveBackward(); delay(500); moveStop(); setCourse(); } void changePath() { if (pos < 90) {lookLeft();} if (pos > 90) {lookRight();} } int readPing() { delay(70); unsigned int uS = sonar.ping(); int cm = uS/US_ROUNDTRIP_CM; return cm; } void checkForward() { if (motorSet=="FORWARD") {leftMotor.run(FORWARD); rightMotor.run(FORWARD);} } void checkBackward() { if (motorSet=="BACKWARD") {leftMotor.run(BACKWARD); rightMotor.run(BACKWARD);} } void moveStop() {leftMotor.run(RELEASE); rightMotor.run(RELEASE);} void moveForward() { motorSet = "FORWARD"; leftMotor.run(FORWARD); rightMotor.run(FORWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { leftMotor.setSpeed(speedSet+MOTORS_CALIBRATION_OFFSET); rightMotor.setSpeed(speedSet); delay(5); } } void moveBackward() { motorSet = "BACKWARD"; leftMotor.run(BACKWARD); rightMotor.run(BACKWARD); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { leftMotor.setSpeed(speedSet+MOTORS_CALIBRATION_OFFSET); rightMotor.setSpeed(speedSet); delay(5); } } void turnRight() { motorSet = "RIGHT"; leftMotor.run(FORWARD); rightMotor.run(BACKWARD); delay(400); motorSet = "FORWARD"; leftMotor.run(FORWARD); rightMotor.run(FORWARD); } void turnLeft() { motorSet = "LEFT"; leftMotor.run(BACKWARD); rightMotor.run(FORWARD); delay(400); motorSet = "FORWARD"; leftMotor.run(FORWARD); rightMotor.run(FORWARD); } void lookRight() {rightMotor.run(BACKWARD); delay(400); rightMotor.run(FORWARD);} void lookLeft() {leftMotor.run(BACKWARD); delay(400); leftMotor.run(FORWARD);}
Schaltplan
Herstellungsprozess
- Simple Pi Robot: 2-WD Autonomer Rover mit Raspberry Pi bauen
- Autonomer Linienfolger-Roboter mit Arduino UNO
- Roomba Create 2 per Arduino & Android steuern – Schritt-für-Schritt
- Arduino & MPU6050: Präzise Servomotor-Steuerung mit SG90 & MG996R
- Autonomer Hausassistent-Roboter bauen: Komplette Teileliste & Setup-Anleitung
- DIY Roboterarm mit Gestensteuerung (Hand-Tracking) – Arduino & 3D-Druck
- Arduino Roboterarm per Android-App & Bluetooth steuern
- Smartes Indoor-Navigations-Roboter-Kit für Arduino-Projekte
- Servomotoren: Funktionsweise und Bedeutung
- Präzision maximieren: Getriebe mit Servomotoren optimal kombinieren






