Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:aungureanu:codrut.ciulacu [2024/05/15 23:52]
codrut.ciulacu [Hardware Design]
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 =====
  
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
-===== Rezultate Obţinute ===== 
  
-<note tip> +**Prezentarea uneltelor folosite** 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +  * mediul de dezvoltare: **PlatformIO**(folosit initial) & **Arduino IDE**(folosit ulterior pentru facilizarea utilizarii IRremote) 
-</​note>​+  * 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
  
-===== Concluzii ===== 
  
-===== Download =====+** 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** 
 +   * 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
  
-<note warning> +** Detectarea obstacolelor ** 
-O arhivă (sau mai multe dacă este cazul) ​cu fişierele obţinute în urma realizării proiectuluisursescheme, etc. Un fişier README, un ChangeLog, un script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+  * 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 urmatoareambii senzori detecteaza un obiectdoar senzorul din spate detecteaza un obiectnici un senzor nu detecteaza un obiectsenzorul 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 ** 
 +  * pentru parcare am decis sa folosesc 2 algoritmi de parcare(parcare laterala si parcare cu spatele) 
 +  * parcarea laterala:  
 +    * dupa ce pozitionez robotul in dreptul obiectului intorc robotul la 45 de grade 
 +    * dau cu spatele 
 +    * indrept robotul 
 +    * inaintez putin daca este cazul 
 +  * parcarea cu spatele: 
 +    * intorc robotul la 90 de grade 
 +    * dau cu spatele pana sunt aproape de un obiect
  
-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**. +===== Rezultate Obţinute =====
-</​note>​+
  
-===== Jurnal =====+[[https://​youtube.com/​shorts/​6XWtDga2NS0?​feature=share|Rezultat final]]
  
-<note tip> +* 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.
-Puteți avea și o secțiune ​de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/​Resurse ​=====+ * 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 ===== 
 +Arhiva cu schemele si codul: Ciulacu Codrut-Cristian,​ 333CC → {{:​pm:​prj2024:​aungureanu:​self_parking_robot_codrut_ciulacu.zip}}
  
-<​note>​ + 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse ​Software** şi **Resurse Hardware**. +===== Bibliografie/​Resurse ​===== 
-</note>+  ​[[https://​www.avrfreaks.net | Forum AVR]] 
 +  ​laboratoare 
 +  ​[[https://​ocw.cs.pub.ro/​courses/​_media/​pm/​doc8272.pdf | Datasheet 328p]] 
 +  ​[[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>​
pm/prj2024/aungureanu/codrut.ciulacu.1715806363.txt.gz · Last modified: 2024/05/15 23:52 by codrut.ciulacu
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