Seguidor de línea con Arduino Nano

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.

Actualizaciones del boletín

Introduce tu dirección de correo electrónico para suscribirte a nuestro boletín

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *