Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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

  1. Simple Pi Robot – Bouw een 2-WD Autonome Rover met Raspberry Pi
  2. Bouw Een Autonome Lijnvolgende Robot Met Arduino UNO
  3. Bestuur Je Roomba Create 2 Met Arduino En Android: Stapsgewijze Handleiding
  4. Arduino & MPU6050: Precieze Servomotor Besturing met SG90 & MG996R
  5. Bouw een Autonome Thuisassistent Robot: Complete Onderdelenlijst & Opzetgids
  6. DIY Handgebaren-gestuurde Arduino Robotarm – Stap‑voor‑Stap Bouwhandleiding
  7. Arduino robotarm besturen via speciale Android-app
  8. Arduino Nano eetrobot bouwen: stap-voor-stap handleiding
  9. Slim Indoor Navigatie Robot Kit voor Arduino Projecten
  10. Servomotoren Uitgelegd: Hoe Ze Werken en Waarom Ze Belangrijk Zijn
  11. Precisie maximaliseren: Tandwielkoppels koppelen aan servomotoren