Table of Contents

Masinuta care ocoleste obstacolele

Autor

Trasnea Catalina-Andreea - 331CC

Introducere

Proiectul consta in realizarea unei masini care se poate deplasa in orice directie fara a se lovi de obiectele aflate in jur. La baza realizarii acestui proiect va sta folosirea unei placute de dezvoltare Arduino UNO. Aceasta va folosi de asemenea un senzor ultrasonic cu ajutorul caruia va putea sa aproximeze distanta la care se afla de obiectele din jur.

Am pornit de la ideea implementarii unui maze solver, care sa poata ajunge de la o persoana la o alta persoana, strabatand un labirint cu un drum unic.

Pentru mine acest proiect a fost util, pentru ca m-a facut in primul rand sa inteleg anumite concepte de baza ale electronicii prin punerea lor in practica. Mai mult de atat, o alta utilitate pe care eu am gasit-o pentru acest robotel este de a transporta mici obiecte de la o persoana la alta.

Descriere generala

Cand masinuta este pornita prin apasarea power switch-ului, aceasta incepe sa se deplaseze intr-o directie pana cand se apropie de un obstacol. Aceasta poate aproxima distanta pana la un obiect cu ajutorul senzorului ultrasonic. Acest senzor este prins de servomotor prin intermediul unui servomotor. Cand senzorul se afla la o distanta mai mica de 15 cm de un obiect, se opreste, iar cu ajutorul servomotorului, intoarce senzorul in stanga si in dreapta, calculeaza noile distante fata de stanga si de dreapta, iar apoi in functie de acestea alege in ce directie sa mearga in continuare. Rotile masinutei functioneaza cu ajutorul a 4 motoare DC ce sunt actionate in diferite directii simultan (in functie de directia dorita de deplasare).

Schema Bloc

untitled_diagram_3_.jpg

Hardware Design

Componente Hardware

Schema Electrica (Circuit)

Schema Electrica (Componente)

Software Design

La nivel Software, proiectul consta in scrierea codului pentru incarcarea in placa. Mediul de dezvoltare folosit: Arduino IDE. Am folosit librariile AFMotor, NewPing si Servo.

Programul foloseste, in afara functiilor de setup si loop, urmatoarele functii:

lookRight() si lookLeft()

Folosind functia servo.write(angle) din cadrul librariei servo, servomotorul roteste bratul cu senzorul la un anumit numar de grade astfel incat sa se poata face calculul de distanta in stanga si in dreapta.

readPing()

Utilizand functia sonar.ping_cm(), ce face parte din libraria NewPing, se face comunicarea cu senzorul ultrasonic. In functia readPing() citim distanta in cm fata de care se afla obiectul din fata senzorului. Daca distanta este 0 (masina se afla chiar langa obiect), functia va returna o distanta de 250 pentru a face masina sa reincerce deplasarea in fata).

moveStop()

Da release celor 4 motoare DC, pentru a mentine pe loc masina.

moveForward() si moveBackward()

Foloseste functiile motor.run() si motot.setSpeed() din libraria AFMotor, pentru a actiona cele 4 motoare DC, conectate la roti. Viteza masinii creste de la 0 pana la 200 din 2 in 2 pentru a mentine o mai buna durata de viata a beteriilor. Pentru miscarea pe directia inainte toate cele 4 motoarele DC sunt comandate motor.run(FORWARD), respectiv pentru directia inainte motor.run(BACKWARD).

turnRight() si turnLeft()

Pentru a face stanga si dreapta, motoarele sunt actionate 2 cate 2 astfel:

Dreapta: cele 2 motoare de pe latura stanga a masinii pe directia FORWARD, iar cele de pe latura dreapta BACKWARD.

Stanga: cele 2 motoare de pe latura dreapta a masinii pe directia FORWARD, iar cele de pe latura stanga BACKWARD.

Rezultate obtinute

chio1.jpeg

chio2.jpeg

chio3.jpeg

chio4.jpeg

chio5.jpeg

YouTube Demo Links:

Download

Cod proiect: arduinocar.zip

Bibliografie/Resurse

https://ocw.cs.pub.ro/courses/pm/prj2021/amocanu/arduino_obstacle_avoiding_car

331cc_trasneacatalinaandreea_arduinocar.pdf