Differences

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

Link to this comparison view

pm:prj2025:apredescu:florian.ariasu [2025/05/25 21:29]
florian.ariasu
pm:prj2025:apredescu:florian.ariasu [2025/05/28 11:25] (current)
florian.ariasu
Line 3: Line 3:
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul „**PAC-MAN Portable**"​ constă în realizarea unei mini-console portabile de joc, inspirată de titlul clasic PAC-MAN, implementată pe platforma Arduino Uno R3 (ATmega328P). Sistemul îmbină mai multe componente hardware și software, oferind funcționalități integrate precum afișare grafică pe display OLED, interacțiune prin butoane fizice, reglaj de viteză prin potențiometru,​ feedback vizual prin LED RGB, efecte sonore prin buzzer ​și salvarea progresului pe un card microSD.+Proiectul „**PAC-MAN Portable**"​ constă în realizarea unei mini-console portabile de joc, inspirată de titlul clasic PAC-MAN, implementată pe platforma Arduino Uno R3 (ATmega328P). Sistemul îmbină mai multe componente hardware și software, oferind funcționalități integrate precum afișare grafică pe display OLED, interacțiune prin butoane fizice, reglaj de viteză prin potențiometru,​ feedback vizual prin LED RGB, și efecte sonore prin buzzer.
  
 Acest proiect are rolul de a demonstra integrarea și utilizarea eficientă a diferitelor interfețe hardware și protocoale de comunicație serială, fiind totodată un exemplu aplicat de dezvoltare embedded cu funcționalități avansate de joc. Acest proiect are rolul de a demonstra integrarea și utilizarea eficientă a diferitelor interfețe hardware și protocoale de comunicație serială, fiind totodată un exemplu aplicat de dezvoltare embedded cu funcționalități avansate de joc.
Line 16: Line 16:
   * 4 nivele progresive cu complexitate crescută (capcane, following ghost, power-ups)   * 4 nivele progresive cu complexitate crescută (capcane, following ghost, power-ups)
   * Sistem de imunitate temporară cu efecte vizuale speciale (LED RGB Blue pe PWM)   * Sistem de imunitate temporară cu efecte vizuale speciale (LED RGB Blue pe PWM)
-  * Debugging și testare prin comunicație serială UART, utilizând Serial Monitor din Arduino IDE 
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 47: Line 46:
   - GPIO   - GPIO
     * Utilizat pentru citirea butoanelor și controlul LED-urilor     * Utilizat pentru citirea butoanelor și controlul LED-urilor
-  - UART 
-    * Serial Monitor (debugging + transmitere scoruri / loguri prin USB către PC) 
   - Timere / PWM   - Timere / PWM
     * Utilizat pentru controlul intensității culorilor LED-ului RGB prin generarea de semnal digital cu factor de umplere variabil     * Utilizat pentru controlul intensității culorilor LED-ului RGB prin generarea de semnal digital cu factor de umplere variabil
Line 97: Line 94:
   * **Sistem de Salvare**: Progresul se salvează automat la fiecare mișcare, permițând continuarea jocului după restart   * **Sistem de Salvare**: Progresul se salvează automat la fiecare mișcare, permițând continuarea jocului după restart
   * **Efecte Vizuale**: Jucătorul pulsează când are imunitate, LED-ul albastru face efecte de fading   * **Efecte Vizuale**: Jucătorul pulsează când are imunitate, LED-ul albastru face efecte de fading
-  * **Audio Feedback**: Sunete distincte pentru fiecare acțiune (power-up, game over, victorie)+  * **Audio Feedback**: Sunete distincte pentru fiecare acțiune (power-up, game over, win, dot collection)
  
  
Line 131: Line 128:
 ===== Software Design ===== ===== Software Design =====
  
-Mediu de dezvoltare +==== Mediu de dezvoltare ​====
-Arduino IDE+
  
 +  * **Arduino IDE**
   * Platformă de dezvoltare compatibilă cu Arduino UNO (ATmega328P),​ utilizată pentru scrierea, compilarea și încărcarea codului în microcontroler.   * Platformă de dezvoltare compatibilă cu Arduino UNO (ATmega328P),​ utilizată pentru scrierea, compilarea și încărcarea codului în microcontroler.
  
-Librării și surse 3rd-party +==== Librării și surse 3rd-party ​====
-Adafruit_GFX.h – librărie grafică utilizată pentru desenarea formelor și simbolurilor pe ecrane OLED.+
  
