Es un robot que recorre una pista de líneas rectas y curvas (camino) generalmente de color negro dibujadas sobre una superficie con fondo blanco.

Características
Dimensiones máximas
Largo: 120 mm
Ancho: 115 mm (con llantas)
Componentes principales
Arduino Nano
Driver de motor L298N
Sensor TCRT5000
Motorreductores de plástico
Materiales necesarios
1 Arduino Nano

1 Modulo Driver l298N

2 Sensores de línea TCRT5000

2 Motorreductores con llanta

2 Baterías de 4.2 (18650)

1 Porta pilas para 18650

Cables jumper macho-hembra

1 Interruptor pequeño

Diagrama de conexión

Código Arduino
//Pines de conexión del driver.
//Conexiones para el motor 1 (velocidad del motor).
int ENA = 9;
//Conexiones para el motor 1 (dirección del motor).
int IN1 = 8;
int IN2 = 7;
//Conexiones para el motor 2 (dirección del motor).
int IN3 = 5;
int IN4 = 4;
//Conexiones para el motor 2 (velocidad del motor).
int ENB = 3;
//Conexiones para los sensores infrarrojo.
int SNSR1 = 10;
int SNSR2 = 11;
//Variable de velocidad (entre 0 y 255 donde 255 es la velocidad máxima).
int SPEED = 155;
//Variables que guardaran el valor de sensores infrarrojo 1 y 2 (el valor será "1" si están sobre la línea negra y "0" si están sobre la pista blanca).
int SNSR1_V = 0;
int SNSR2_V = 0;
// Función de configuraciones en la placa, se ejecutará una sola vez.
void setup() {
// Definimos los Pines asignados al Motor 1 como salidas.
pinMode(INA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
// Definimos los Pines asignados al Motor 2 como salidas.
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(INB, OUTPUT);
// Definimos los Pines asignados a los sensores como entradas.
pinMode(SNSR1,INPUT);
pinMode(SNSR2,INPUT);
}
// Función principal, se ejecutará en bucle.
void loop() {
//Se realiza la lectura del los sensores y se guarda el valor en la variable correspondiente.
SNSR1_V = digitalRead(SNSR1);
SNSR2_V = digitalRead(SNSR2);
//Escenarios posibles de acuerdo a la combinación de valores de los sensores infrarrojo.
//Los sensores en el robot deberán estar ubicados de manera que queden a los lados de la línea negra.
//Si el sensor 1 y el sensor 2 esta sobre la base blanca su valor será "0";
//Si el valor de ambos sensores es "0" el seguidor esta en el centro de la línea negra entonces se mueve de frente.
if(SNSR1_V == 0 && SNSR2_V == 0){
//Velocidad del motor 1.
analogWrite(ENA, SPEED);
// Si IN1 está en HIGH y IN2 en LOW, el motor 1 gira en sentido horario Si IN1 está en LOW y IN2 en HIGH el motor 1 gira en sentido antihorario.
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
//Velocidad del motor 2.
analogWrite(ENB, SPEED);
// Si IN1 está en HIGH y IN2 en LOW, el motor 1 gira en sentido horario Si IN1 está en LOW y IN2 en HIGH el motor 1 gira en sentido antihorario.
// Si IN3 está en HIGH y IN4 en LOW, el motor 1 gira en sentido horario Si IN3 está en LOW y IN4 en HIGH el motor 1 gira en sentido antihorario.
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
//Ambos motores giran en sentido horario para logra el movimiento hacia adelante.
}
//Si el sensor 1 esta sobre la línea negra su valor será "1";
//Si el valor del sensor 1 es "1" el seguidor esta saliendo del centro de la línea negra hacia la izquierda entonces se mueve hacia la derecha.
else if(SNSR1_V == 1 && SNSR2_V == 0){
//Velocidad del motor 1.
analogWrite(ENA, 0);
// Si IN1 está en HIGH y IN2 en LOW, el motor 1 gira en sentido horario Si IN1 está en LOW y IN2 en HIGH el motor 1 gira en sentido antihorario.
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
//Velocidad del motor 2.
analogWrite(ENB, SPEED);
// Si IN3 está en HIGH y IN4 en LOW, el motor 1 gira en sentido horario Si IN3 está en LOW y IN4 en HIGH el motor 1 gira en sentido antihorario.
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
//El motor 1 se detiene y el motor 2 gira en sentido horario para lograr el giro hacia la izquierda.
}
//Si el sensor 2 esta sobre la línea negra su valor será "1";
//Si el valor del sensor 2 es "1" el seguidor esta saliendo del centro de la línea negra hacia la derecha entonces se mueve hacia la izquierda.
else if(SNSR1V == 0 && SNSR2V == 1){
//Velocidad del motor 1.
analogWrite(ENA, SPEED);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
//Velocidad del motor 2.
analogWrite(ENB, 0);
// Si IN3 está en HIGH y IN4 en LOW, el motor 1 gira en sentido horario Si IN3 está en LOW y IN4 en HIGH el motor 1 gira en sentido antihorario.
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
//El motor 1 gira en sentido horario y el motor 2 se detiene para lograr el giro hacia la derecha.
}
}
Nota: Este es un código básico para entender como funciona un robot seguidor de línea.


