Proyecto 8

Seguidor de Linea

Robot que sigue una linea negra sobre fondo blanco. El clasico proyecto de robotica, ahora en tu mesa.

🛤️
Robot que Sigue el Camino

Dibuja circuitos con cinta negra y mira como el robot los recorre automaticamente.

1

Como Funcionan los Sensores IR

Los sensores TCRT5000 emiten luz infrarroja y miden cuanta luz rebota. Las superficies blancas reflejan mucha luz, las negras absorben casi toda.

Sobre Blanco

~800

Mucha luz reflejada = lectura ALTA

Sobre Negro

~200

Poca luz reflejada = lectura BAJA

💡
Altura optima: Los sensores deben estar a 5-10mm del suelo. Muy alto = no detecta bien. Muy bajo = puede rozar.
2

Logica de Decision

Con 2 sensores (izquierdo y derecho) el robot "ve" donde esta la linea y decide como moverse:

IZQ
DER
AVANZAR
⬆️

Linea en el centro

IZQ
DER
GIRAR IZQUIERDA
↩️

Linea a la izquierda

IZQ
DER
GIRAR DERECHA
↪️

Linea a la derecha

IZQ
DER
AVANZAR LENTO
🛑

Cruce o linea gruesa

3

Sensor TCRT5000

TCRT5000 Module LED DET AJUSTE VCC GND D0 A0 5V GND Digital Analog Modulo sensor IR reflectivo
Pin Conectar a Descripcion
VCC 5V de Arduino Alimentacion del modulo
GND GND de Arduino Tierra comun
A0 A0 o A1 Salida analogica (0-1023) - usamos esta
D0 Pin digital Salida digital (0 o 1) - opcional
4

Diagrama del Circuito

Circuito Seguidor de Linea ARDUINO UNO ANALOG A0 A1 DIGITAL 5 6 5V GND SENSOR IZQ TCRT5000 SENSOR DER TCRT5000 L298N DRIVER (igual que P5) MOTOR IZQ MOTOR DER A0 A1 PWM 5,6 Conexiones: Sensor → A0, A1 Motor PWM 5V GND Los pines de motores (IN1-IN4, ENA, ENB) son los mismos que en P5
5

Calibracion

🎯 Como Calibrar los Sensores

Cada sensor y superficie es diferente. Necesitas encontrar el umbral que separa "blanco" de "negro" para tu setup especifico.

1
Sube el codigo con la funcion calibrar() activa
2
Abre el Monitor Serial (9600 baud)
3
Pon los sensores sobre BLANCO y anota los valores (ej: 780, 820)
4
Pon los sensores sobre NEGRO y anota los valores (ej: 180, 210)
5
Calcula el umbral y actualizalo en el codigo
UMBRAL = (blanco + negro) / 2
Ejemplo: (800 + 200) / 2 = 500
6

Construye tu Circuito

Usa cartulina blanca como base y cinta aislante negra (2-3 cm de ancho) para la linea. Empieza simple y aumenta la dificultad.

Nivel 1: Ovalo

Curvas suaves, sin intersecciones. Perfecto para empezar.

Nivel 2: Ocho

Curvas en ambas direcciones. Un cruce en el centro.

Nivel 3: Complejo

Curvas cerradas, angulos, bifurcaciones.

💡
Consejo: Evita curvas de 90° cerradas al principio. El robot necesita velocidad baja para tomarlas bien.
7

El Codigo

p8_seguidor_linea.ino
// Pines Sensores
const int SENSOR_IZQ = A0;
const int SENSOR_DER = A1;

// Pines Motores (igual que P5)
const int ENA = 5;
const int IN1 = 4;
const int IN2 = 7;
const int ENB = 6;
const int IN3 = 8;
const int IN4 = 12;

// Configuracion
const int UMBRAL = 500;      // Ajustar segun calibracion
const int VEL_BASE = 120;    // Velocidad normal
const int VEL_GIRO = 80;     // Velocidad en giros

void setup() {
  Serial.begin(9600);
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  parar();
  delay(3000);  // Esperar 3 segundos antes de arrancar
}

