12 de julio de 2026 · 11 min
Robot evita-obstáculos con Arduino: la guía completa del clásico
El primer robot de todo el mundo: dos motores, un HC-SR04, un L298N y un Arduino. Lista de compra completa, conexionado sin misterios, código listo para cargar y los errores que hacen que 'no ande'.
Si el LED parpadeante es el “hola mundo” de Arduino, el robot que esquiva obstáculos es la tesis de graduación del principiante. Junta todo: sensores, motores, driver, alimentación y lógica. Y es el proyecto que más consultas nos genera en el mostrador — casi siempre por los mismos tres errores, que te adelantamos abajo para que no pierdas el fin de semana.
Qué vas a armar
Un vehículo de dos ruedas motrices que avanza solo; cuando el sensor ultrasónico detecta un obstáculo a menos de 20 cm, frena, retrocede, “mira” a izquierda y derecha girando el sensor con un servo, y arranca para el lado más despejado.
Lista de compra
| Componente | Cantidad | Nota |
|---|---|---|
| Arduino UNO o Nano | 1 | El UNO es más cómodo para empezar |
| Chasis 2WD con motores TT y ruedas | 1 | Trae motores, ruedas y rueda loca |
| Driver L298N | 1 | Maneja los dos motores |
| HC-SR04 | 1 | Los “ojos” |
| Servo SG90 | 1 | Para que el sensor mire a los lados |
| Portapilas 18650 ×2 + pilas | 1 | ~7.4 V para motores y placa |
| Cables dupont | 1 juego | M-M y M-H |
| Interruptor | 1 | Para no desenchufar pilas cada vez |
Conexionado
Alimentación (leé esto dos veces):
- Pilas (+) → interruptor → borne 12V del L298N
- Pilas (−) → borne GND del L298N
- Borne 5V del L298N → pin VIN del Arduino (el L298N con el jumper puesto genera 5 V propios)
- GND del L298N ↔ GND del Arduino: esta unión es LA conexión que todos olvidan. Sin masa común, nada funciona de forma predecible.
Motores:
- Motor izquierdo → OUT1/OUT2 · Motor derecho → OUT3/OUT4
Control del L298N → Arduino:
- ENA → pin 5 (PWM) · IN1 → pin 7 · IN2 → pin 8
- IN3 → pin 11 · IN4 → pin 12 · ENB → pin 6 (PWM)
- (Sacá los jumpers de ENA/ENB para poder controlar velocidad)
HC-SR04: Trig → pin 9, Echo → pin 10, VCC → 5V, GND → GND. Servo: señal → pin 3, VCC → 5V, GND → GND. El HC-SR04 va montado sobre el servo, al frente del chasis.
El código
#include <Servo.h>
// Motores
const int ENA = 5, IN1 = 7, IN2 = 8; // izquierdo
const int ENB = 6, IN3 = 11, IN4 = 12; // derecho
// Sensor
const int TRIG = 9, ECHO = 10;
const int VEL = 180; // 0-255
const int DIST_FRENO = 20; // cm
Servo cuello;
void setup() {
pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
cuello.attach(3);
cuello.write(90); // mirar al frente
delay(500);
}
int distancia() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long d = pulseIn(ECHO, HIGH, 30000);
int cm = d * 0.034 / 2;
return (cm == 0) ? 400 : cm; // sin eco = camino libre
}
void motores(int izq, int der) { // -255 a 255
digitalWrite(IN1, izq >= 0); digitalWrite(IN2, izq < 0);
digitalWrite(IN3, der >= 0); digitalWrite(IN4, der < 0);
analogWrite(ENA, abs(izq));
analogWrite(ENB, abs(der));
}
void loop() {
if (distancia() > DIST_FRENO) {
motores(VEL, VEL); // avanzar
return;
}
motores(0, 0); // frenar
delay(200);
motores(-VEL, -VEL); // retroceder
delay(350);
motores(0, 0);
cuello.write(160); delay(400); // mirar izquierda
int izq = distancia();
cuello.write(20); delay(400); // mirar derecha
int der = distancia();
cuello.write(90); delay(300); // centrar
if (izq > der) motores(-VEL, VEL); // girar a izquierda
else motores(VEL, -VEL); // girar a derecha
delay(400);
motores(0, 0);
}
Cargalo, apoyá el robot en el piso, prendé el interruptor y listo. Ajustá VEL si es muy violento y el delay(400) del giro según cuánto rote tu chasis.
Los 3 errores que traen el robot “muerto” al mostrador
- Alimentarlo con la pila cuadrada de 9 V. Es el error #1 histórico. Esa pila no entrega la corriente que piden dos motores TT: el robot avanza medio metro y se resetea. Van 2× 18650 o 6 pilas AA. Punto.
- Sin masa común. Si el Arduino se alimenta por USB para probar y los motores con pilas, GND del L298N y GND del Arduino tienen que estar unidos igual. Síntoma: motores que hacen “lo que quieren”.
- Un motor gira al revés. No es un problema de código: invertí los dos cables de ESE motor en el borne del L298N y listo.
¿El L298N te calienta o querés entender mejor cómo funciona el puente H? Tenemos una guía completa de drivers de motores.
Para llevarlo más lejos
- Sumale un módulo Bluetooth HC-05 y controlalo desde el celular cuando te aburras del modo autónomo.
- Reemplazá la lógica de esquive por seguimiento: con dos sensores IR abajo tenés un seguidor de línea.
- Versión sin servo (más simple para chicos): sensor fijo al frente, y ante obstáculo siempre gira a la derecha. Menos elegante, funciona igual.
Kit completo con envío
Chasis, motores, L298N, HC-SR04, servo, portapilas y cables: todo en electronicabyp.com.ar con envío a toda Argentina. Armamos este kit seguido para escuelas técnicas y talleres de robótica — si necesitás varios, pedí precio por cantidad por WhatsApp.
¿Necesitás los componentes de esta guía? Los encontrás en electronicabyp.com.ar — hacemos envíos a toda Argentina. Para cotizaciones por cantidad, escribinos por WhatsApp.