Differences

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

Link to this comparison view

pm:prj2023:alucaci:pong-game [2023/05/27 15:39]
raluca_maria.pelin [Software Design]
pm:prj2023:alucaci:pong-game [2023/05/30 11:08] (current)
raluca_maria.pelin [Software Design]
Line 12: Line 12:
   * crosele se pot deplasa doar stânga-dreapta de-a lungul marginii terenului   * crosele se pot deplasa doar stânga-dreapta de-a lungul marginii terenului
 ==Schema bloc: == ==Schema bloc: ==
-{{ :​pm:​prj2023:​alucaci:​screenshot_2023-05-07_at_12.56.47.png?600 |}}+{{:​pm:​prj2023:​alucaci:​bloc_pm.drawio.png?600|}}
 ==Mod de functionare:​== ==Mod de functionare:​==
 În ceea ce privește modul de joc împotriva controller-ului,​ este necesar că poziția mingii pe teren să fie cunoscută de către acesta, pentru a putea muta crosa la o poziție potrivită. Pentru aceasta, sunt folosiți 3 senzori de distanță IR cu output analog cu ajutorul cărora se poate calcula poziția mingii pe teren, această informație fiind transmisă către Arduino, care apoi acționează motorul DC astfel încât crosa se va alinia cu poziția mingii când ajunge la capătul sau al porții. În ceea ce privește modul de joc împotriva controller-ului,​ este necesar că poziția mingii pe teren să fie cunoscută de către acesta, pentru a putea muta crosa la o poziție potrivită. Pentru aceasta, sunt folosiți 3 senzori de distanță IR cu output analog cu ajutorul cărora se poate calcula poziția mingii pe teren, această informație fiind transmisă către Arduino, care apoi acționează motorul DC astfel încât crosa se va alinia cu poziția mingii când ajunge la capătul sau al porții.
Line 38: Line 38:
 ==Schema electrică:​== ==Schema electrică:​==
 {{ :​pm:​prj2023:​alucaci:​pm_schematic.png?​700 |}} {{ :​pm:​prj2023:​alucaci:​pm_schematic.png?​700 |}}
 +
 +== Cablarea finală ==
 +
 +{{ :​pm:​prj2023:​alucaci:​whatsapp_image_2023-05-30_at_10.47.37.jpeg?​600 |}}
  
 == Modelare și printare 3D == == Modelare și printare 3D ==
Line 101: Line 105:
  
 Deși pe Internet există resurse și exemple de cod pentru măsurarea distanței cu ajutorul acestor senzori, prin compararea output-ului de la senzor și măsurarea distanței reale am constatat că funcția de transfer din exemplele existente nu se aplică pe senzorii mei și trebuie să implementez eu funcția bazându-mă pe output-ul de la senzori. Deși pe Internet există resurse și exemple de cod pentru măsurarea distanței cu ajutorul acestor senzori, prin compararea output-ului de la senzor și măsurarea distanței reale am constatat că funcția de transfer din exemplele existente nu se aplică pe senzorii mei și trebuie să implementez eu funcția bazându-mă pe output-ul de la senzori.
 +
 +{{ :​pm:​prj2023:​alucaci:​matlab.jpg?​600 |}}
  
 Astfel, am realizat măsurători pentru aproximativ 30 de distanțe din range-ul [10, 80] cm, acesta find range-ul de funcționare normală al senzorului. Aceste informații le-am pasat apoi într-un script MatLab, în cadrul căruia am folosit funcția //​polyfit()//​ pentru a obține cel mai apropiat polinom care să reprezinte adecvat output-ul senzorilor. Am ales să folosesc un polinom de gradul 5, acesta fiind cel mai complex polinom ce se putea obține în MatLab pornind de la datele furnizate din măsurătorile mele, ajungând la următoarea implementare a funcției de transfer pentru senzor: Astfel, am realizat măsurători pentru aproximativ 30 de distanțe din range-ul [10, 80] cm, acesta find range-ul de funcționare normală al senzorului. Aceste informații le-am pasat apoi într-un script MatLab, în cadrul căruia am folosit funcția //​polyfit()//​ pentru a obține cel mai apropiat polinom care să reprezinte adecvat output-ul senzorilor. Am ales să folosesc un polinom de gradul 5, acesta fiind cel mai complex polinom ce se putea obține în MatLab pornind de la datele furnizate din măsurătorile mele, ajungând la următoarea implementare a funcției de transfer pentru senzor:
