Caută cod

Lecția 30/31: Urmărirea liniei Car-8 de către mașina inteligentă din kit-ul Arduino SunFounder | Robojax

Lecția 30/31: Urmărirea liniei Car-8 de către mașina inteligentă din kit-ul Arduino SunFounder | Robojax

Acest ghid te îndrumă prin construirea unei mașini inteligente care urmărește o linie, folosind kit-ul Arduino 3-în-1 de la SunFounder.

lectia30-urmărirea-liniei-linia-1

 Proiectul, demonstrat în videoclip, folosește un modul de urmărire a liniei cu infraroșu pentru a detecta o linie neagră pe o suprafață albă și pentru a controla două motoare pentru a menține mașina pe traseu. Acesta este un proiect fundamental de robotică care te învață despre citirea senzorilor, logica condițională și controlul motoarelor. Valoarea din lumea reală este imensă—este baza pentru vehiculele ghidate automat (AGV) din depozite, aspiratoarele robotice care urmăresc marginile camerelor și platformele educaționale pentru învățarea navigației autonome. Dincolo de construcția de bază, poți folosi acest concept pentru:

  • Crearea unui robot simplu care poate naviga pe o cale prestabilită într-un labirint sau pe o pistă.
  • Construirea unui cărucior automat de livrare pentru un birou sau laborator mic.
  • Dezvoltarea unui robot care urmărește linia pentru un proiect școlar de știință sau o competiție.
  • Prototiparea unui sistem pentru o bandă transportoare industrială care sortează obiectele pe baza poziției.

Hardware și componente

Miezul acestui proiect este modulul de urmărire a liniei, care folosește o pereche de emițător și receptor cu infraroșu (IR). Iată o defalcare a componentelor cheie:

  • Modul de urmărire a liniei (TCRT5000): Acest senzor emite lumină infraroșie și măsoară intensitatea reflectată. Modulul include un comparator LM393 pentru a converti semnalul analogic într-o ieșire digitală HIGH sau LOW.
  • Șasiu de mașină inteligentă cu motoare: Kit-ul SunFounder include un cadru de mașină cu două motoare cu angrenaje, care sunt controlate de Arduino pentru a direcționa vehiculul.
  • Placă Arduino: „Creierul" operațiunii, care citește senzorul și trimite comenzi către motoare.
  • Driver de motor (pe shield-ul mașinii): Acest circuit permite pinilor de putere redusă ai Arduino să controleze motoarele cu curent mai mare.
lectia30-urmărirea-liniei-conexiuni

Ghid de conexiuni

Conexiunile pentru modulul de urmărire a liniei sunt simple. Videoclipul demonstrează conexiunile după cum urmează (în videoclip la 04:04):

  • VCC al tracker-ului de linie (pinul din mijloc): Conectează-l la pinul 5V al Arduino.
  • GND al tracker-ului de linie (pinul din stânga): Conectează-l la pinul GND al Arduino.
  • OUT al tracker-ului de linie (pinul din dreapta): Conectează-l la pinul digital 2 al Arduino.

Motoarele sunt conectate la driver-ul de motor de pe shield-ul mașinii. În cod, motorul drept este controlat de pinii 5 și 6, iar motorul stâng de pinii 9 și 10, așa cum se arată în demonstrația video (în videoclip la 12:28).

lectia30-urmărirea-liniei-cum-linia

Explicația codului

Codul este conceput pentru a citi semnalul digital de la tracker-ul de linie și pentru a controla motoarele în consecință. Iată părțile cheie configurabile de utilizator:

const int in1 = 5; // in1,2 pentru motorul drept
const int in2 = 6;

const int in3 = 9; // in3,4 pentru motorul stâng
const int in4 = 10;

