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. | Pieza | Para qué |
|---|---|---|
| 1 | Arduino Uno (o compatible) con su cable USB | El cerebro: corre el código. |
| 1 | Driver TB6612FNG (o L298N) | Da la potencia a los motores. |
| 2 | Motorreductores TT con rueda | Mueven el robot; uno por lado. |
| 1 | Rueda loca | Sostiene la parte de atrás. |
| 1 | Chasis de acrílico | La base donde va todo. |
| 1 | Sensor HC-SR04 | Mide la distancia a lo que hay enfrente. |
| 1 | Portapilas de 4 AA (6 V) con interruptor | Alimenta solo a los motores. |
| 1 | Power bank USB | Alimenta al Arduino, aparte de los motores. |
| 1 | Mini protoboard y cables dupont | Para conectar sin soldar. |
Las conexiones
| Desde | Hacia | Por qué |
|---|---|---|
| HC-SR04 VCC / GND | Arduino 5V / GND | Alimenta al sensor. |
| HC-SR04 Trig | Arduino pin 7 | El Arduino le pide medir. |
| HC-SR04 Echo | Arduino pin 8 | El sensor devuelve el tiempo del eco. |
| TB6612FNG VCC | Arduino 5V | La lógica del driver. |
| TB6612FNG VM | + del portapilas | La potencia de los motores. |
| TB6612FNG GND | GND del Arduino y − del portapilas | Tierra común: sin ella, las señales no se entienden. |
| AIN1, AIN2, PWMA | Pines 2, 4 y 5 | Sentido y velocidad del motor izquierdo. |
| BIN1, BIN2, PWMB | Pines 10, 11 y 6 | Sentido y velocidad del motor derecho. |
| STBY | Pin 12 | En HIGH, el driver trabaja. |
| AO1 / AO2 y BO1 / BO2 | Motor izquierdo y derecho | La salida de potencia a cada motor. |
El código
// 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.