Servo-gestuurde obstakelvermijdende robot: Bouw met Arduino & HC-SR04
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino UNO | 1 |
| SG90 Micro-servomotor | 1 |
| SparkFun Ultrasonische Sensor - HC-SR04 | 1 |
| Robot Chassis Kit - 2WD met DC-motoren | 1 |
| Draadjes (generic) | 1 |
| Arduino MotorShield Rev3 | 1 |
Nodige tools en machines
- Solderbout (generic)
Apps en online diensten
- Arduino IDE
Over dit project
Ik ben een Media Arts Design-student aan de Multimedia University in Cyberjaya, Maleisië. Dit is mijn derde jaar Media Art; het vak Interaction Design leert studenten hoe Arduino-onderdelen werken. Voor mijn eindopdracht koos ik een obstakelvermijdende robot als project om te leren hoe elk component functioneert.
Stap 1: Bouw het robotchassis
Het pakket bevat het chassis, twee motoren, twee wielen, een voorwiel, een batterijhouder, schroeven, een schakelaar en draadjes.
Stap 2: Test alle componenten
Voordat u de draadjes op de motoren soldeert, test eerst alle componenten: beide DC-motoren, Arduino-board, Motor Shield, servomotor en ultrasonische sensor. Solder vervolgens de rode en zwarte draad op beide motoren.
Stap 3: Batterij en schakelaar
Knip de zwarte draad van de batterijhouder door en solder de twee uiteinden aan de schakelaar. De schakelaar is nu klaar.
Stap 4: Stapel Arduino en Motor Shield
Plaats de Motor Shield bovenop het Arduino-board.
Stap 5: Aansluiten motoren op Motor Shield
De Motor Shield levert stroom aan de motoren en servomotor (maximaal 600 mA per motor). Solder de motordraden aan de Motor Shield: linkermotor op M1, rechtermotor op M3. Als de draden te kort zijn, verleng ze met losse draadjes.
Stap 6: Batterij en sensoren aansluiten
Sluit de rode en zwarte draad van de batterij/schakelaar aan op de Motor Shield. Bereid mannetjes- en vrouwtjesdraadjes voor voor 5V, GND, Analog Pin 4 (Echo) en Analog Pin 5 (Trig). Gebruik voor elke verbinding dezelfde kleur voor herkenbaarheid: wit voor 5V, zwart voor GND, bruin voor A4, oranje voor A5. Solder mannetjes- en vrouwtjesdraadjes aan elkaar.
Stap 7: Bevestigen op chassis
Gebruik dubbelzijdig tape of een lijmpistool om de shields op het chassis te monteren.
Stap 8: Ultrasonische sensor (HC-SR04)
Sluit de sensor aan: wit (5V) → VCC, zwart (GND) → GND, bruin (A4) → Echo, oranje (A5) → Trig.
Stap 9: Servomotor
Sluit de servomotor aan op de servo_2-slot op de Motor Shield. Let op: er zijn verschillende servotypes; controleer de pinlayout online.
Laatste stap: Code
De code gebruikt drie bibliotheken:
AFMotor.h(Motor Shield driver)Servo.h(standaard)NewPing.h(ultrasonische sensor)
Installeer de bibliotheken via de Arduino Library Manager. Kopieer de onderstaande code naar de Arduino IDE en upload naar het board.
Code
#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>
#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE_POSSIBLE 1000
#define MAX_SPEED 150
#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, curFront = 0, curRight = 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 > maxDist) { maxAngle = pos; maxDist = curDist; }
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 = maxRight = 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();
return uS / US_ROUNDTRIP_CM;
}
void checkForward() {
if (motorSet == "FORWARD") {
leftMotor.run(FORWARD); rightMotor.run(FORWARD);
}
}
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); 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); 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); }
Schema
Zie de bijgevoegde schema-afbeelding voor de complete bedrading.
Productieproces
- Simple Pi Robot – Bouw een 2-WD Autonome Rover met Raspberry Pi
- Bouw Een Autonome Lijnvolgende Robot Met Arduino UNO
- Bestuur Je Roomba Create 2 Met Arduino En Android: Stapsgewijze Handleiding
- Arduino & MPU6050: Precieze Servomotor Besturing met SG90 & MG996R
- Bouw een Autonome Thuisassistent Robot: Complete Onderdelenlijst & Opzetgids
- DIY Handgebaren-gestuurde Arduino Robotarm – Stap‑voor‑Stap Bouwhandleiding
- Arduino robotarm besturen via speciale Android-app
- Arduino Nano eetrobot bouwen: stap-voor-stap handleiding
- Slim Indoor Navigatie Robot Kit voor Arduino Projecten
- Servomotoren Uitgelegd: Hoe Ze Werken en Waarom Ze Belangrijk Zijn
- Precisie maximaliseren: Tandwielkoppels koppelen aan servomotoren