Differences

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

Link to this comparison view

pm:prj2026:ciprian.popescu0411:alexandru.stoian05 [2026/05/19 08:55]
alexandru.stoian05
pm:prj2026:ciprian.popescu0411:alexandru.stoian05 [2026/05/19 18:23] (current)
alexandru.stoian05 [Concluzii]
Line 3: Line 3:
  
 Prezentarea pe scurt a proiectului:​ Prezentarea pe scurt a proiectului:​
-  * Proiectul constă într-un joc interactiv inspirat de „Chicken Invaders”,​ cu afișaj pe un ecran LCD, ce poate fi controlat cu ajutorul unui joystick și al unor butoane.+  * Proiectul constă într-un joc interactiv inspirat de „Chicken Invaders”,​ cu afișaj pe un ecran LCD, ce poate fi controlat cu ajutorul unui joystick și al unui buton.
  
-  * Scopul proiectului este de a simula comportamentul unei console de jocuri de tip handheld. Acest concept presupune integrarea tuturor componentelor hardware (microcontrolerul,​ ecranul, joystick-ul și butoanele) într-un format compact și ergonomic.+  * Scopul proiectului este de a simula comportamentul unei console de jocuri de tip handheld. Acest concept presupune integrarea tuturor componentelor hardware (microcontrolerul,​ ecranul, joystick-ul și butonul) într-un format compact și ergonomic.
  
   * Ideea proiectului a pornit de la consolele pe care le-am folosit de-a lungul anilor, cum ar fi Nintendo DS sau Steam Deck, și de la un joc clasic al copilăriei mele: "​Chicken Invaders"​. Practic, mi-am propus să construiesc propria versiune a unei astfel de console, realizată de la zero și la o scară mult mai mică.   * Ideea proiectului a pornit de la consolele pe care le-am folosit de-a lungul anilor, cum ar fi Nintendo DS sau Steam Deck, și de la un joc clasic al copilăriei mele: "​Chicken Invaders"​. Practic, mi-am propus să construiesc propria versiune a unei astfel de console, realizată de la zero și la o scară mult mai mică.
Line 22: Line 22:
   * Controlul mișcării: Coordonatele navei sunt controlate prin joystick. Tensiunile potențiometrelor aferente axelor X și Y sunt convertite în valori numerice prin modulul ADC integrat pe microcontroller.   * Controlul mișcării: Coordonatele navei sunt controlate prin joystick. Tensiunile potențiometrelor aferente axelor X și Y sunt convertite în valori numerice prin modulul ADC integrat pe microcontroller.
  
-  * AcțiuniButoanele sunt conectate ​la pinii digitali ​(GPIO). Pentru a filtra zgomotul mecanic (contact bounce) fără a folosi funcții blocante precum delay(), se utilizează un algoritm de debouncing bazat pe Timere.+  * Acțiune ("​shoot"​)Butonul este conectat ​la un pin digital ​(GPIO). Pentru a filtra zgomotul mecanic (contact bounce) fără a folosi funcții blocante precum delay(), se utilizează un algoritm de debouncing bazat pe Timere.
 ===== Hardware Design ===== ===== Hardware Design =====
  
Line 86: Line 86:
 ==== Structuri de date ==== ==== Structuri de date ====
  
-  * **struct Enemy**: Grupează variabilele de poziție curentă (x, y), coordonatele anterioare utilizate pentru ștergerea grafică (oldX, oldY), poziția de referință pentru mișcarea sinusoidală (baseY) și un indicator boolean de stare (alive). Inamicii sunt stocați într-un vector de astfel de structuri ​pentru o iterare rapidă.+  * **struct Enemy**: Grupează variabilele de poziție curentă (x, y), coordonatele anterioare utilizate pentru ștergerea grafică (oldX, oldY), poziția de referință pentru mișcarea sinusoidală (baseY) și un indicator boolean de stare (alive). Inamicii sunt stocați într-un vector de astfel de structuri.
  
-  * **struct Spark**: Reprezintă proiectilul lansat de inamici. Stochează variabilele de poziție (curentă și anterioară),​ viteza individuală de cădere pe axa Y (speed) și starea curentă a acestuia (active) pentru a permite reutilizarea ​eficientă a structurii ​în memorie.+  * **struct Spark**: Reprezintă proiectilul lansat de inamici. Stochează variabilele de poziție (curentă și anterioară),​ viteza individuală de cădere pe axa Y (speed) și starea curentă a acestuia (active) pentru a permite reutilizarea structurii
 + 
 +  * **Variabilele specifice jucător**: Spre deosebire de inamici, starea jucătorului este gestionată prin variabile globale individuale,​ deoarece acesta reprezintă o entitate unică pe ecran și nu necesită gruparea într-un vector. Acestea rețin poziția curentă, coordonatele anterioare pentru ștergerea grafică, scorul acumulat și starea jocului ("​isGameOver"​).
  
   * **Matrice binare stocate în memoria Flash (PROGMEM)**:​ Pentru designul grafic al navelor și al inamicilor s-au utilizat vectori constanți de tipul "​unsigned char". Această abordare reține bitmap-urile direct în memoria Flash, urmând a fi citite de către metoda de redare pe ecran "​drawBitmap()"​.   * **Matrice binare stocate în memoria Flash (PROGMEM)**:​ Pentru designul grafic al navelor și al inamicilor s-au utilizat vectori constanți de tipul "​unsigned char". Această abordare reține bitmap-urile direct în memoria Flash, urmând a fi citite de către metoda de redare pe ecran "​drawBitmap()"​.
