This shows you the differences between two versions of the page.
pm:prj2024:sseverin:andrei.napruiu [2024/04/28 15:51] andrei.napruiu [Introducere] |
pm:prj2024:sseverin:andrei.napruiu [2024/05/28 20:29] (current) andrei.napruiu [Rezultate Obţinute] |
||
---|---|---|---|
Line 3: | Line 3: | ||
==== Ce face? ==== | ==== Ce face? ==== | ||
- | Proiectul implică dezvoltarea unui dispozitiv interactiv de divertisment, conceput pentru a oferi utilizatorilor o experiență de joc captivantă. Acest dispozitiv permite utilizatorilor să selecteze modul de joc (single player sau multiplayer) prin intermediul butoanelor disponibile, pentru un joc de Ping Pong. Apoi, ei interacționează cu joystick-urile dedicate pentru a participa la joc, care se desfășoară într-o serie de “best of 3”, afișându-se pe ecranul conectat. În funcție de rezultat, buzzer-ul va crea un sunet de învingător sau pierzător. | + | Proiectul implică dezvoltarea unui dispozitiv interactiv de divertisment, conceput pentru a oferi utilizatorilor o experiență de joc captivantă. Acest dispozitiv permite utilizatorilor să selecteze modul de joc (single player sau multiplayer) prin intermediul butoanelor disponibile, pentru un joc de Ping Pong. Apoi, ei interacționează cu joystick-urile dedicate pentru a participa la joc, care se desfășoară într-o serie de „best of 3”, afișându-se pe ecranul conectat. În funcție de rezultat, buzzer-ul va crea un sunet de învingător sau pierzător. |
==== Scopul lui? ==== | ==== Scopul lui? ==== | ||
Line 14: | Line 14: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | <note tip> | + | ==== Funcționarea sistemului de joc: ==== |
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | 1. **Inițializarea joculu:** |
- | + | * Utilizatorul pornește sistemul și alege, prin interacțiunea cu butonul, modul de joc: singleplayer, multiplayer. | |
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | 2. **Începerea jocului** |
- | </note> | + | * Odată inițializat jocul, acesta va începe, afișând pe ecran scorul actual (0 - 0) și creând jucătorii (cele 2 palete) |
+ | 3. **Procesarea mișcărilor** | ||
+ | * În funcție de modul de joc ales, acțiunea joystick-urilor va afecta poziția paletelor (sau a unei singure palete). | ||
+ | * Monitorizarea acțiunilor asupra joystick-urilor se va face constant de către placa de acțiune (Arduino). | ||
+ | * Prin atingerea bilei de joc cu o paletă, bila se va mișca către terenul advers. | ||
+ | * Afișarea mișcărilor corecte va fi procesată de placa Arduino și transmisă către utilizator prin display-ul LED I2C. | ||
+ | 4. **Încheierea jocului** | ||
+ | * Jocul se va incheia odată cu atingerea scorului de 2/3 puncte de oricare dintre jucători. | ||
+ | * Procesarea mișcărilor joystick-urilor va fi oprită. | ||
+ | * Va fi acționat buzzer-ul pentru a transmite sunetul corespunzător finalului de joc. | ||
+ | 5. **Rematch** | ||
+ | * Odată cu finalizarea jocului anterior va fi pornită opțiunea de rematch care va reinițializa un joc după formatul anterior. | ||
+ | {{ :pm:prj2024:sseverin:napruiuandrei.png?750 |}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | |||
+ | Lista componente: | ||
+ | |||
+ | ^ Nume componentă ^ Cantitate ^ | ||
+ | | Arduino UNO (echivalent ATMega328P) | 1 | | ||
+ | | Buzzer | 1 | | ||
+ | | Joystick Analog | 2 | | ||
+ | | Display LCD (I2C) | 1 | | ||
+ | | Breadboard | 1 | | ||
+ | | LED (diverse culori) | 1/2 | | ||
+ | | Rezistor (diverse valori) | 1/2 | | ||
+ | | Cabluri | nelimitat | | ||
+ | |||
+ | Cum arată până acum: | ||
+ | {{ :pm:prj2024:sseverin:hardware-napruiu.jpeg?750 |}} | ||
+ | |||
+ | Modelul sistemului (cu componente vizibile): | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:model-napruiu.jpeg?750 |}} | ||
+ | ---- | ||
+ | |||
+ | Schematicul sistemului: | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:schematic-napruiu.jpeg?750 |}} | ||
<note tip> | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | + | * Am utilizat potențiometre în locul joystick-urilor analogice din cadrul ambelor scheme, deoarece nu am putut găsi online un model care să se potrivească. |
- | * listă de piese | + | * Urmează să construiesc din carton (sau orice material mai accesibil) o carcasă pentru a putea juca fără posibilitatea de a deconecta cablurile. |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
- | * diagrame de semnal | + | |
- | * rezultatele simulării | + | |
</note> | </note> | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | ==== Descrierea codului aplicației ==== | ||
- | <note tip> | + | * **Mediu de dezvoltare**: |
- | Descrierea codului aplicaţiei (firmware): | + | Pentru dezvoltarea acestui proiect, a fost utilizat mediu de dezvoltare Arduino IDE. Acesta oferă un mediu prietenos și ușor de utilizat pentru programarea microcontrolerelor din familia Atmega. |
- | * 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 ===== | + | * **Librării și surse 3rd-party**: |
+ | Au fost utilizate următoarele librării: | ||
+ | - **Wire.h**: pentru comunicarea I2C între Arduino și display-ul LCD. | ||
+ | - **LiquidCrystal_I2C.h**: pentru gestionarea și controlul display-ului LCD I2C. | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
- | ===== Concluzii ===== | + | * **Algoritmi și structuri pe care plănuiesc să le implementez**: |
+ | Algoritmii principali includ: | ||
+ | - Controlul mingii în jocul Pong, incluzând detectarea coliziunilor cu pereții și paletele. | ||
+ | - Actualizarea scorurilor și afișarea acestora pe display. | ||
+ | - Detectarea intrărilor analogice de la joystick-uri pentru controlul paletelor. | ||
- | ===== Download ===== | + | - **Surse și funcții implementate**: |
+ | - Inițializarea și configurarea display-ului LCD I2C. | ||
+ | - Implementarea funcției de desenare a terenului de joc și a scorului. | ||
+ | - Controlul mișcării mingii și detectarea coliziunilor. | ||
+ | - Implementarea sunetelor pentru diferite evenimente în joc (coliziuni și puncte). | ||
- | <note warning> | + | ==== Stadiul actual al implementării software ==== |
- | 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**. | + | Codul sursă: [[https://github.com/andreinapruiu/Pong-Game-Arduino|GitHub Link]] |
- | </note> | + | |
- | ===== Jurnal ===== | + | === Funcții create și utilizate === |
+ | |||
+ | 1. **setup** - Inițializează afișajele LCD, setează modurile pinurilor pentru butoane, LED-uri și buzzer, creează caracterul personalizat al mingii și pregătește jocul pentru selecția inițială a modului și pornirea jocului. | ||
+ | |||
+ | 2. **loop** - Bucla principală a jocului care gestionează mișcarea mingii, mișcarea paletelor, actualizarea scorului și apelarea funcției `drawScore` când este necesară o actualizare. | ||
+ | |||
+ | 3. **drawScore** - Actualizează scorurile, cronometrul și rundele câștigate pe cel de-al doilea afișaj LCD, asigurându-se că doar părțile necesare sunt actualizate pentru a evita pâlpâirea. | ||
+ | |||
+ | 4. **showStartMessage** - Afișează mesajul de pornire pe primul afișaj LCD pentru a informa jucătorii că jocul este gata de jucat. | ||
+ | |||
+ | 5. **showBallPossession** - Afișează un mesaj care indică ce jucător deține mingea la începutul rundei. | ||
+ | |||
+ | 6. **ledShowAndPlayMelody** - Aprinde LED-urile și redă o melodie folosind buzzer-ul când un jucător câștigă o rundă sau un joc. | ||
+ | |||
+ | 7. **waitForRestart** - Afișează un mesaj care solicită jucătorilor să apese un buton pentru a începe o nouă rundă. Așteaptă până când butonul este apăsat. | ||
+ | |||
+ | 8. **resetRound** - Resetează scorurile pentru runda curentă și pregătește jocul pentru runda următoare, afișând din nou mesajul de pornire. | ||
+ | |||
+ | 9. **resetGame** - Resetează toate scorurile și rundele câștigate, pregătind jocul pentru un nou meci de la început și afișează mesajul de pornire. | ||
+ | |||
+ | 10. **gameOver** - Afișează un mesaj care indică ce jucător a câștigat jocul. | ||
+ | |||
+ | 11. **selectMode** - Permite jucătorilor să selecteze între modul single-player și multiplayer folosind joystick-ul și butonul de selecție. | ||
+ | |||
+ | 12. **displayModeMenu** - Afișează meniul de selecție a modului pe cel de-al doilea afișaj LCD. | ||
+ | |||
+ | 13. **waitForModeSelection** - Instrucționează jucătorul să verifice cel de-al doilea afișaj pentru selecția modului și așteaptă selectarea modului. | ||
+ | |||
+ | 14. **movePlayer2Automatically** - Mișcă automat paleta jucătorului 2 pe baza poziției mingii, utilizată în modul single-player. | ||
+ | |||
+ | 15. **setup** - Inițializează jocul prin configurarea afișajelor LCD, a pinurilor de intrare/ieșire și a condițiilor de pornire pentru joc. | ||
+ | |||
+ | 16. **loop** - Bucla principală a jocului care rulează continuu, gestionând intrările jucătorilor, mișcarea mingii, actualizările scorurilor și schimbările de stare ale jocului. | ||
+ | |||
+ | 17. **waitForRestart** - Afișează un mesaj care cere jucătorilor să apese un buton pentru a începe o nouă rundă și așteaptă apăsarea butonului. | ||
+ | |||
+ | 18. **resetRound** - Resetează scorurile pentru runda curentă și pregătește jocul pentru o nouă rundă, afișând mesajul de pornire. | ||
+ | |||
+ | 19. **resetGame** - Resetează toate variabilele jocului la stările inițiale, pregătind pentru un nou joc. | ||
+ | |||
+ | 20. **gameOver** - Afișează un mesaj care indică ce jucător a câștigat jocul. | ||
+ | |||
+ | 21. **selectMode** - Gestionează selecția modului single-player sau multiplayer de către jucător. | ||
+ | |||
+ | 22. **displayModeMenu** - Afișează meniul de selecție a modului pe cel de-al doilea afișaj LCD. | ||
+ | |||
+ | 23. **waitForModeSelection** - Afișează instrucțiuni pentru a verifica al doilea afișaj pentru selecția modului și așteaptă alegerea jucătorului. | ||
+ | |||
+ | 24. **movePlayer2Automatically** - Mișcă automat paleta jucătorului 2 pentru a urmări mingea în modul single-player. | ||
+ | |||
+ | |||
+ | > Elementul de noutate al proiectului este dat de posibilitatea de a interacționa direct cu sistemul prin intermediul joystickurilor. | ||
+ | |||
+ | ==== Laboratoare utilizate ==== | ||
+ | - [[pm:lab:lab3-2023-2024|]] | ||
+ | - [[pm:lab:lab4-2023-2024|]] | ||
+ | - [[pm:lab:lab6-2023-2024|]] | ||
+ | |||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | [[https://youtu.be/NIuy8t1Exc0?si=EKHTQ3DRj8NNWOY8|Youtube Link]] | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | |||
+ | ===== Download ===== | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | Arhiva care conține toate fișierele create pentru acest proiect se poate descărca de pe link-ul de [[https://github.com/andreinapruiu/Pong-Game-Arduino|GitHub]]. |
</note> | </note> | ||
+ | |||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | ==== Hardware Utilizat ==== |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | 1. **Placă Arduino** |
+ | * [[https://www.optimusdigital.ro/ro/index.php?controller=attachment&id_attachment=143|Arduino Uno Fake]] | ||
+ | |||
+ | 2. **Afișaj LCD I2C** | ||
+ | * [[https://www.optimusdigital.ro/ro/index.php?controller=attachment&id_attachment=29|LCD 1602 I2C]] | ||
+ | |||
+ | 3. **Joystick-uri Analogice** | ||
+ | * [[https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/742-modul-joystick-ps2-biaxial-negru-cu-5-pini.html?search_query=joystick&results=42|Joystick Module]] | ||
+ | |||
+ | 4. **Butoane Digitale** | ||
+ | * [[https://www.adafruit.com/product/367|Push Buttons]] | ||
+ | |||
+ | 5. **Buzzer** | ||
+ | * [[https://www.adafruit.com/product/1536|Buzzer Module]] | ||
+ | |||
+ | ==== Software Utilizat ==== | ||
+ | |||
+ | 1. **Arduino IDE** | ||
+ | * [[https://www.arduino.cc/en/software|Arduino IDE Download]] | ||
+ | |||
+ | 2. **Configurare Display** | ||
+ | * [[https://lastminuteengineers.com/i2c-lcd-arduino-tutorial/?utm_content=cmp-true|I2C Display]] | ||
+ | |||
+ | 2. **Biblioteci Arduino** | ||
+ | * **Wire.h** | ||
+ | * [[https://www.arduino.cc/en/Reference/Wire|Arduino Wire Library]] | ||
+ | * **LiquidCrystal_I2C.h** | ||
+ | * [[https://github.com/johnrickman/LiquidCrystal_I2C|LiquidCrystal I2C Library]] | ||
<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> | ||