Object Following Robot

Autor: Blejan Radu-Stefan 333CC

Introducere

 ⊗ Un robot compus din 4 roti ce urmareste un obiect plasat in fata lui la o anumita distanta.
 
 ⊗ Am pornit de la ideea de a face o masina cu 4 roti care sa se deplaseze singura si a urmat sa ma decid
 fata de ce obiect din jur sa depinda miscarea masinii.
 
 ⊗ Poate fi util pentru a asista o alta masina aflata in miscare sau pentru analiza diversor lucruri ce
 se deplaseaza pe pamant.

Descriere generala

Schema bloc

Hardware design

Masina este formata din 4 motoare pentru fiecare roata, fiecare pereche de roti fiind controlata de cate o punte H. Pe sasiu am adaugat si Arduino-ul si un breadboard pentru a realiza conexiunea dintre piese si Arduino. Ulterior am pus si un servomotor pe care am lipit un senzor ultrasonic pentru a detecta distanta fata de obiectul din fata.

Lista piese

  
   - Arduino UNO R3
   - 4 motoare DC 
   - 2 punti H
   - 2 baterii de 9V
   - 1 servomotor
   - 1 senzor ultrasonic
   - fire jumper + mama-tata
   - breadboard
   - 4 roti

Schema electrica

Software design

  • Mediu de dezvoltare folosit: Arduino IDE
  • Librarii folosite: Servo.h

Am folosit structura ”#define <nume_componenta> <pin>” pentru a avea control asupra fiecarei roti a masinii, asupra servomotorului si a senzorului ultrasonic.

Pentru tipurile de deplasare(stanga, dreapta, fata, spate) am implementat cate o functie pentru fiecare. De exemplu, functia pentru mers inainte:

void forward() {

analogWrite(enA, 150);
analogWrite(enB, 150);

digitalWrite(in1_stanga_spate,LOW);
digitalWrite(in2_stanga_spate, HIGH);
digitalWrite(in3_stanga_fata,LOW);
digitalWrite(in4_stanga_fata, HIGH);

analogWrite(enA_2, 150);
analogWrite(enB_2, 150);

digitalWrite(in1_dreapta_fata,LOW);
digitalWrite(in2_dreapta_fata, HIGH);
digitalWrite(in3_dreapta_spate,LOW);
digitalWrite(in4_dreapta_spate, HIGH);

}

Astfel am setat directia curentului prin fiecare roata si am dat directia masinii.

Apoi am implementat o functie ce calculeaza distanta determinata de senzorul ultrasonic. Se trimite un impuls de la senzor. Apoi sunt folosite viteza sunetului și timpul revenirii impulsului pentru a calcula distanța.

int setDistance() {

digitalWrite(Trig, LOW);   
delayMicroseconds(2);
digitalWrite(Trig, HIGH);  
delayMicroseconds(20);
digitalWrite(Trig, LOW);   
float distance = pulseIn(Echo, HIGH);  
distance= distance / 58;       
return (int)distance;

}

In final, in cadrul functiei loop() determin constant distantele din stanga si dreapta sevomotorului pentru a putea deplasa masina dupa un obiect care se misca si in functie de aceste valori, apelez functiile de deplasare a masinii pentru a respecta traiectoria.

void loop() {

  myservo.write(120);  
  delay(200); 
  rightDistance = setDistance();
  myservo.write(60); 
  delay(200); 
  leftDistance = setDistance();
  if((rightDistance > 50)&&(leftDistance > 50)){
    stop();
  }else if((rightDistance >= 20) && (leftDistance >= 20)) {     
    forward();
  }else if((rightDistance <= 5) && (leftDistance <= 5)) {
      back();
      delay(100);
  }else if(rightDistance - 3 > leftDistance) {
      left();
      delay(100);
  }else if(rightDistance + 3 < leftDistance) {
      right();
      delay(100);
  }else{
    stop();
  }

}

Activity Diagram

Rezultate obtinute

Concluzii

Proiectul a fost unul din care am invatat foarte multe. Am intampinat destul de multe dificultati, deoarece a fost nevoie de o atentie mare la conectarea componentelor, fiind nevoit sa folosesc si pinii analogici de pe placuta Arduino(A0, A1,… A5). Adevarata provocare dupa crearea masinii si obtinerea controlului asupra fiecarei roti a fost tratarea corecta a cazurilor pentru distantele senzorului ultrasonic, deoarece a trebuit sa le adaptez si la dimensiunea obiectului pe care trebuia sa il urmeze. Ca si concluzie, a fost o alegere buna, iar realizarea proiectului char mi-a oferit satisfactie si posibil noi idei pentru proiecte cu Arduino.

Bibliografie/Resurse

pm/prj2021/abirlica/object_following_robot.txt · Last modified: 2021/06/04 02:08 by radu_stefan.blejan
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