Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Componentes y suministros

Arduino UNO 1
Motor micro-servo SG90 1
Sensor ultrasónico SparkFun HC-SR04 1
Kit chasis robot 2WD con motores DC 1
Cables jumper (genéricos) 1
Arduino Motor Shield Rev3 1

Herramientas necesarias

Aplicaciones y servicios online

Sobre el proyecto

Soy estudiante de Diseño de Artes Multimedia en la Universidad Multimedia, Cyberjaya, Malasia. Este es mi tercer año estudiando Artes Multimedia; la asignatura de Diseño de Interacción enseña a los estudiantes cómo usar componentes de Arduino y cómo funcionan. Para mi trabajo final, elegí un robot evasor de obstáculos como proyecto personal para aprender el funcionamiento de cada componente.

Paso 1: Preparar y construir el chasis del robot

Dentro del paquete vienen varios componentes: chasis, dos motores, dos ruedas, una rueda delantera, un portapilas, algunos tornillos, un interruptor y cables jumper.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Paso 2: Probar componentes y soldar cables a los motores

Antes de soldar los cables jumper a ambos motores, recomiendo probar cada componente para asegurar su correcto funcionamiento: ambos motores DC, placa Arduino, Motor Shield, servo y sensor ultrasónico. Luego soldaremos los cables rojo y negro en ambos motores.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Paso 3: Preparar portapilas e interruptor

Cortamos a la mitad el cable negro del portapilas y soldamos un lado en un orificio y el otro cable negro en el otro orificio. ¡Nuestro interruptor está listo!

Paso 4: Apilar Arduino y Motor Shield

Apilamos la placa Motor Shield sobre la placa Arduino.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Paso 5: Conectar motores al Motor Shield

El Motor Shield proporciona energía a los motores y al servo; puede suministrar hasta 600 mA por motor. Soldamos/fijamos los cables de los motores DC al Motor Shield. Si los cables no alcanzan, usamos cables jumper externos (cortamos la punta para exponer el cobre) y los soldamos a los cables de los motores.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Conectamos el motor izquierdo al conector M1 y el derecho al M3 del Motor Shield.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Paso 6: Conectar batería e interruptor al Motor Shield

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Preparamos cables jumper macho y hembra para soldarlos a 5V, GND, Pin Analógico 4 y Pin Analógico 5. Usamos cables del mismo color para identificar fácilmente cada conexión: blanco para 5V, negro para GND, naranja para Pin Analógico 5, marrón para Pin Analógico 4.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Paso 7: Fijar placas al chasis

Usamos cinta de doble cara o pistola de silicona caliente para fijar ambas placas al chasis.

Paso 8: Conectar sensor ultrasónico

Conectamos los cables preparados: blanco (5V) a VCC, negro (GND) a GND, marrón (Pin Analógico 4) a Echo, naranja (Pin Analógico 5) a TRIG.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Paso 9: Conectar servo

Conectamos el servo al slot servo_2. Nota: existen varios tipos de servos; consulta online cómo conectar tu modelo específico.

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Último paso: Código

Necesitamos 3 librerías: AFMotor para el Motor Shield, NewPing para el sensor ultrasónico y el propio Arduino IDE. Los enlaces de descarga están en el proyecto original.

El código completo se muestra a continuación. Cópialo y pégalo en el Arduino IDE y súbelo a tu placa.

#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; 
  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);}

Esquemáticos

Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04

Proceso de manufactura

  1. Simple Pi Robot: Construye un Rover Autónomo 2‑WD con Raspberry Pi
  2. Robot Seguidor de Línea Autónomo con Arduino UNO: Guía Paso a Paso
  3. Controla tu Roomba Create 2 con Arduino y Android: Guía Completa
  4. Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
  5. Robot Asistente Doméstico Autónomo "O'nine" – Integración ROS, Alexa y Brazo Robótico
  6. Brazo Robótico Arduino Controlado por Gestos Manuales – Construcción Paso a Paso
  7. Controla tu brazo robótico Arduino con app Android dedicada
  8. Robot comedero con Arduino Nano: Guía paso a paso
  9. Kit de Robot de Navegación Interior Inteligente para Proyectos Arduino
  10. Motores servo: funcionamiento, tipos y por qué son importantes
  11. Maximizando la precisión: Acoplamiento de reductores con servomotores