-Adafruit_SSD1306.h – driver ​pentru ​afișajele OLED cu controller SSD1306 (comunicare I2C).+  * **Adafruit_GFX.h** – librărie grafică utilizată ​pentru ​desenarea formelor ​și simbolurilor pe ecrane ​OLED.
  
-SPI.h, Wire.h – librării standard ​pentru ​comunicația SPI șI2C.+  * **Adafruit_SSD1306.h** – driver ​pentru ​afișajele OLED cu controller SSD1306 (comunicare ​I2C).
  
 +  * **Wire.h** – librărie standard pentru comunicarea I2C.
   * Toate librăriile sunt disponibile prin Library Manager în Arduino IDE sau deja incluse implicit în cazul SPI/Wire.   * Toate librăriile sunt disponibile prin Library Manager în Arduino IDE sau deja incluse implicit în cazul SPI/Wire.
  
-Componente hardware utilizate +==== Componente hardware utilizate ​====
-Display OLED 128x64 (conectat prin I2C la pinii A4 – SDA, A5 – SCL)+
  
-5 Butoane pentru control direcțional și acțiune ​(pini D2D6)+  * **Display OLED 128x64** ​(conectat prin I2C pe pinii A4 – SDA, A5 – SCL)
  
-Potentiometru ​pentru ​controlul vitezei jocului ​(A0)+  * **5 Butoane** ​pentru ​control direcțional și acțiune ​(pini D2–D6)
  
-LED RGB pentru ​feedback vizual ​(pini D7 – roșu, D8 – verde, D9 – albastru, PWM)+  * **Potentiometru** ​pentru ​controlul vitezei jocului ​(A0)
  
-Buzzer ​pentru ​semnale audio (pin A1)+  * **LED RGB** pentru ​feedback vizual ​(pini D7 – roșu, D8 – verde, D9 – albastru, PWM)
  
-  * Algoritmi și structuri implementate +  * **Buzzer** pentru semnale audio (pin A1)
-Harta jocului este definită sub formă de matrice 2D (wallsMap), cu dimensiuni 16x8.+
  
-La începutul fiecărui nivelse generează puncte de colectat (DOT-uri) aleator pe poziții libere.+  * **Modul SD Card** conectat prin SPI pe pinii MISO - D12MOSI D11, SCK - D13, CS - D10
  
-Jucătorul este reprezentat de un cerc desenat pe ecran, care se deplasează în funcție de inputul de la butoane.+==== Algoritmi și structuri implementate ====
  