Line 132: Line 138:
 În cazul configurației mele, pinii de enable pentru motoarele DC erau chiar pinii 9 și 10, motiv pentru care acestea nu mai funcționau odată ce am introdus servomotoarele și a fost nevoie de debugging. După identificarea acestei probleme, am mutat pinii de enable pentru motoarele DC încât toate componentele funcționează corespunzător. În cazul configurației mele, pinii de enable pentru motoarele DC erau chiar pinii 9 și 10, motiv pentru care acestea nu mai funcționau odată ce am introdus servomotoarele și a fost nevoie de debugging. După identificarea acestei probleme, am mutat pinii de enable pentru motoarele DC încât toate componentele funcționează corespunzător.
 </​note>​ </​note>​
 +
 +== Detectarea poziției mingii ==
 +
 +Pentru a detecta poziția mingii pe teren, se utilizează un senzor IR plasat aproape la jumătatea terenului. Senzorul măsoară distanța mingii fată de acesta atunci când mingea trece prin fața sa, apoi putând determina pe ce poziție ar trebui să se afle crosa de joc pentru a putea pasa mingea mai departe, cros fiind deplasată la poziția dorită folosind alogritmul de PID descris mai sus. 
 +
 +Această strategie ar fi funcționat dacă senzorul utilizat nu ar fi avut un noise foarte sporit, însă, datorită spike-urilor ce apar în urma citirii valorii senzorului, nu se poate determina o poziție la care sa trebuiască mutată crosa, motiv pentru care am renunțat la input-ul din partea acestui senzor și am ales să ofer crosei o poziție random din 4 posibile poziții astfel încât să fie acoperită toată distanța porții din joc, fiecare poziție acoperind un cadran din poartă, poarta având în total 4 cadrane.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> + ​**Video:​** {{:​pm:​prj2023:​alucaci:​video_pm.zip|}} 
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru+ 
-</​note>​+2 playeri pot să joace în mod optim jocul de pong. Modul de autoplay pentru unul din jucători funcționează,​ deși este relativ ușor de a fi învins
 + 
 +{{ :​pm:​prj2023:​alucaci:​whatsapp_image_2023-05-30_at_10.47.41.jpeg?​300 |}}
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Realizarea acestui proiect a fost un proces interesant, însă mult mai complicat decât am anticipat întrucât am creeat toate componentele jocului de la 0. O altă parte interesantă a fost reutilizarea multor elemente pe care deja le aveam- am scos butoanele de joystick de la un joystick de PlayStation vechi, iar pe lângă motoare am folosit componente pe care le aveam dar cu care nu mă gândisem că pot realiza un proiect de o asemenea complexitate.
 +
 +Cu această ocazie, am aflat mai multe despre particularitățile unui Arduino UNO, câteva din acestea fiind menționate în warning-urile documentației ca fiind bine de știut pe viitor, dar și despre particularitățile senzorilor și ce impact mare poate avea noise-ul unuia.
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:prj2023:alucaci:2players_final.zip|}}
-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 ===== ===== Jurnal =====
Line 164: Line 177:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  - https://​global.sharp/​products/​device/​lineup/​data/​pdf/​datasheet/​gp2y0a21yk_e.pdf 
-Listă cu documente, ​datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+  ​https://​docs.arduino.cc/​learn/​electronics/​servo-motors 
-</note>+  - https://​forum.arduino.cc/​t/​demonstration-code-for-several-things-at-the-same-time/217158
  
 <​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/prj2023/alucaci/pong-game.1685191156.txt.gz · Last modified: 2023/05/27 15:39 by raluca_maria.pelin
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