void loop() {
  // Leer sensores
  int lecturaIzq = analogRead(SENSOR_IZQ);
  int lecturaDer = analogRead(SENSOR_DER);

  // Detectar linea (negro = lectura baja)
  bool lineaIzq = lecturaIzq < UMBRAL;
  bool lineaDer = lecturaDer < UMBRAL;

  // Decidir movimiento
  if (!lineaIzq && !lineaDer) {
    // Ambos ven blanco: linea en el centro
    avanzar(VEL_BASE);
  }
  else if (lineaIzq && !lineaDer) {
    // Izquierdo ve negro: girar izquierda
    girarIzquierda();
  }
  else if (!lineaIzq && lineaDer) {
    // Derecho ve negro: girar derecha
    girarDerecha();
  }
  else {
    // Ambos ven negro: cruce, avanzar lento
    avanzar(VEL_GIRO);
  }

  delay(10);
}

void avanzar(int velocidad) {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, velocidad);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENB, velocidad);
}

void girarIzquierda() {
  analogWrite(ENA, 0);           // Parar izquierdo
  analogWrite(ENB, VEL_GIRO);    // Derecho sigue
}

void girarDerecha() {
  analogWrite(ENA, VEL_GIRO);    // Izquierdo sigue
  analogWrite(ENB, 0);           // Parar derecho
}

void parar() {
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
}
analogRead(SENSOR)
Lee el valor del sensor (0-1023). Bajo = negro, alto = blanco.
lectura < UMBRAL
Si la lectura es menor que el umbral, el sensor esta sobre negro.
girarIzquierda()
Para el motor izquierdo, solo gira el derecho. El robot pivotea.
VEL_BASE vs VEL_GIRO
Velocidad normal para rectas, velocidad reducida para curvas.
8

Demo Interactivo

Mira al Robot Seguir la Linea

Observa como los sensores detectan la linea y ajustan el movimiento

Sensor Izquierdo
BLANCO
Accion
AVANZAR
Sensor Derecho
BLANCO
9

Problemas Comunes

Problema Causa Probable Solucion
No detecta la linea Sensores muy altos Bajar sensores a 5-10mm del suelo
Pierde la linea en curvas Velocidad muy alta Reducir VEL_BASE y VEL_GIRO
Oscila mucho (zigzag) Umbral mal calibrado Recalibrar con Monitor Serial
Solo gira a un lado Sensor danado o desconectado Verificar conexiones y probar cada sensor
Motores no responden Pines mal configurados Revisar que coincidan con P5
10

Simulador

Wokwi Simulator
11

Pasos de Construccion

1

Prepara el chasis P5

Usa el robot del proyecto 5. Los motores y driver ya estan listos.

2

Monta los sensores IR

Fija los 2 sensores en la parte delantera, separados ~3cm, mirando al suelo.

3

Ajusta la altura

Los sensores deben estar a 5-10mm del suelo. Usa tornillos o LEGO para ajustar.

4

Conecta los sensores

VCC a 5V, GND a GND, A0 del sensor izq a A0, A0 del sensor der a A1.

5

Construye un circuito simple

Cartulina blanca + cinta negra en forma de ovalo. Minimo 50x70cm.

6

Calibra los sensores

Usa el modo calibracion para encontrar tu UMBRAL optimo.

7

Sube el codigo

Actualiza UMBRAL con tu valor y sube el codigo al Arduino.

8

Prueba y ajusta velocidad

Si pierde la linea, reduce VEL_BASE. Si es muy lento, aumentala gradualmente.

12

Experimentos

📍

3er Sensor Central

Anade un sensor en el centro para detectar mejor cuando esta centrado

🎛️

Control PID

Implementa control proporcional para movimientos mas suaves sin zigzag

🔀

Intersecciones

Detecta cruces y programa que el robot tome decisiones (izq/der/recto)

⏱️

Carrera Cronometrada

Compite: ¿Cuanto tarda en completar el circuito? Optimiza velocidad.

🌈

Lineas de Colores

Prueba con cintas de otros colores. ¿Cuales detecta mejor?

🏁

Detectar Final

Anade una marca especial (linea perpendicular) para detectar meta