-Un "​fantomă" ​(ghostapare în nivelurile 3 și 4deplasându-se pentru a urmări jucătorul.+  * **Harta jocului** este definită sub formă de matrice 2D (wallsMap), cu dimensiuni 16x8.
  
-În nivelul 4, este introdus un tile special de tip power-upcare activează imunitatea temporară (5 secunde).+  * **Generarea punctelor** ​La începutul fiecărui nivelse generează puncte de colectat ​(DOT-urialeator pe poziții libere.
  
-Cât timp imunitatea ​este activă:+  * **Reprezentarea jucătorului** - Jucătorul ​este reprezentat de un cerc desenat pe ecran, care se deplasează în funcție de inputul de la butoane.
  
-Fantoma nu mai produce Game Over la coliziune.+  * **Sistemul fantomei** - O fantomă apare în nivelurile 3 și 4, deplasându-se pentru a urmări jucătorul.
  
-LED-ul albastru pulsează.+  * **Power-up și imunitate** - La nivelul 4, este introdus un tile special de tip power-up, care activează imunitatea temporară (5 secunde) în care fantoma este de asemenea înghețată.
  
-Jucătorul are o animație grafică specială.+**Efecte imunitate:​** 
 +  * Fantoma nu mai produce Game Over la coliziune 
 +  * Fantoma este înghețată 
 +  * LED-ul albastru pulsează 
 +  * Jucătorul are o animație grafică specială
  
-Jocul se termină în două moduri:+**Condiții de terminare:​** 
 +  * **Victorie**:​ Toate DOT-urile au fost colectate (LED verde + sunet de victorie) 
 +  * **Game Over**: Jucătorul este prins de fantomă sau calcă într-o capcană (LED roșu + sunet specific)
  
-Victorie: Toate DOT-urile au fost colectate (LED verde + sunet de victorie)+==== Funcții și comportamente principale ====
  
-Game Over: Jucătorul este prins de fantomă sau calcă într-o capcană (LED roșu + sunet specific)+=== setup() === 
 +  * Inițializează comunicațiile I2C și seriale 
 +  * Inițializează display-ul OLED și LED-urile 
 +  * Configurează pinii pentru butoane ​și buzzer 
 +  * Afișează ecranul de Start
  
-  ​Funcții ​și comportamente principale +=== loop() === 
-setup() +  ​Monitorizează inputul de la butoane pentru mișcarea jucătorului 
-Inițializează comunicațiile I2C și seriale.+  * Actualizează poziția fantomei ​(dacă este activă
 +  * Verifică coliziunile:​ cu pereți, puncte, capcane, fantome 
 +  * Desenează constant harta actualizată ​și toate elementele vizuale 
 +  * Activează și dezactivează automat imunitatea în funcție de timp 
 +  * Controlează LED-urile în funcție de starea jocului 
 +  * Generează efecte audio prin buzzer pentru evenimentele importante
  
-Inițializează display-ul OLED și LED-urile.+=== generateDots(uint8_t count) === 
 +  * Populează harta cu un număr de puncte colectabile 
 +  * Adaugă capcane ​și fantoma în nivelurile superioare 
 +  * În nivelul 4, adaugă un tile power-up într-o poziție fixă
  
-Configurează pinii pentru butoane ​și buzzer.+=== drawTile(), drawPlayer(),​ drawGhost() === 
 +  * Redau grafic elementele jocului pe OLED: pereți, puncte, capcane, power-up, jucător, fantomă 
 +  * Jucătorul primește o animație specială în timpul imunității
  
-Afișează ecranul ​de Start.+=== isImmunityActive() === 
 +  * Returnează true dacă jucătorul este încă în perioada ​de imunitate 
 +  * Dezactivează automat imunitatea după 5 secunde și oprește LED-ul albastru
  
-loop() +=== playPowerUpSound(), playGameOverSound(),​ playWinSound(),​ playDotSound() === 
-Monitorizează inputul ​de la butoane pentru mișcarea jucătorului.+  * Emit tonuri sonore diferite prin buzzer în funcție ​de evenimentul declanșat
  
-Actualizează poziția fantomei (dacă este activă).+==== Funcționalități speciale ====
  
-Verifică coliziunile:​ cu perețipuncte, capcane, fantome.+**Controlul vitezei** jocului printr-un potentiometru (analog A0)adaptând delay-ul de mișcare.
  
-Desenează constant harta actualizată ​și toate elementele vizuale.+**Feedback vizual ​și audio complet:​** 
 +  * LED verde: câștig 
 +  * LED roșu: pierdere ​  
 +  * LED albastru: imunitate 
 +  * Buzzer: notificări sonore
  
-Activează și dezactivează automat imunitatea în funcție de timp.+**Extindere modulară** pentru niveluri multiple (până la 4), fiecare cu logică specifică.
  
-Controlează LED-urile în funcție de starea ​jocului.+Descrierea codului aplicației (firmware):​ 
 +  * **Mediu de dezvoltare**:​ Arduino IDE 
 +  * **Librării și surse 3rd-party**: Adafruit_GFX,​ Adafruit_SSD1306,​ SPI, Wire 
 +  * **Algoritmi și structuri implementate**:​ Matrice 2D pentru hartă, algoritm de urmărire pentru fantomă, sistem de imunitate temporară, generare aleatoare de puncte 
 +  * **Surse și funcții implementate**:​ Gestionare completă a jocului ​cu 4 nivele progresive, sistem de feedback vizual / audio, control prin butoane și potențiometru
  
-Generează efecte audio prin buzzer pentru evenimentele importante.+===== Rezultate Obţinute =====
  
-generateDots(uint8_t count) +În urma realizării proiectului am reușit următoarele milestone-uri:​
-Populează harta cu un număr de puncte colectabile.+
  
-Adaugă capcane ​și fantoma în nivelurile superioare.+  * **Hardware**:​ 
 +      * Butoane conectate corect și funcționale 
 +      * Display OLED conectat corespunzător și funcțional,​ atât că am conectat pe un breadboard, ulterior, din cauza unor mici probleme cu placa de prototipare 
 +      * Buzzer funcțional 
 +      * Potențiometru funcțional 
 +      * LED RGB anod comun funcțional ​și cu PWM pe albastru 
 +      * Modul Card SD conectat corect
  
-În nivelul ​4, adaugă un tile power-up într-o poziție fixă.+  * **Software**:​ 
 +     ​* ​niveluri progresive din punct de vedere al dificultății 
 +     * Semnale vizuale și sonore prin LEDrespectiv buzzer, pentru câștig, pierdere și activarea funcției de imunitate 
 +     * Viteză ajustabilă prin potențiometru în funcție de nivel 
 +     * Efect vizual pe OLED al jucătorului cât timp se află sub protecția imunității 
 +     * Modulul SD Card nu a fost implementat
  
-drawTile(), drawPlayer(),​ drawGhost() +===== Concluzie =====
-Redau grafic elementele jocului pe OLED: pereți, puncte, capcane, power-up, jucător, fantomă.+
  
-Jucătorul primește o animație specială în timpul ​imunității.+În concluzie, am încercat să fac acest joc cât mai interactiv, de aceea am folosit ​și funcția de imunitate la nivelul 4 astfel încât jucătorul să retrăiască adrenalina jocului clasic pac-man. Am adăugat diverse efecte vizuale / audio astfel încât jocul să îi țină pe cei care îl încearcă cât se poate de captivați și dornici să îl termine. Totodată nu am optat pentru foarte multe niveluri, astfel încât să nu intervină monotonia, ci am mers pe 4 niveluri, care cresc gradual ca dificultate,​ iar finalul reprezintă un apogeu după suspansul avut cât timp jucătorul se află sub efectul ​imunității. Acesta este proiectul implementat,​ denumit "​**PAC-MAN Portable**"​.
  
-isImmunityActive() +===== Bibliografie/​Resurse =====
-Returnează true dacă jucătorul este încă în perioada de imunitate.+
  
-Dezactivează automat imunitatea după 5 secunde și oprește LED-ul albastru.+**Resurse Hardware**
  
-playPowerUpSound(),​ playGameOverSound(),​ playWinSound() +  * [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]] 
-Emit tonuri sonore diferite prin buzzer în funcție ​de evenimentul declanșat.+  
 +  * [[https://​www.robofun.ro/​platforme-de-dezvoltare/​arduino-uno-r3-atmega328p-placa-de-dezvoltare-compatibila-cu-arduino-cablu-usb.html|Placa Arduino UNO R3]]
  
-  * Funcționalități speciale +  * [[https://​www.emag.ro/​modul-citire-scriere-card-sd-compatibil-arduino-oky3001/​pd/​DL5Y07MBM/​|Modul microSD]]
-Controlul vitezei jocului printr-un potentiometru (analog A0), adaptând delay-ul de mișcare.+
  
-Feedback vizual și audio complet:+  * [[https://​www.emag.ro/​card-de-memorie-goodram-microsd-2gb-sdu2ggrsr-microsd/​pd/​E9T63BBBM/?​ref=history-shopping_424527401_24434_1|Card microSD]]
  
-LED verdecâștig+  * [[https://​www.emag.ro/​afisaj-oled-alb-0-96-inch-rezolutie-128x64-pixeli-i2c-spi-tensiune-3-5v-controler-ssd1306-compatibil-cu-arduino-stm32-msp430-dimensiuni-27x27x4mm-lizibilitate-excelenta-c3/​pd/​D767C1YBM/​|Display OLED]]
  
-LED roșu: pierdere+----
  
-LED albastru: imunitate+**Resurse Software**
  
-Buzzernotificări sonore+  * [[https://​www.arduino.cc/​en/​software|Arduino IDE]]
  
-Extindere modulară pentru niveluri multiple (până la 4), fiecare cu logică specifică.+  * [[https://​docs.arduino.cc/​language-reference/​en/​functions/​communication/​SPI/​|Librărie SPI.h]]
  
-  * Concluzie +  * [[https://docs.arduino.cc/hardware/uno-rev3/|Documentație Arduino UNO]]
-Proiectul integrează hardware divers cu logică de joc completă, gestionare de evenimente, animații grafice și feedback în timp real. Este un exemplu complex de utilizare a microcontrolerului Arduino UNO în jocuri embedded cu interfață interactivă. +
- +
-<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> +
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note> +
- +
-===== Concluzii ===== +
- +
-===== Download ===== +
- +
-<note warning>​ +
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etcUn 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/prj2025/apredescu/florian.ariasu.1748197780.txt.gz · Last modified: 2025/05/25 21:29 by florian.ariasu
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