This is an old revision of the document!


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.

Schema electrică:

Imagine cu toate componentele mașinii puse cap-la-cap:

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

Imagine cu proiectul
Demo

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2022/avaduva/razvan.matisan.1653654463.txt.gz · Last modified: 2022/05/27 15:27 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