This is an old revision of the document!
Self Parking Robot
Introducere
Robotul propus este un robot controlat prin telecomanda cu posibilitatea de a executa manevre de parcare(laterala, cu fata sau cu spatele).
Scopul lui este atat de invatare pentru mine, dar si de a demonstra anumite mecanisme necesare masinilor autonome.
Ideea mi-a venit intr-o seara cand ma gandeam la posibile idei de proiecte. Nu am avut un motiv ulterior in spate pentru tema asta, doar mi s-a parut o idee interesanta si provocatoare din punct de vedere tehnic.
Acest proiect este o posibilitate foarte buna de invatare.
Descriere generală
Robotul este controlat folosind o telecomanda cu infra-rosu, acest semanl este procesat de un Arduino UNO, care trimite un semnal catre driverul de motoare care controleaza motoarele DC. La primirea unei anumite comenzi, microcontroller-ul incepe executia manevrei de parcare. Prima data cauta un loc potrivit(merge in fata pana da de un spatiu gol) se positioneaza conform algoritmului manevrei pentru care a primit comanda si incepe sa o execute pana ajunge la o distanta potrivita de marginile zonei delimitate. In timpul manevrei robotul nu mai poate primi alta comanda
Hardware Design
Piese necesare
Arduino UNO - microcontroler
Driver motoare - pentru a putea controla motoarele
Motoare DC - pentru deplasare
Senzori de distanta HC-SR04 - pentru a detecta obstacole sau puncte de referinta pentru parcare
Senzor infrarosu - pentru control de la distanta
Telecomanda
Suport baetrii 6V - pentru curentul catre driver
Pin out
PD0, PD1 - senzor ultrasonice fata, e convenabil dpdv al firelor
PD2, PD4 - senzor ultrasonice lateral, e convenabil dpdv al firelor
PD11, PD12 - senzor ultrasonice spate, e convenabil dpdv al firelor
PD13 - senzor infrarosu, e convenabil pentru fire
PD3, PD5 - motor A, pentru ca sunt pini cu PWM si sunt convenabili ca pozitionare
PD6, PD9 - motor b, pentru ca sunt pini cu PWM si sunt convenabili ca pozitionare
Schema electrica
Software Design
Prezentarea uneltelor folosite
mediul de dezvoltare: PlatformIO(folosit initial) & Arduino IDE(folosit ulterior pentru facilizarea utilizarii IRremote)
pentru implementare am folosit libraria IRremote pentru controlul receiverului de infrarosu pentru a nu implementa protocolul NEC si Arduino.h pentru afisat pe seriala in general
Detalii de implementare
Pentru implementare am folosit o buna parte din laboratoare:
GPIO: cititul senzorilor de distanta si controlul directiei la moatoare
PWM: pentru controlul motoarelor
Intreruperi & Timere: ca sa citesc senzorii de distanta periodic
UART: pentru debug in special(am si o implementare proprie bazata pe laborator, dar nu a mers foarte bine asa ca am folosit utilitarul expus prin Arduino.h, dar o sa pun si aceast lab pentru ca am incercat sa fac o comunicare intre 2 arduino-uri prin UART, dar nu a mai fost nevoie)
Pentru a face o descriere succinta a arhitecturii proiectului am 3 componente principale:
motor: controlul motoarelor prin PWM si expune o interfata pentru controlul motoarelor usor de folosit abstractizand logica din spate
distance: pentru detectarea obstacolelor si referintelor pentru parcare
IRremote: pentru controlul robotului prin telecomanda
Aceste componente sunt unite in main.c
Detectarea obstacolelor
pentru detectarea distantelor folosesc 4 senzori de distanta cu ultrasonice
cand senzorul din fata sau cel din spate detecteaza un obiect forteaza oprirea robotului
pentru a detecta locurile disponibile pentru parcare folosesc senzorii din lateral si caut secventa urmatoare: ambii senzori detecteaza un obiect, doar senzorul din spate detecteaza un obiect, nici un senzor nu detecteaza un obiect, senzorul din fata detecteaza iar un obiect
prin acest algoritm simplu reusim sa gasim un loc liber si putem incepe manevrele de parcare
Algoritmul de parcare
Rezultate Obţinute
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
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