Line 97: Line 99:
   * **Algoritmul de debouncing**:​ Implementat în rutina de întrerupere (ISR) a Timer-ului 2. Algoritmul monitorizează starea brută a pinului digital legat la buton, validează schimbarea de stare doar dacă aceasta rămâne stabilă timp de 20ms şi elimină zgomotul provocat de contactul mecanic.   * **Algoritmul de debouncing**:​ Implementat în rutina de întrerupere (ISR) a Timer-ului 2. Algoritmul monitorizează starea brută a pinului digital legat la buton, validează schimbarea de stare doar dacă aceasta rămâne stabilă timp de 20ms şi elimină zgomotul provocat de contactul mecanic.
  
-  * **Algoritmul de generare a mişcării sinusoidale**:​ Pentru a obţine traiectoria curbată şi fluidă a flotei de inamici ​pe axa Y, s-a implementat o ecuaţie de oscilaţie armonică bazată pe funcţia trigonometrică "​sin()",​ unde poziţia finală $y$ este calculată dinamic în funcţie de poziţia curentă $x$:+  * **Algoritmul de generare a mişcării sinusoidale**:​ Pentru a obţine traiectoria curbată şi fluidă a inamicilor ​pe axa Y, s-a implementat o ecuaţie de oscilaţie armonică bazată pe funcţia trigonometrică "​sin()",​ unde poziţia finală $y$ este calculată dinamic în funcţie de poziţia curentă $x$:
   $$y = baseY + \sin(x \times 0.15) \times 8$$   $$y = baseY + \sin(x \times 0.15) \times 8$$
    
Line 129: Line 131:
  
 Rezultatul final este o mini-consolă handheld construită pe un breadboard, cu un design compact. Ecranul, butonul și placa Arduino Nano sunt perfect integrate, singurele elemente care "ies în afară"​ fiind cablul USB și joystick-ul. Pe această platformă rulează un joc arcade, interactiv și suficient de provocator. Rezultatul final este o mini-consolă handheld construită pe un breadboard, cu un design compact. Ecranul, butonul și placa Arduino Nano sunt perfect integrate, singurele elemente care "ies în afară"​ fiind cablul USB și joystick-ul. Pe această platformă rulează un joc arcade, interactiv și suficient de provocator.
 +
 +Link video: https://​youtu.be/​wmc5tNVgK2Y?​si=Ei97VLyqL2z5He_Q
  
 ===== Concluzii ===== ===== Concluzii =====
Line 134: Line 138:
 Implementarea hardware m-a provocat să mă gândesc mult mai bine la organizarea componentelor pe placă. Cu această ocazie, am învățat să folosesc letconul, fiind necesar să lipesc un header de pini pentru ecranul LCD. De asemenea, am tăiat și am dezizolat firele la dimensiuni cât mai mici pentru a obține o lizibilitate mai mare a circuitului,​ lucru care a făcut consola mult mai ușor de utilizat. Implementarea hardware m-a provocat să mă gândesc mult mai bine la organizarea componentelor pe placă. Cu această ocazie, am învățat să folosesc letconul, fiind necesar să lipesc un header de pini pentru ecranul LCD. De asemenea, am tăiat și am dezizolat firele la dimensiuni cât mai mici pentru a obține o lizibilitate mai mare a circuitului,​ lucru care a făcut consola mult mai ușor de utilizat.
  
-Partea software mi-a plăcut în mod deosebit deoarece am văzut ce înseamnă să programezi un joc de la zero pe un microcontroler și pe un ecran mic, de 128x128 pixeli. Librăriile utilizate au fost de mare ajutor pentru definirea și redarea elementelor grafice, oferind multe funcționalități de bază. Pe parcursul proiectului s-a resimțit destul de tare memoria limitată a microcontrolerului ATmega328P, ​codul final ocupând ​~47% din memoria FLASH și ~17% din memoria RAM.+Partea software mi-a plăcut în mod deosebit deoarece am văzut ce înseamnă să programezi un joc de la zero pe un microcontroler și pe un ecran mic, de 128x128 pixeli. Librăriile utilizate au fost de mare ajutor pentru definirea și redarea elementelor grafice, oferind multe funcționalități de bază. Pe parcursul proiectului s-a resimțit destul de tare memoria limitată a microcontrolerului ATmega328P, ​fiind necesar sa gestionez resursele cu atenție. Codul final ocupă ​~47% din memoria FLASH și ~17% din memoria RAM.
  
 În final, consider că am reușit să obțin un proiect complet, care mi-a dezvoltat atât abilitățile practice, cât și cele de programare. În final, consider că am reușit să obțin un proiect complet, care mi-a dezvoltat atât abilitățile practice, cât și cele de programare.
Line 140: Line 144:
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Link Githubhttps://github.com/AlexStoianACS/Micro-Invaders
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, 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 ===== +
- +
-<​note>​ +
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +
-</​note>​+
  
 <​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/prj2026/ciprian.popescu0411/alexandru.stoian05.1779170135.txt.gz · Last modified: 2026/05/19 08:55 by alexandru.stoian05
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