This shows you the differences between two versions of the page.
pm:prj2024:aungureanu:codrut.ciulacu [2024/05/24 22:40] codrut.ciulacu [Detalii de implementare] |
pm:prj2024:aungureanu:codrut.ciulacu [2024/05/27 00:44] (current) codrut.ciulacu [Jurnal] |
||
---|---|---|---|
Line 10: | Line 10: | ||
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 | 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 | ||
{{:pm:prj2024:aungureanu:diagrama_sin_titulo.jpg?700|}} | {{:pm:prj2024:aungureanu:diagrama_sin_titulo.jpg?700|}} | ||
+ | {{:pm:prj2024:aungureanu:whatsapp_image_2024-05-26_at_22.09.02.jpeg?700|}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
**Piese necesare** | **Piese necesare** | ||
Line 28: | Line 29: | ||
**Schema electrica** | **Schema electrica** | ||
- | {{:pm:prj2024:aungureanu:screenshot_from_2024-05-15_23-50-28.png?750|}} | + | {{:pm:prj2024:aungureanu:proiectpm.png?750|}} |
===== Software Design ===== | ===== Software Design ===== | ||
Line 51: | Line 52: | ||
* **IRremote**: pentru controlul robotului prin telecomanda | * **IRremote**: pentru controlul robotului prin telecomanda | ||
* Aceste componente sunt unite in **main.c** | * Aceste componente sunt unite in **main.c** | ||
- | ======= Detectarea obstacolelor ======= | + | * Motoarele folosesc in spate PWM, folosesc Timer-ul 0 ambele canale pentru asta, in modul Fast PWM fara prescaler, asta insemnand ca valoarea maxima e intre cea setata in registrii OCR0A/OCR0B si 255 |
+ | * Senzorul de ultrasonice functioneaza pe un principiu simplu: eu dau un trigger, in spate se trimite o unda ultrasonica care se va intoarce inapoi si va fi detectata de senzor, noi calculam timpul parcurs si folosind formula (0.000004 * time / 2 * 34300) putem afla distanta parcursa de unda. | ||
+ | * Aceste valori au fost aflate part experimental si part cautand pe net in dorinta de a gasi un punct de plecare | ||
+ | * Pentru a calibra timpul dintre 2 citiri am folosit tot metoda experimentala incercand sa gasesc un interval astfel incat sa nu se calce in picioare senzorii | ||
+ | |||
+ | ** Detectarea obstacolelor ** | ||
* pentru detectarea distantelor folosesc 4 senzori de distanta cu ultrasonice | * pentru detectarea distantelor folosesc 4 senzori de distanta cu ultrasonice | ||
* cand senzorul din fata sau cel din spate detecteaza un obiect forteaza oprirea robotului | * 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 | * 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 | * prin acest algoritm simplu reusim sa gasim un loc liber si putem incepe manevrele de parcare | ||
- | ======= Algoritmul de parcare ======= | + | ** Algoritmul de parcare ** |
* pentru parcare am decis sa folosesc 2 algoritmi de parcare(parcare laterala si parcare cu spatele) | * pentru parcare am decis sa folosesc 2 algoritmi de parcare(parcare laterala si parcare cu spatele) | ||
* parcarea laterala: | * parcarea laterala: | ||
Line 69: | Line 75: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | [[https://youtube.com/shorts/6XWtDga2NS0?feature=share|Rezultat final]] |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | * Rezultatul principal de care sunt cel mai mandru este ca am obtinut ceva care merge, folosind o buna parte din ce am invatat la laborator. Asta a fost si motivul pentru care am implementat folosind avr-c ca sa pot sa pun in aplicare si sa inteleg mai bine ce am folosit la laboratoare semestrul asta. |
+ | * Rezultatele sunt multumitoare, sure it's far from perfect si probabil o sa mai lucrez la acest proiect ca un mini proiect personal, dar in opinia mea e mult mai importanta calatoria si faptul ca am fost pus intr-un context pe care nu il stiam suuuper bine(partea de hardware) | ||
+ | ===== Concluzii ===== | ||
+ | * M-am confruntat cu destule dificultati pe parcurs, cateva dintre ele fiind: | ||
+ | * Am purtat lupta vietii mele cu driverele de motor, am schimbat 3 drivere: unul a venit ars si imi scotea pe un pin de input 5V, unul avea 4 pini de in care cereau pwm si am ramas rapid fara timere pe care sa calculez pwm-ul pentru ca aveam nevoie de timere si la receiver-ul de ir si la senzori cu ultrasonice si ultimul care a fost un succes(al 3-lea e mereu cu noroc) | ||
+ | * Si senzorii cu ultrasonice mi-au dat batai de cap si in special faptul ca eu aveam nevoie de 4 | ||
+ | * Partea de lucru cu infrarosu a fost cam crancena si pana la urma am ajuns sa folosesc o librarie pentru ca era mai usor | ||
+ | * Dupa ce am trecut peste aceste probleme implementarea a fost straight-forward(aveam componentele separat testate si implementate si a trebuit sa le pun cap la cap) | ||
+ | * Implementarea curenta nu include toate incercarile si aproach-urile la care m-am gandit si care nu au mers(sa folosesc un singur pin de echo pt senzori de distanta, sa conectez 2 arduino-uri unul pentru senzori si unul pentru motoare, sa implementez algoritmul NEC pentru infrarosu, lipiturile facute, incercarea de a adauga un buzzer si led-uri pentru semnalizare) pe care le-am scos pentru ca nu functionau corect impreuna cu codul deja scris | ||
+ | * Experienta a fost fun si as mai repeta-o, dar ce as face mai bine ar fi: | ||
+ | * organizare mai buna ca timp | ||
+ | * scris de teste | ||
+ | * sa incerc sa vin prima data cu un PoC inainte sa fac restul implementarii | ||
+ | * sa imi setez asteptari la joase | ||
===== Download ===== | ===== Download ===== | ||
+ | Arhiva cu schemele si codul: Ciulacu Codrut-Cristian, 333CC → {{:pm:prj2024:aungureanu:self_parking_robot_codrut_ciulacu.zip}} | ||
- | <note warning> | ||
- | 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**. | ||
- | </note> | ||
- | |||
- | ===== Jurnal ===== | ||
- | |||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | + | * [[https://www.avrfreaks.net | Forum AVR]] | |
- | <note> | + | * laboratoare |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * [[https://ocw.cs.pub.ro/courses/_media/pm/doc8272.pdf | Datasheet 328p]] |
- | </note> | + | * [[https://images.prismic.io/circuito/8e3a980f0f964cc539b4cbbba2654bb660db6f52_arduino-uno-pinout-diagram.png?auto=compress,format | Pinout Arduino]] |
+ | * [[https://www.arduino.cc/reference/en/ | Docs arduino pentru Serial printing]] | ||
+ | * [[https://stackoverflow.com/search?q=avr&s=0b270fdb-6b38-4594-8098-63e4dc3f4498| Forum programare in general]] | ||
+ | * [[https://www.electrosoftcloud.com/en/pcint-interrupts-on-arduino/ | paralela pini PCINT_vect]] | ||
+ | * [[https://wiki.dfrobot.com/Arduino_Motor_Shield__L298N___SKU_DRI0009_ | Docs shield]] | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |