Seguidor de Linea MultiCarBot

El modo “Seguidor de Línea” permite que el Multicarbot detecte y siga trayectorias negras (o blancas) impresas sobre el suelo gracias a dos sensores ópticos TCRT5000 colocados en los extremos delanteros del chasis. Con esta práctica, los estudiantes comprenderán cómo interactúan sensores de reflexión infrarroja, lógica de decisión y control de motores de corriente continua.

Componentes necesarios

ÍtemCantidadObservaciones
Sensor infrarrojo TCRT50002 udsMódulo con salida digital (LOW = línea detectada) electropeak.com
Arduino Uno1 udMicrocontrolador principal
Driver L298N1 udControl dual H-Bridge para motores TT projecthub.arduino.cchowtomechatronics.com
Motores TT 6 V con caja reductora2 uds~200 RPM a 6 V; torque 0,8 kg·cm adafruit.com
Ruedas + soporte omnidireccional1 juego
Pack baterías 9 V*1 udUna pila rectangular de 9 V rinde poco (<250 mAh); usa mejor un portapilas 6×AA Ni-MH o Li-ion 2S para mayor autonomía forum.arduino.ccforum.arduino.cc
Cables dupont y tornillería
  1. Esquema de conexiones

Esquema conexion

Pines sugeridos

ComponentePin ArduinoComentario
Sensor izquierdoA0digitalRead()
Sensor derechoA1digitalRead()
L298N ENAD5 (PWM)Velocidad motor A
L298N IN1D2Sentido motor A
L298N IN2D3Sentido motor A
L298N IN3D4Sentido motor B
L298N IN4D7Sentido motor B
L298N ENBD6 (PWM)Velocidad motor B

Conecta VCC de los sensores a +5 V del Arduino y GND común. La salida digital de cada TCRT5000 va a su pin analógico sólo a modo de entrada digital (puedes cambiar por otros pines digitales libres).

Código Arduino completo

/* Control Bluetooth Turbobot
   Desarrollado por RDC - Robotica de Colombia
   Visitanos:
   www.facebook.com/roboticadecolombia
   www.youtube.com/@RoboticadeColombia
   www.instagram.com/roboticadecolombia/
   Mercadolibre: www.mercadolibre.com.co/perfil/ROBOTICADECOLOMBIA
*/

#define ENA 5     // PWM Motor A
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 7
#define ENB 6     // PWM Motor B

#define SENSOR_LEFT  A0
#define SENSOR_RIGHT A1

const uint8_t BASE_SPEED = 150;   // 0-255
const uint8_t TURN_FACTOR = 75;   // reducción al girar

void setup() {
  pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT);
  pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
  pinMode(SENSOR_LEFT,  INPUT);
  pinMode(SENSOR_RIGHT, INPUT);
  Serial.begin(9600);
}

void loop() {
  bool left  = digitalRead(SENSOR_LEFT)  == LOW; // LOW = línea detectada
  bool right = digitalRead(SENSOR_RIGHT) == LOW;

  if (left && right) {          // Sobre la línea
    forward(BASE_SPEED);
  } else if (left && !right) {  // Línea a la izquierda
    turnLeft();
  } else if (!left && right) {  // Línea a la derecha
    turnRight();
  } else {                      // Línea perdida
    stopMotors();
  }
}

/*─── Funciones de movimiento ───*/
void forward(uint8_t speed) {
  analogWrite(ENA, speed);  analogWrite(ENB, speed);
  digitalWrite(IN1, HIGH);  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);  digitalWrite(IN4, LOW);
}

void turnLeft() {  // rueda derecha más rápida
  analogWrite(ENA, BASE_SPEED - TURN_FACTOR);
  analogWrite(ENB, BASE_SPEED);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}

void turnRight() { // rueda izquierda más rápida
  analogWrite(ENA, BASE_SPEED);
  analogWrite(ENB, BASE_SPEED - TURN_FACTOR);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}

void stopMotors() {
  analogWrite(ENA, 0); analogWrite(ENB, 0);
}

Ajustes opcionales

  • Invertir lógica si la pista es blanca sobre fondo oscuro: cambia la comparación == LOW por == HIGH.
  • Incrementa BASE_SPEED si el robot avanza muy lento; ajusta TURN_FACTOR para giros más cerrados.

El algoritmo se basa en lógica condicional sencilla inspirada en ejemplos de dos sensores y puede mejorarse con un control proporcional (PID).

4. Pruebas rápidas

  1. Coloca el Multicarbot sobre la línea y enciéndelo.
  2. Observa si avanza recto; si serpentea demasiado, aumenta TURN_FACTOR.
  3. Si se detiene, revisa que los sensores lean correctamente: con el monitor serie imprime los valores y confirma que cambian a LOW sobre la línea. projecthub.arduino.cc

Inserta aquí un video corto mostrando el robot siguiendo la línea (bloque Video).

5. Resolución de problemas comunes

SíntomaPosible causaSolución
Robot se detiene tras pocos segundosBatería 9 V agotada (alta caída de tensión)Usa pack de AA Ni-MH o batería Li-ion 7,4 V 18650
Gira en un solo sentidoSensor del lado contrario está demasiado altoAjusta altura a ~5 mm del suelo
Motores no respondenENA/ENB sin PWM o L298N sin puente ENA/ENB a 5 VVerifica puente y pines
Vibración excesivaRuedas o ejes desalineadosAsegura transmisiones de los motores TT

6. Marcadores multimedia

Para facilitar la edición en Gutenberg, sustituye los bloques siguientes por tus propios recursos:

  • <!-- BLOQUE IMAGEN: FotoMontajeSensores -->
  • <!-- BLOQUE VIDEO: DemoSeguimientoLinea -->
  • <!-- BLOQUE IMAGEN: EsquemaConexiones -->

Siguientes pasos

Con este tutorial tu Multicarbot ya sigue líneas usando un sistema minimalista de dos sensores. Como reto adicional, implementa un PID para giros más suaves y añade más sensores para mejorar la precisión en curvas cerradas. ¡Comparte tus resultados en la comunidad de Robótica de Colombia!