Table of Contents

Multi color Line-Follower

Introducere

Aceasta lucrare presupune proiectarea unui robot de tip line-follower care este capabil de a urmari linii de mai multe culori. De asemenea, printr-un modul bluetooth, la o intersectie intre 2 culori, se poate modifica linia pe care sa o urmareasca.

Pentru functionalitatea de baza se vor folosi: 1x Arduino UNO, 2x Motoare de 3-6V cu reductor, 1x Driver motor L298N cu punte H dubla, 2x LED, 2x Fotorezistor, 2 x senzori IR, 1x Modul bluetooth.

Descriere generală

Robotelul este pornit dintr-un switch plasat pe partea superioara iar acesta in mod default va urmari o linie neagra cu ajutorul senzorilor IR. Dupa dorinta utilizatorului, acesta poate schimba ,prin intermediul modulului bluetooth, linia pe care sa o urmareasca. Se poate decide de la inceput ce linie sa urmareasca intre cea neagra si cea colorata. De asemenea, se poate pe parcurs sa se schimbe linia urmarita la o intersectie intre cele 3.

Hardware Design

Componente:

  1. Arduino UNO
  2. 2 Motoare de 3-6V cu reductor
  3. Driver motor cu punte H dubla
  4. Modul bluetooth
  5. 2 LED-uri (verzi)
  6. 2 Fotorezesitori
  7. 2 senzori IR
  8. 4 baterii AA 1.5V

Schema de wiring in Tinkercad. Deoarece in Tinkercad nu am gasit modulul bluetooth, acesta va fi pus separat.

Software Design

Functia de loop:

void loop() {
while(Serial.available()>0){
  inputByte= Serial.read();
  //Serial.println(c);
  if (inputByte=='Z'){
    color = 0;
  }
  else if (inputByte=='z'){
    color = 1;
  } 
  if (inputByte=='Y'){
    stop_ind = 0;
  }
  else if (inputByte == 'y'){
    stop_ind = 1;
  }
}

Serial.println(color);
prv = analogRead(pr);
Serial.println(prv);
prv2 = analogRead(pr2);
Serial.println(prv2);
if (color == 0 && !stop_ind) {
  if ((prv < low_blue_pr || prv > high_blue_pr) && (prv2 < low_blue_pr2 || prv2 > high_blue_pr2))
    forward();
  else if (prv > low_green_pr && prv < high_green_pr)
    turnLeft();
  else if (prv2 > low_green_pr2 && prv2 < high_green_pr2)
    turnRight();
}
else if (color == 1 && !stop_ind){
    if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 0)){forward();}
       //daca ambii senzori sunt pe culoarea alba (sau ceva deschis) 
       //atunci robotul merge in fata
    if((digitalRead(R_S) == 1)&&(digitalRead(L_S) == 0)){turnRight();}
     //daca senzorul drept este pe culoarea neagra si cel stang
     //pe alba atunci robotul trebuie sa vireze la dreapta  
  
    if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 1)){turnLeft();}
      //daca senzorul stang este pe culoarea neagra si cel drept
      //pe alba atunci robotul trebuie sa vireze la stanga 
 
}
else
{
  Stop();
}
//delay(800);

}

  • 1. In primul rand se definesc niste praguri pentru cea de-a doua culoare in functie de ce rezultate primim de la fotorezistori
  • 2. Iar in programul principal verificam ce culoare s-a selectat
    • 2.1 Daca s-a selectat culoarea neagra, atunci verificam cei constant cei 2 senzori IR pentru a urmari linia
    • 2.2 Daca s-a selectat culoarea verde (aici putem defini orice alta culoare prin acele praguri) atunci urmarim valorile fotorezistorilor. In acest caz, algoritmul verifica constant daca nu cumva vreunu din senzorii realizati cu fotorezistor a intrat pe culoare definita de noi (in cazul meu verde). Daca detecteaza orice alte valori in afara intervalului acela, robotul merge inainte. In felul acesta, chiar daca robotul se va intersecta cu culoarea neagra acesta nu o va lua in seama.

Rezultate Obţinute, Video

Pentru a putea urmari un demo, se poate apasa pe butonul de mai jos. In acel exemplu se poate observa ca eu apas pe telefon start si robotul porneste pe culoarea neagra, iar la intersectie am schimbat culoarea pe care sa o urmareasca si si-a schimbat traiectoria urmarind linia verde. PS: Traseul nu este cel final, incerc sa gasesc o solutie pentru a face unul mic pentru a-l putea cara la facultate.

click-here-button.jpg

Concluzii

Acest proiect pare simplu la prima vedere dar in realizarea lui m-am lovit de multe probleme hardware cu conexiunile, lipiturile, cu ansablul acela de fotorezistor + led. In acest ultim caz am observat ca ledul lumineaza mai tare cand e conectat la calculator si ii pot citi valorile returnate de fotorezistor si lumineaza mai putin cand e pe baterii asa ca a trebuit sa conectez cele 2 leduri separat la 2 baterii. Proiectul poate fi o jucarie pentru copii mici, un exemplu comercial al unui robotel de genu ar fi Ozobot.

Download

Bibliografie/Resurse

Export to PDF