Proyecto 14: Tanque Seguidor de Línea

(1)Descripción:

El proyecto anterior ha presentado cómo confinar el carro inteligente para que se mueva en un espacio determinado. En este proyecto, podemos usar los conocimientos aprendidos anteriormente para convertirlo en un carro inteligente seguidor de línea. En el experimento, usamos el sensor de seguimiento de línea para detectar si hay una línea negra alrededor del carro inteligente, y luego controlar la rotación de los dos motores según los resultados de la detección, para que el carro inteligente se mueva a lo largo de la línea negra.

La lógica específica del carro inteligente seguidor de línea se muestra en la tabla a continuación:

Sensor

Detección

Sensor de seguimiento de línea central

Línea negra detectada: en nivel alto
Línea blanca detectada: en nivel bajo

Sensor de seguimiento de línea izquierdo

Línea negra detectada: en nivel alto
Línea blanca detectada: en nivel bajo

Sensor de seguimiento de línea derecho

Línea negra detectada: en nivel alto
Línea blanca detectada: en nivel bajo

Condición 1

Condición 2

Movimiento

El sensor de seguimiento de línea central
detecta la línea negra

El sensor de seguimiento de línea izquierdo detecta la línea negra
y
el derecho detecta línea blanca

Girar a la izquierda
establecer PWM a 200

El sensor de seguimiento de línea central
detecta la línea negra

El sensor de seguimiento de línea izquierdo detecta línea blanca
y
el derecho detecta la línea negra

Girar a la derecha
establecer PWM a 200

El sensor de seguimiento de línea central
detecta la línea negra

Ambos sensores izquierdo y derecho detectan línea blanca
o
Ambos detectan la línea negra

Avanzar

El sensor de seguimiento de línea central
detecta línea blanca

El sensor de seguimiento de línea izquierdo detecta la línea negra
y
el derecho detecta línea blanca

Girar a la izquierda
establecer PWM a 200

El sensor de seguimiento de línea central
detecta línea blanca

El sensor de seguimiento de línea izquierdo detecta línea blanca
y
el derecho detecta la línea negra

Girar a la derecha
establecer PWM a 200

El sensor de seguimiento de línea central
detecta línea blanca

Ambos sensores izquierdo y derecho detectan línea blanca
o
Ambos sensores izquierdo y derecho detectan la línea negra

Detener

(2)Diagrama de flujo:

(3)Diagrama de cableado:

(4)Código de prueba:

(Nota: No conecte el módulo Bluetooth antes de cargar el código, porque la carga del código también usa comunicación serial, y puede haber conflictos con la comunicación serial Bluetooth, lo que puede causar que la carga falle.)

/*
  Keyestudio Mini Tank Robot V3 (Popular Edition)
  lesson 14
  Line track tank
  http://www.keyestudio.com
*/

//El cableado del sensor de seguimiento de línea
#define L_pin  11  //izquierdo
#define M_pin  7  //central
#define R_pin  8  //derecho
#define ML_Ctrl 4  //Definir el pin de control de dirección del motor izquierdo
#define ML_PWM 6   //Definir el pin de control PWM del motor izquierdo
#define MR_Ctrl 2  //Definir el pin de control de dirección del motor derecho
#define MR_PWM 5   //Definir el pin de control PWM del motor derecho
int L_val, M_val, R_val;

void setup()
{
  Serial.begin(9600); //Establecer la velocidad de baudios a 9600
  pinMode(L_pin, INPUT); //Establecer todos los pines del sensor de seguimiento de línea como modo de entrada
  pinMode(M_pin, INPUT);
  pinMode(R_pin, INPUT);
  pinMode(ML_Ctrl, OUTPUT);
  pinMode(ML_PWM, OUTPUT);
  pinMode(MR_Ctrl, OUTPUT);
  pinMode(MR_PWM, OUTPUT);
}

void loop () 
{
  L_val = digitalRead(L_pin); //Leer el valor del sensor izquierdo
  M_val = digitalRead(M_pin); //Leer el valor del sensor central
  R_val = digitalRead(R_pin); //Leer el valor del sensor derecho
  if (M_val == 1) { //el central detecta líneas negras
    if (L_val == 1 && R_val == 0)  //Si se detecta una línea negra a la izquierda, pero no a la derecha, girar a la izquierda
    {
      Car_left();
    }
    else if (L_val == 0 && R_val == 1)  //Si se detecta una línea negra a la derecha, no a la izquierda, girar a la derecha
    {
      Car_right();
    }
    else  //de lo contrario, avanzar
    {
      Car_front();
    }
  }
  else  //El central no detecta líneas negras
  {
    if (L_val == 1 && R_val == 0)  //Si se detecta una línea negra a la izquierda, pero no a la derecha, girar a la izquierda
    {
      Car_left();
    }
    else if (L_val == 0 && R_val == 1)  //Si se detecta una línea negra a la derecha, no a la izquierda, girar a la derecha
    {
      Car_right();
    }
    else  //de lo contrario, detenerse
    {
      Car_Stop();
    }
  }
}

//avanzar
void Car_front()
{
  digitalWrite(MR_Ctrl, HIGH);
  analogWrite(MR_PWM, 100);
  digitalWrite(ML_Ctrl, HIGH);
  analogWrite(ML_PWM, 100);
}

//retroceder
void Car_back()
{
  digitalWrite(MR_Ctrl, LOW);
  analogWrite(MR_PWM, 150);
  digitalWrite(ML_Ctrl, LOW);
  analogWrite(ML_PWM, 150);
}

//girar a la izquierda
void Car_left()
{
  digitalWrite(MR_Ctrl, HIGH);
  analogWrite(MR_PWM, 100);
  digitalWrite(ML_Ctrl, LOW);
  analogWrite(ML_PWM, 150);
}

//girar a la derecha
void Car_right()
{
  digitalWrite(MR_Ctrl, LOW);
  analogWrite(MR_PWM, 150);
  digitalWrite(ML_Ctrl, HIGH);
  analogWrite(ML_PWM, 100);
}

//detenerse
void Car_Stop()
{
  digitalWrite(MR_Ctrl, LOW);
  analogWrite(MR_PWM, 0);
  digitalWrite(ML_Ctrl, LOW);
  analogWrite(ML_PWM, 0);
}

(5)Resultado de la prueba:

Después de cargar el código de prueba correctamente y encenderlo, el carro inteligente se mueve a lo largo de la línea negra.