Obstacle Avoiding Car

Nume: Răzvan-Andrei Matișan

Grupa: 334CA

Email: razvan.matisan@stud.acs.upb.ro

Introducere

Proiectul constă în asamblarea de la zero a unei mașini autonome care ocolește obstacole.

Aceasta evită obstacolele, folosindu-se de informațiile primite de la un senzor de distanță amplasat în fața mașinii. În momentul în care mașina se apropie de un obstacol, robotul se oprește, merge cu spatele o distanță foarte mică, urmând ca mai apoi, cu ajutorul unui servomotor, să rotească senzorul de distanță la stânga și la dreapta. Într-un final, robotul va alege direcția unde distanța este mai mare.

Descriere generală

Schema bloc

Schema bloc prezentată mai sus explică, pe scurt, modul de interacțiune al modulelor utilizate.

Astfel, din momentul în care atat Arduino-ul, cât și Motor Driver-ul se alimentează la 9V, respectiv 7V, motoarele sunt puse în funcțiune. Acestea cresc viteza mașinii gradual pentru a reduce descărcarea rapidă a bateriilor.

În plus, senzorul ultrasonic primește în permanență informații cu privire la distanța până la cel mai apropiat obstacol. Atunci când distanța este suficient de mică, mașina se oprește, urmând să meargă cu spatele ca să se depărteze de obstacol.

Mașina va căuta o rută alternativă și va alege între stanga sau dreapta. Pentru asta, intră în scenă servomotorul care va roti senzorul de distanță către stânga și dreapta și va calcula distanțele pentru fiecare direcție. Într-un final, robotul va alege ruta unde distanța a fost mai mare și își va continua drumul.

Hardware Design

Piese Hardware:

  • Arduino UNO;
  • Shield cu Driver de Motoare L293D;
  • Micro Servomotor SG90 180 grade;
  • Senzor ultrasonic distanță HC-SR04;
  • 4 motoare cu reductor;
  • 4 roți;
  • 4 fire mama-tata;
  • 8 fire tata-tata;
  • 2 baterii Li-on 18650 de 3.7V + un holder pentru baterii;
  • 1 baterie VARTA de 9V;
  • Șasiu găurit de dimensiuni mari;
  • Holder pentru senzorul ultrasonic;
  • Suruburi.

Pe șasiu am lipit toate componentele.

Dedesubt, am amplasat la distante relativ mari cele 4 motoare cu reductor, împreună cu roata fiecăruia. În plus, în centru am lipit battery holder-ul pentru bateriile li-on 18650.

Deasupra, am lipit Arduino UNO, conectand la acesta shield-ul cu driver de motor. Arduino-ul este alimentat cu ajutorul unei baterii de 9V (lipita langa el), în timp ce motor driver-ul primește tensiune de la bateriile li-on.

În partea din față a mașinii am lipit micro servomotorul. De acesta, am legat o bucata de plastic care tine senzorul ultrasonic și care se rotește o data cu servomotorul.

De asemenea, am lipit cu cositor firele care fac legatura între motoare și driver-ul de motor la bornele motoarelor.

Data Sheets:
Schema electrică:

Pentru realizarea schemei electrice a L293D, am pornit de la schema electrică ce poate fi accesată aici. În plus, am folosit alte două biblioteci externe, pe care le-am inclus în arhiva de la finalul documentației, împreună cu schematicul realizat în Eagle.

Software Design

Codul a fost scris utilizând IDE-ul oferit de Arduino (versiunea 1.8.19).

Bibliotecile folosite sunt:

  • AFMotor.h - pentru motoarele
  • NewPing.h - pentru senzorul ultrasonic de distanță
  • Servo.h - pentru micro servomotor

În funcție de metoda apelată, mașina poate executa următoarele acțiuni:

  • să meargă înainte - moveForward();
  • să meargă înapoi - moveBackward();
  • să se întoarcă la dreapta - turnRight();
  • să se întoarcă la stânga - turnLeft();
  • să se oprească - moveStop().

Diferentele între metodele descrise anterior sunt date de modul în care se mișcă motoarele.

Totodată, calcularea distanței în timp real se efectuează în funcția readPing(). Cu ajutorul acesteia, robotul va ști când să se oprească (distanța trebuie să fie mai mică de 15 cm).

În plus, metodele lookLeft() și lookRight() rotesc micro servomotorul (și, implicit, senzorul de distanță), urmând ca mai apoi să se calculeze distanța în cele 2 poziții. Robotul se va roti în direcția unde distanța a fost mai mare și va merge înainte până va întâlni un nou obstacol.

Rezultate Obţinute

Evoluția în timp

Prima încercare: aici

Aceasta constă în verificarea funcționalității imediat după amplasarea pieselor. Din păcate, doar o singură roată era, aparent, alimentată.

A doua încercare: aici

După ce am rezolvat problema alimentării motoarelor (aparent bateriile nu făceau cum trebuie contact în holder), am ajuns să am toate motoarele funcționale.

A treia încercare: aici

Aici am alimentat Arduino-ul la o baterie de 9V, astfel încât mașina să nu fie dependentă de laptopul personal ;-). Din păcate însă, nu știe să ocolească obstacolele, așa că s-a ales cu o lovitură zdravănă în ușă :-(.

A patra încercare: aici

După ce am conectat și senzorul de distanță, începe să recunoacă obstacolele și să le evite… însă mai are nevoie de mici îmbunătățiri!

Demo final

Într-un final, mașina a ajuns să facă ceea ce trebuie. O scurtă demonstrație poate fi vizualizată aici.

Imagini cu proiectul

Concluzii

Mașina reușește să recunoască cu succes obstacolele aflate în fața ei și să găsească calea cea mai potrivită pentru a le evita. Robotul este suficient de rapid în reacții și viteză, iar întoarcerile la stânga sau la dreapta se efectuează foarte bine. Cu toate acestea, exista și unele limitări precum imposibilitatea evitării unor obstacole foarte joase ca înălțime (senzorul ultrasonic de distanță este amplasat destul de sus). De asemenea, unele obstacole, dacă se află la un unghi suficient de mare de direcția mașinii, nu sunt recunoscute de către aceasta.

Într-un final, a fost un proiect mega fun de la care pot să spun că am învățat într-un mod practic o mulțime de lucruri inginerești ;-).

Download

Arhivă care include schematicul și codul sursă: aici

Bibliografie/Resurse

pm/prj2022/avaduva/razvan.matisan.txt · Last modified: 2022/05/27 17:38 by razvan.matisan
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