Project 14: Lijnvolgend Pantservoertuig

(1)Beschrijving:

Het vorige project heeft uitgelegd hoe je de slimme auto kunt beperken om in een bepaalde ruimte te bewegen. In dit project kunnen we de eerder geleerde kennis gebruiken om er een lijnvolgend slim voertuig van te maken. In het experiment gebruiken we de lijnvolgsensor om te detecteren of er een zwarte lijn in de buurt van het slimme voertuig is, en vervolgens de rotatie van de twee motoren te regelen op basis van de detectieresultaten, zodat het slimme voertuig langs de zwarte lijn kan bewegen.

De specifieke logica van het lijnvolgende slimme voertuig wordt weergegeven in de onderstaande tabel:

Sensor

Detectie

Lijnvolgsensor in het midden

Zwarte lijn gedetecteerd: hoog niveau
Witte lijn gedetecteerd: laag niveau

Lijnvolgsensor aan de linkerkant

Zwarte lijn gedetecteerd: hoog niveau
Witte lijn gedetecteerd: laag niveau

Lijnvolgsensor aan de rechterkant

Zwarte lijn gedetecteerd: hoog niveau
Witte lijn gedetecteerd: laag niveau

Conditie 1

Conditie 2

Beweging

Lijnvolgsensor in het midden
detecteert de zwarte lijn

Lijnvolgsensor aan de linkerkant detecteert de zwarte lijn
en
die aan de rechterkant detecteert witte lijn

Draai links
stel PWM in op 200

Lijnvolgsensor in het midden
detecteert de zwarte lijn

Lijnvolgsensor aan de linkerkant detecteert witte lijn
en
die aan de rechterkant detecteert de zwarte lijn

Draai rechts
stel PWM in op 200

Lijnvolgsensor in het midden
detecteert de zwarte lijn

Zowel de linker- als de rechter lijnvolgsensor detecteren witte lijn
of
Zowel de linker- als de rechter detecteren de zwarte lijn

Rij vooruit

Lijnvolgsensor in het midden
detecteert witte lijn

Lijnvolgsensor aan de linkerkant detecteert de zwarte lijn
en
die aan de rechterkant detecteert witte lijn

Draai links
stel PWM in op 200

Lijnvolgsensor in het midden
detecteert witte lijn

Lijnvolgsensor aan de linkerkant detecteert witte lijn
en
die aan de rechterkant detecteert de zwarte lijn

Draai rechts
stel PWM in op 200

Lijnvolgsensor in het midden
detecteert witte lijn

Zowel de linker- als de rechter lijnvolgsensor detecteren witte lijn
of
Zowel de linker- als de rechter lijnvolgsensoren detecteren de zwarte lijn

Stop

(2)Stroomdiagram:

(3)Bedradingsschema:

(4)Testcode:

(Opmerking: Sluit de Bluetooth-module niet aan voordat je de code uploadt, omdat het uploaden van de code ook gebruik maakt van seriële communicatie, en er kunnen conflicten optreden met de Bluetooth seriële communicatie, waardoor het uploaden kan mislukken.)

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

//De bedrading van de lijnvolgsensor
#define L_pin  11  //links
#define M_pin  7  //midden
#define R_pin  8  //rechts
#define ML_Ctrl 4  //Definieer de richtingsbesturingspin van de linkermotor
#define ML_PWM 6   //Definieer de PWM-besturingspin van de linkermotor
#define MR_Ctrl 2  //Definieer de richtingsbesturingspin van de rechtermotor
#define MR_PWM 5   //Definieer de PWM-besturingspin van de rechtermotor
int L_val, M_val, R_val;

void setup()
{
  Serial.begin(9600); //Stel de baudrate in op 9600
  pinMode(L_pin, INPUT); //Stel alle pinnen van de lijnvolgsensor in als invoermodus
  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); //Lees de waarde van de linkersensor
  M_val = digitalRead(M_pin); //Lees de waarde van de middelste sensor
  R_val = digitalRead(R_pin); //Lees de waarde van de rechtersensor
  if (M_val == 1) { //de middelste detecteert zwarte lijnen
    if (L_val == 1 && R_val == 0)  //Als er een zwarte lijn aan de linkerkant wordt gedetecteerd, maar niet aan de rechterkant, draai links
    {
      Car_left();
    }
    else if (L_val == 0 && R_val == 1)  //Als er een zwarte lijn aan de rechterkant wordt gedetecteerd, maar niet aan de linkerkant, draai rechts
    {
      Car_right();
    }
    else  //anders, rij vooruit
    {
      Car_front();
    }
  }
  else  //De middelste detecteert geen zwarte lijnen
  {
    if (L_val == 1 && R_val == 0)  //Als er een zwarte lijn aan de linkerkant wordt gedetecteerd, maar niet aan de rechterkant, draai links
    {
      Car_left();
    }
    else if (L_val == 0 && R_val == 1)  //Als er een zwarte lijn aan de rechterkant wordt gedetecteerd, maar niet aan de linkerkant, draai rechts
    {
      Car_right();
    }
    else  //anders, stop
    {
      Car_Stop();
    }
  }
}

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

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

//draai links
void Car_left()
{
  digitalWrite(MR_Ctrl, HIGH);
  analogWrite(MR_PWM, 100);
  digitalWrite(ML_Ctrl, LOW);
  analogWrite(ML_PWM, 150);
}

//draai rechts
void Car_right()
{
  digitalWrite(MR_Ctrl, LOW);
  analogWrite(MR_PWM, 150);
  digitalWrite(ML_Ctrl, HIGH);
  analogWrite(ML_PWM, 100);
}

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

(5)Testresultaat:

Na het succesvol uploaden van de testcode en het inschakelen van de voeding, beweegt het slimme voertuig langs de zwarte lijn.