Robot seguidor de línea con Arduino: qué comprar y cómo armarlo
Privacidad y medición
Esta tienda usa medición anónima para entender cómo se navega su catálogo. GA4 y Clarity requieren tu permiso; Meta y TikTok solo se activan si aceptas publicidad.
Cargando contenido editorial
proyectos
Robot seguidor de línea con Arduino: qué comprar y cómo armarlo
Qué comprar y cómo armar un robot que siga una línea, con el código base y los ajustes que hacen que deje de girar en falso.
11 min de lectura
El video del robot que sigue la cinta negra dura quince segundos. En la mesa real, a veces el chasis da vueltas en el nudo, los motores van a fondo y el Nano se reinicia cuando la batería cae. No te frustres: un seguidor de línea se arma con cuatro piezas: sensores que ven contraste, un puente H con PWM, una mecánica estable y una fuente que aguante el arranque. Esta guía te deja la arquitectura, una lista de materiales realista y un código base para empezar en el taller; la competencia puede esperar al segundo o tercer ajuste.
Un robot siguiendo una línea negra en el piso gracias a sus sensores
Cómo funciona el seguidor: los sensores ven la línea y el robot corrige el giro
Pensa el robot como cuatro sistemas que se prueban por separado:
Bloque
Función
Falla típica si se ignora
Percepción
IR (o cámara) distingue línea vs fondo
Altura mala, umbral fijo, luz solar directa
Decisión
Mapa de lecturas → consignas de motor
if anidados sin estado, velocidad excesiva
Actuación
Puente H + PWM + motores
Jumpers ENA puestos, sin GND común
Energía / mecánica
Batería, regulación, chasis, centro de masa
Reset del micro, patinaje, sensores al aire
Idea clave: si el Serial muestra sensores correctos y el robot igual se pierde, el bug es de decisión, mecánica o velocidad — no “del ultrasónico que todavía no conectaste”.
El ultrasonido (AJ-SR04M u HC-SR04) es opcional: sirve para freno de obstáculo en demos, no para seguir la línea. No lo pongas en el camino crítico del día uno.
2. Lista de materiales realista (estudiante o club escolar)
Motores chicos / bajo voltaje: L9110 dual — menos caída, menos calor que un L298 clásico en muchos casos escolares.
Sensores de línea
Módulo de 2 o 3 canales TCRT5000 / QTR-style de kit o sensores sueltos en barra.
Altura de trabajo típica: unos pocos mm sobre el piso; cada módulo trae su rango — mide, no asumas.
Energía
Batería 7,4 V (2S LiPo con protección y cuidado) o pack 6×AA / 4×AA según motores.
LM2596 step-down si necesitas 5 V estables para el Nano y la lógica cuando el pack es de 12 V o varía mucho. mide la salida con multímetro antes de conectar el micro.
Interruptor general; nunca desconectes solo el positivo dejando masas raras.
Opcional
Ultrasonido frontal para “parar si hay pared”.
LED de estado / buzzer de calibración.
Disipador en L298 si corre largo rato.
No hace falta ESP32 para la pista. El WiFi no lee cinta negra. Reserva el ESP32 para telemetría de demos fuera de competencia.
3. Sensores IR: qué miden y cómo calibrar
Los sensores de reflectancia miran luz infrarroja rebotada. La cinta negra absorbe más; el fondo blanco refleja más. En la práctica:
La lectura depende de la altura, el ángulo, la suciedad y la luz ambiente (el sol de ventana mata calibraciones de lab).
Un módulo “digital” ya trae comparador y potenciómetro de umbral; uno “analógico” te da más control en software.
Rutina de calibración (30 minutos que evitan tres horas de pelea)
Levanta el robot o usa trozos de pista bajo cada sensor.
Anota los valores (o los estados 0 y 1) sobre blanco y sobre negro.
Ajusta el preset del módulo o el umbral en código a mitad de camino, con margen.
Mueve el robot a lo largo de una recta y mira el Serial: la transición debe ser limpia, no un aleteo a 50 Hz.
Si usas tres sensores (izq–centro–der), el centro sobre negro con laterales en blanco es el estado “centrado”. Dos sensores bastan para un demo lento; tres dan mejor recuperación en curvas.
4. L298N: saca los jumpers de ENA/ENB (PWM de verdad)
El L298N de módulo azul típico trae jumpers en ENA y ENB que dejan los enables siempre a 5 V. Con el jumper puesto:
El motor recibe ON/OFF pleno según IN1/IN2.
No controlas velocidad con PWM en ENA.
El robot entra a las curvas como tanque.
Conexión recomendada (un motor por canal)
Señal L298
Destino
OUT1 / OUT2
Motor izquierdo
OUT3 / OUT4
Motor derecho
IN1, IN2
Pines digitales Nano (dir. izq.)
IN3, IN4
Pines digitales Nano (dir. der.)
ENA
Pin PWM Nano (ej. D5) — sin jumper
ENB
Pin PWM Nano (ej. D6) — sin jumper
12V / motor supply
Batería de motores (+)
GND
GND batería y GND Nano (común)
5V del módulo
Según diseño: a veces sale 5 V regulado; no asumas corriente infinita para servos extra
Importante: muchos módulos alimentan la lógica desde el regulador interno 78xx cuando hay jumper 5V. Ese regulador se calienta y no es un laboratorio de potencia. Prefiere alimentar la lógica del Nano por USB en banco o por LM2596 bien medido en campo.
Caída de voltaje: el L298 “se come” un par de voltios. Un motor de 6 V en un pack de 7,4 V puede quedar justito; por eso a veces el L9110 o un driver MOSFET rinde mejor. No es que el Nano “no tenga fuerza”: es física del puente.
5. Código base (política simple, velocidad baja)
Este sketch asume tres sensores digitales activos en LOW sobre negro (invierte la lógica si tu módulo es al revés: se ve en la calibración). Ajusta los pines a tu cableado.
cpp
// Seguidor de línea — base didáctica// Sensores: 1 = ve negro (ajusta según tu módulo)// L298: ENA/ENB en PWM, jumpers quitadosconst int S_IZQ = 2;const int S_CEN = 3;const int S_DER = 4;const int IN1 = 7;const int IN2 = 8;const int ENA = 5; // PWMconst int IN3 = 9;const int IN4 = 10;const int ENB = 6; // PWMconst int VEL_BASE = 120; // 0-255; empieza BAJOconst int VEL_GIRO = 100;void setup() { pinMode(S_IZQ, INPUT); pinMode(S_CEN, INPUT); pinMode(S_DER, INPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); Serial.begin(9600); parar();}bool negro(int pin) { // cambia a !digitalRead si tu módulo es activo en blanco return digitalRead(pin) == HIGH;}void motorIzq(int vel) { // vel > 0 adelante, < 0 atrás, 0 freno suave if (vel > 0) { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, constrain(vel, 0, 255)); } else if (vel < 0) { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, constrain(-vel, 0, 255)); } else { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); analogWrite(ENA, 0); }}void motorDer(int vel) { if (vel > 0) { digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, constrain(vel, 0, 255)); } else if (vel < 0) { digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENB, constrain(-vel, 0, 255)); } else { digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); analogWrite(ENB, 0); }}void parar() { motorIzq(0); motorDer(0);}void loop() { bool izq = negro(S_IZQ); bool cen = negro(S_CEN); bool der = negro(S_DER); Serial.print(izq); Serial.print(cen); Serial.println(der); // Políticas mínimas — expande con estado "última vez vi la línea" if (cen && !izq && !der) { motorIzq(VEL_BASE); motorDer(VEL_BASE); } else if (izq && !der) { // línea a la izquierda → girar izquierda (derecha más rápido) motorIzq(VEL_GIRO / 2); motorDer(VEL_GIRO); } else if (der && !izq) { motorIzq(VEL_GIRO); motorDer(VEL_GIRO / 2); } else if (izq && cen && !der) { motorIzq(VEL_GIRO / 3); motorDer(VEL_GIRO); } else if (der && cen && !izq) { motorIzq(VEL_GIRO); motorDer(VEL_GIRO / 3); } else if (!izq && !cen && !der) { // perdió la línea: frenar o girar buscando (versión naive) parar(); delay(50); } else { // cruce o todo negro: avanzar lento motorIzq(VEL_BASE * 2 / 3); motorDer(VEL_BASE * 2 / 3); }}
Cómo usarlo de verdad
Comenta los motores y mira solo el Serial sobre la pista.
Activa motores en el aire (ruedas sin carga) y verifica sentido: si “adelante” es atrás, intercambia cables del motor o IN1/IN2.
Baja VEL_BASE hasta que una recta sea aburrida. Después sube de a 10.
Cuando pierda la línea, implementa memoria (ultimaDir = IZQUIERDA) en lugar de solo parar().
Un PID sobre el error de posición es el siguiente nivel; no es obligatorio para la primera cinta del salón. El PID con sensores mal calibrados es teatro.
6. Tips mecánicos que el código no puede tapar
Altura de sensores: demasiado altos → ven el mundo gris; demasiado bajos → rozan y se ensucian.
Ancho de la barra de sensores: muy estrecha en pistas de cinta ancha pierde el borde; muy ancha en curvas cerradas ve negro en dos lados a la vez.
Peso: batería centrada; si el pack va atrás y los sensores adelante, el chasis cabecea y pierde reflectancia.
Ruedas: goma limpia. El polvo y la arena arruinan la tracción.
Eje y holgura: un motor flojo en el soporte gira la rueda en el aire en la curva “difícil”.
Centro de giro: rueda loca bien ubicada; un skid con demasiado roce pide más PWM y calienta el driver.
7. Energía y resets misteriosos
Síntoma: el robot avanza, al doblar se “congela” y el LED de encendido del Nano parpadea.
Causas frecuentes:
Caída de tensión al pedir corriente de ambos motores.
GND del driver no unido al GND del Nano.
5 V tomado del regulador del L298 al límite.
Cable USB del portátil alimentando lógica mientras los motores tiran de la misma tierra con ruido — en demo de mesa pasa; en pista usa batería.
Checklist:
Multímetro en el 5 V del Nano en plena curva.
Condensador de desacople en la entrada del driver (electrolytic 100–470 µF cerca de los bornes de alimentación del puente, polaridad correcta).
PWM más bajo antes de comprar otra batería.
Si elevas desde una sola celda, no improvises: el boost tiene límites (MT3608). Para bajar desde 12 V, el LM2596 es el camino habitual de prototipo.
8. Ultrasonido opcional (freno, no guía)
Cuando la línea funciona, puedes sumar un sensor de distancia al frente:
Montaje rígido, mirando al horizonte del chasis.
En el loop, si dist < umbral, parar() y salir.
No mezcles el timeout del eco con la lectura IR sin cuidar tiempos: un pulseIn largo bloquea; usa timeout corto como en la guía de proyectos.
El AJ-SR04M IP66 tiene sentido si el robot va a pasillos sucios o demos al aire; en pista indoor de cinta, un HC-SR04 de lab alcanza.
La lógica de “si sensor izquierdo y no derecho entonces…” es la misma familia mental que las compuertas lógicas: el micro solo empaqueta muchas puertas en tiempo real.
10. Lista de depuración en orden (no saltes)
Batería cargada; interruptor ON; LED de placa vivo.
Serial de sensores sobre blanco/negro predecible.
Cada motor responde en el aire con comandos fijos.
PWM visible (rueda más lenta a 80 que a 180).
Recta de 1 m a velocidad baja.
Una curva suave.
Nudo o cruce (ahí casi todos reescriben la política).
Si fallas el paso 2, no hay sketch de internet que salve el paso 7.
Componentes de driver, Nano y regulación están en el catálogo de Tecnoelite para reponer o armar la lista; revisa la ficha de cada módulo (tensión de motor, si el L298 trae disipador, conector del Nano) antes de soldar de más.
Preguntas frecuentes
¿Cuántos sensores de línea necesito como mínimo?
Dos para un demo lento en cinta ancha; tres es el dulce spot escolar. Cinco ayudan en torneo. Empieza con lo que el chasis pueda montar rígido y a la misma altura.
¿Puedo usar el ESP32 en lugar del Nano?
Sí técnicamente. Vas a cuidar 3,3 V en sensores y tal vez level shift. Para la mayoría de clubes, el Nano reduce variables. Si ya dominas el ESP32 (tutorial primer proyecto), puedes usarlo; no te da ventaja mágica en la pista.
¿Por qué el L298 se calienta tanto?
Es un driver bipolar con caída interna alta. Motores exigentes + uso prolongado = calor. Verifica que no haya cortocircuito en OUT, que el robot no esté forcejeando contra un obstáculo a PWM 255, y valora L9110 o drivers MOSFET si el calor limita la práctica.
¿Qué velocidad PWM inicial recomiendan?
Entre 90 y 140 en muchos gearmotors TT con L298 y pack de ~7 V, pero tu mecánica manda. Si en recta ya patina o se pierde, baja antes de tocar el código de giros.
¿El robot debe usar delay en el loop?
delay largos ciegan los sensores. El ejemplo usa un delay mínimo solo en el caso “perdí la línea”. En versiones serias, trabaja con millis() y tiempos de giro no bloqueantes.
¿Sirve esta lista de piezas para sumo o solo para línea?
La base de Nano + L298 + dos motores sirve de plataforma; sumo pide estrategia, sensores de frente (ultrasónico/IR de distancia) y a veces más torque. No copies la política de línea a un dohyo: la función de costo es otra. Para movimiento y presencia en otros proyectos, el debate RCWL vs PIR aplica a alarmas, no a la cinta negra.