const int lineTrack = 2;
  • Pinii motoarelor (in1, in2, in3, in4): Aceste constante definesc care pini Arduino sunt conectați la driver-ul de motor. Dacă conexiunile tale diferă, va trebui să schimbi aceste valori pentru a se potrivi configurației tale.
  • Pinul tracker-ului de linie (lineTrack): Acesta definește pinul digital conectat la ieșirea de semnal a senzorului. Codul citește acest pin pentru a determina dacă senzorul este deasupra unei suprafețe negre sau albe.

În bucla principală, poți ajusta variabila speed pentru a controla viteza de virare a mașinii. Valoarea variază de la 0 la 255, unde o valoare mai mare face mașina să vireze mai repede.

int speed = 150;//0 la 255

Logica este simplă: dacă senzorul citește HIGH (linie neagră), mașina virează la stânga; în caz contrar, virează la dreapta. Funcțiile personalizate moveLeft() și moveRight() controlează motoarele pentru a realiza acest lucru. De exemplu, pentru a vira la stânga, motorul drept se rotește în timp ce motorul stâng se oprește, pivotând mașina. Acest comportament este explicat în detaliu în videoclip (în videoclip la 10:39).

lectia30-urmărirea-liniei-senzor-pe-linie
Poziționarea tracker-ului de linie pe linia neagră. De asemenea, ajustarea sensibilității. 

Demonstrație live a proiectului

Videoclipul se încheie cu o demonstrație live a mașinii care urmărește linia (în videoclip la 13:13). Mașina este plasată pe o pistă neagră, iar senzorul este poziționat direct deasupra liniei. Pe măsură ce mașina se mișcă, senzorul detectează linia neagră și fundalul alb, trimițând semnale către motoare pentru a-și ajusta direcția. Demonstrația arată mașina finalizând cu succes un cerc complet, dovedind eficiența logicii simple de corecție stânga/dreapta.

Capitole

  • [00:00] Introducere în urmărirea liniei
  • [01:09] Cum funcționează modulul de urmărire a liniei
  • [04:04] Conectarea modulului de urmărire a liniei
  • [04:23] Testarea senzorului cu monitorul serial
  • [07:27] Înțelegerea logicii de urmărire a liniei
  • [09:08] Cod pentru mașina care urmărește linia
  • [11:37] Demonstrație a mașinii care urmărește linia
  • [13:13] Test live pe o pistă neagră

Imagini

Lesson 30 line tracking wiring
Lesson 30 line tracking wiring
Lesson 30 line tracking line 1
Lesson 30 line tracking line 1
Lesson 30 line tracking how line
Lesson 30 line tracking how line
Lesson 30 line tracking sensor on line
Lesson 30 line tracking sensor on line
889-Lesson 30/31: Car-8 Line Tracking by Smart Car from SunFounder Arduino Kit
Limba: C++

/*
this is code for the tutorial: Lesson 30/31: Car-8 Line Tracking by Smart Car from SunFounder Arduino Kit
YouTube video: https://www.youtube.com/watch?v=Cp2rD5RkYug
Get the code from: 📚⬇️ Download and resource page https://robojax.com/RJT613
www.robojax.com

*/
const int in1 = 5; // in1,2 for right motor
const int in2 = 6;

const int in3 = 9; // in3,4 for left motor
const int in4 = 10;

const int lineTrack = 2;

void setup() {
  Serial.begin(9600);

  //motor
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  
  //line track
  pinMode(lineTrack, INPUT);
}

void loop() {

  int speed = 150;//0 to 255

  int lineColor = digitalRead(lineTrack); // 0:white  1:black
  // Serial.println(lineColor); //print on the serial monitor
  if (lineColor) {
    Serial.print("Black ");
    moveLeft(speed);
  } else {
    Serial.print("White ");
    moveRight(speed);
  }
}
void moveLeft(int speed) {
  Serial.println("LEFT");
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, 0);
  analogWrite(in4, 0);
}

void moveRight(int speed) {
  Serial.println("RIGHT");
  analogWrite(in1, 0);
  analogWrite(in2, 0);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

Resurse și referințe

Încă nu sunt resurse.

Fișiere📁

Nu sunt disponibile fișiere.