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:22]
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 44: Line 48:
  
 Astfel, am modelat în AutoDesk Fusion 360 piesele menționate anterior și apoi le-am printat la o imprimantă 3D Ender Creality, folosind programul de slicing PrusaSlicer. Alegerea de a printa 3D aceste componente ale proiectului s-a dovedit foarte utilă, întrucât timpul petrecut modelând un obiect de forma și dimensiunile dorite, precum și printarea acestuia, au durat mult mai puțin decât ar fi durat improvizarea unei piese similare din alte materiale. Astfel, am modelat în AutoDesk Fusion 360 piesele menționate anterior și apoi le-am printat la o imprimantă 3D Ender Creality, folosind programul de slicing PrusaSlicer. Alegerea de a printa 3D aceste componente ale proiectului s-a dovedit foarte utilă, întrucât timpul petrecut modelând un obiect de forma și dimensiunile dorite, precum și printarea acestuia, au durat mult mai puțin decât ar fi durat improvizarea unei piese similare din alte materiale.
 +
 +<note warning>
 +Inițial, planul era ca cele două servomotoare să se alimenteze la Arduino UNO, iar cele două motoare DC de la sursa de tensiune de 12V. 
 +Din păcate trebuiau efectuate niște calcule legate de urmările unui asemenea format de cablare, întrucât a dus la arderea plăcii Arduino și a driver-ului de motoare.\\
 +Soluția pentru această situație este utilizarea unui modul de coborâre tensiune LM2596, care convertește tensiunea de 12V primită de la sursa de tensiune într-o tensiune de 5V, care va fi folosită pentru alimentare servomotoarelor. Astfel, nu mai există componente de mare consum care să se alimenteze de la placa Arduino, aceste alimentându-se de la sursa de tensiune de 12V.
 +</​note>​
 +
 ===== Software Design ===== ===== Software Design =====
  
Line 94: 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 122: Line 135:
  
 <note warning> <note warning>
-Dacă se dorește utilizarea bibliotecii Servo.h pentru controlarea servomotoarelor,​ trebuie luat în considerare faptul că această bibliotecă dezactivează funcționalitatea PWM pentru pinii 9 și 10 din Arduino UNO. Î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.+Dacă se dorește utilizarea bibliotecii Servo.h pentru controlarea servomotoarelor,​ trebuie luat în considerare faptul că această bibliotecă dezactivează funcționalitatea PWM pentru pinii 9 și 10 din Arduino UNO.\\ 
 +Î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 156: 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.1685190154.txt.gz · Last modified: 2023/05/27 15:22 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