Line Follower

Introducere

Mi-am ales ca tema pentru proiect un robot care are ca scop urmarirea unui traseu definit de o banda de culoare neagra pe un fundal alb. Inspiratia pentru acest proiect a fost conturata de trenurile care se conduc singure, care m-au facut curioasa sa incerc si eu sa fac ceva asemanator, la nivel minimalist, pentru a intelege mai bine procesul din spate. Acest proiect este util in dezvoltarea autovehiculelor self-driving.

Descriere generală

Hardware Design

Piesele necesare pentru realizarea proiectului sunt:

  • 1 Microcontroller Arduino Uno
  • 1 Driver de motoare
  • 1 Bară de Senzori
  • 2 Roti
  • 1 Sasiu
  • 1 Baterie externa
  • Fire de legatura

Schema de legătură

Software Design

Mediu de dezvoltare folosit: Arduino IDE

int SensorLeft = 1;
  int SensorRight = 0;
  int enR = 11;
  int in1R = 10;
  int in2R = 9;
  int in3L = 7;
  int in4L = 6;
  int enL = 5;
  int speed = 255;

void setup() {
  pinMode(SensorLeft, INPUT);
  pinMode(SensorRight, INPUT);
  pinMode(enR, OUTPUT);
  pinMode(enL, OUTPUT);
  pinMode(in1R, OUTPUT);
  pinMode(in2R, OUTPUT);
  pinMode(in3L, OUTPUT);
  pinMode(in4L, OUTPUT);
  
  Serial.begin(9600);


}

void loop() {
  int readSensorRight = analogRead(SensorRight) < 300 ? 1 : 0;
  int readSensorLeft = analogRead(SensorLeft) < 300 ? 1 : 0;

  if(readSensorRight == 0 && readSensorLeft == 0) {forward();}
  if(readSensorRight == 1 && readSensorLeft == 0) {right();}
  if(readSensorRight == 0 && readSensorLeft == 1) {left();}
  if(readSensorRight == 1 && readSensorLeft == 1) {stop();}
}

void forward() {
  digitalWrite(in1R, LOW);
  digitalWrite(in2R, HIGH);
  analogWrite(enR, speed);
  digitalWrite(in3L, LOW);
  digitalWrite(in4L, HIGH);
  analogWrite(enL, speed);
}

void right() {
  digitalWrite(in1R, LOW);
  digitalWrite(in2R, HIGH);
  analogWrite(enR, speed);
  digitalWrite(in3L, LOW);
  digitalWrite(in4L, LOW);
  analogWrite(enL, LOW);
}

void left() {
  digitalWrite(in1R, LOW);
  digitalWrite(in2R, LOW);
  analogWrite(enR, LOW);
  digitalWrite(in3L, LOW);
  digitalWrite(in4L, HIGH);
  analogWrite(enL, speed);
}

void stop() {
    digitalWrite(in1R, LOW);
  digitalWrite(in2R, LOW);
  analogWrite(enR, LOW);
  digitalWrite(in3L, LOW);
  digitalWrite(in4L, LOW);
  analogWrite(enL, LOW);
}

Rezultate Obţinute

Masina urmeaza linia conform cerintelor, facand virajele necesare.

Concluzii

A fost mai greu decat pare :). Mi-a luat cateva ore bune sa-mi dau seama ce gresesc deoarece mi se tot reseta placuta la cateva secunde. Pana la urma l-am luat de la zero pentru a treia oara si doamne ajuta a mers :). In concluzie, a fost greu, dar am invatat mai bine conceptele necesare deoarece le-am pus in practica, fixand informatia.

Jurnal

  • Primele zile in care am facut schema si documentatia in care am crezut ca o sa mearga usor acest proiect.
  • O zi in care am montat robotul si am fost chiar optimista ca a mers repede.
  • O zi in care am scris codul si nu mergea, dupa care doua zile pline de chin pana a mers :))))

Export to PDF

pm/prj2023/alexau/linefollower.txt · Last modified: 2023/05/28 23:56 by alexandra.anton2803
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0