Saltar al contenido
RobotVisual

Proyecto final: un robot que esquiva obstáculos

Aquí se junta todo lo de la ruta: un sensor que mide, un microcontrolador que decide, un driver que da la potencia y dos motores. Ármalo en 3D, pruébalo en la pista y después hazlo de verdad.

Cargando la escena 3D

Lo que necesitas

Sin precios: cambian por tienda y por país. Muchos kits de "robot de 2 ruedas" ya traen el chasis, los motores, las ruedas y el portapilas.

Cant.PiezaPara qué
1Arduino Uno (o compatible) con su cable USBEl cerebro: corre el código.
1Driver TB6612FNG (o L298N)Da la potencia a los motores.
2Motorreductores TT con ruedaMueven el robot; uno por lado.
1Rueda locaSostiene la parte de atrás.
1Chasis de acrílicoLa base donde va todo.
1Sensor HC-SR04Mide la distancia a lo que hay enfrente.
1Portapilas de 4 AA (6 V) con interruptorAlimenta solo a los motores.
1Power bank USBAlimenta al Arduino, aparte de los motores.
1Mini protoboard y cables dupontPara conectar sin soldar.

Las conexiones

DesdeHaciaPor qué
HC-SR04 VCC / GNDArduino 5V / GNDAlimenta al sensor.
HC-SR04 TrigArduino pin 7El Arduino le pide medir.
HC-SR04 EchoArduino pin 8El sensor devuelve el tiempo del eco.
TB6612FNG VCCArduino 5VLa lógica del driver.
TB6612FNG VM+ del portapilasLa potencia de los motores.
TB6612FNG GNDGND del Arduino y − del portapilasTierra común: sin ella, las señales no se entienden.
AIN1, AIN2, PWMAPines 2, 4 y 5Sentido y velocidad del motor izquierdo.
BIN1, BIN2, PWMBPines 10, 11 y 6Sentido y velocidad del motor derecho.
STBYPin 12En HIGH, el driver trabaja.
AO1 / AO2 y BO1 / BO2Motor izquierdo y derechoLa salida de potencia a cada motor.

El código

Sketch para el robot (Arduino IDE)
// Robot que esquiva obstáculos: Arduino Uno + TB6612FNG + HC-SR04
const int TRIG = 7, ECHO = 8;
const int AIN1 = 2, AIN2 = 4, PWMA = 5;    // motor izquierdo
const int BIN1 = 10, BIN2 = 11, PWMB = 6;  // motor derecho
const int STBY = 12;                       // standby del driver

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  int pines[] = {AIN1, AIN2, PWMA, BIN1, BIN2, PWMB, STBY};
  for (int p : pines) pinMode(p, OUTPUT);
  digitalWrite(STBY, HIGH);  // saca al driver del modo de espera
  Serial.begin(9600);
}

long distanciaCm() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);  // pulso de 10 µs: "mide"
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long us = pulseIn(ECHO, HIGH, 30000);  // espera el eco hasta 30 ms
  if (us == 0) return 400;               // sin eco: camino libre
  return us / 58;                        // µs / 58 = cm
}

// vel de -255 (atrás) a 255 (adelante)
void motor(int in1, int in2, int pwm, int vel) {
  digitalWrite(in1, vel > 0);
  digitalWrite(in2, vel < 0);
  analogWrite(pwm, abs(vel));
}

void mover(int izq, int der) {
  motor(AIN1, AIN2, PWMA, izq);
  motor(BIN1, BIN2, PWMB, der);
}

void loop() {
  long d = distanciaCm();
  Serial.println(d);
  if (d < 20) {
    mover(-150, -150);  // retrocede
    delay(300);
    mover(150, -150);   // gira en su lugar
    delay(350);
  } else {
    mover(180, 180);    // adelante
  }
  delay(50);
}
  • distanciaCm() hace lo mismo que el laboratorio del HC-SR04: pulso de 10 µs, espera el eco y divide entre 58.
  • motor() usa el puente H del driver: un pin para cada sentido y PWM para la velocidad.
  • Si un motor gira al revés, no cambies el código: invierte sus dos cables en el driver.

Si algo falla

El Arduino se reinicia cuando arrancan los motores
Los motores y el Arduino comparten pilas. Alimenta al Arduino por USB y a los motores con el portapilas.
Los motores no se mueven
Revisa que STBY esté en HIGH, que el interruptor del portapilas esté prendido y que las tierras estén unidas.
El sensor siempre marca 0 o 400
Trig y Echo pueden estar cruzados, o el sensor apunta a algo blando o inclinado.
El robot gira en círculos
Un motor es más rápido que el otro. Baja un poco la velocidad del más rápido en mover().
Va hacia atrás cuando debería ir adelante
Invierte los dos cables de ese motor en el driver.

Antes de conectar las pilas, revisa la sección de seguridad. Ver seguridad y fallas comunes.