PAC-MAN
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, ș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.
Funcționalități cheie
Control precis al graficii 2D pe un display monocrom cu animații fluide
Reglaj de viteză în timp real prin potențiometru analogic pentru ajustarea dificultății
Salvare / încărcare automată a progresului jocului pe card microSD
Feedback vizual prin LED RGB, în funcție de starea jocului (victorie / eșec / imunitate)
Efecte sonore pentru acțiuni (power-up, game over, victorie)
4 nivele progresive cu complexitate crescută (capcane, following ghost, power-ups)
Sistem de imunitate temporară cu efecte vizuale speciale (LED RGB Blue pe PWM)
Descriere generală
Consola este alcătuită dintr-un modul principal Arduino Uno R3 (ATmega328P), un display OLED 128×64 I2C (SSD1306), un LED RGB pentru feedback vizual, 5 butoane tactile pentru controlul jocului, un buzzer pentru efecte sonore și un potențiometru pentru ajustarea vitezei. De asemenea, include un modul SD card conectat prin SPI pentru salvarea automată a progresului. Toate componentele sunt montate pe breadboard pentru testare rapidă, apoi pe o placă de prototipare. Alimentarea se face fie prin USB, fie printr-o baterie de 9V conectată la Arduino printr-un suport cu jack (OKY0259).
Hardware Design
Componente:
Arduino Uno R3 (ATmega328P)
Display OLED 128×64 I2C (SSD1306)
LED RGB (anod comun)
Rezistențe 220Ω
Butoane tactil
Rezistențe 10kΩ (pentru pull-down la butoane)
Breadboard (plăcuță de test)
Placă prototipare 7×9
Cabluri Dupont m-m
Cablu USB A-B
Modul Card SD (SPI)
Card microSD + adaptor SD
Potențiometru 10kΩ
Rezistență 10kΩ (pentru potentiometru)
Suport baterie 9V cu conector DC (OKY0259)
Baterie 9V
Protocoale și Interfețe Hardware:
GPIO
Timere / PWM
ADC
SPI
Utilizat pentru comunicarea cu modulul microSD; interfață rapidă, full-duplex, pe patru linii principale (MOSI, MISO, SCK, CS)
I2C
Bill of Materials (BOM)
Componentă | Tip | Protocol | Cantitate | Link / Specificații |
Arduino UNO R3 | Controller | - | 1 | datasheet |
Buton (Sus - D2) | Input | GPIO | 1 | link-piesa |
Buton (Jos - D3) | Input | GPIO | 1 | link-piesa |
Buton (Stânga - D4) | Input | GPIO | 1 | link-piesa |
Buton (Dreapta - D5) | Input | GPIO | 1 | link-piesa |
Buton (Shoot - D6) | Input | GPIO | 1 | link-piesa |
OLED Display 128 x 64 | Output | I2C | 1 | link-piesa |
RGB LED (anod comun) | Output | GPIO / PWM | 1 | link-piesa |
Potențiometru (10kΩ) | Input | ADC | 1 | link-piesa |
Buzzer (pe A1) | Output | GPIO | 1 | link-piesa |
Card SD + Modul | I/O | SPI | 1 | link-piesa |
Breadboard 170 puncte | - | - | 1 | link-piesa |
Placă prototipare 7×9 | - | - | 1 | link-piesa |
Suport baterie 9V | - | - | 1 | link-piesa |
Rezistență 220Ω - LED | - | - | 3 | - |
Rezistență 10kΩ - butoane | - | - | 5 | - |
Schemă Electrică
Descriere Detaliată
Cele 5 butoane de control (sus, jos, stânga, dreapta, start / restart) sunt conectate pe pinii digitali D2–D6 cu rezistențe pull-up interne și sunt verificate constant pentru a controla jucătorul prin labirint
Potențiometrul este conectat pe pinul analogic A0 și este folosit pentru a regla viteza jocului (dificultatea), fiind citit prin ADC și mapată între valorile minime și maxime de delay
Potențiometrul este folosit de asemenea și ca seed pentru generarea punctelor aleator pe mapă
Display-ul OLED este conectat prin I2C folosind SDA (A4) și SCL (A5) pentru afișarea labirintului, jucătorului, punctelor, fantasmei și efectelor speciale
LED-ul RGB este conectat la D7 (roșu), D8 (verde), D9 (albastru), unde D7 și D8 sunt digitali, iar D9 este PWM pentru efecte de fading (game over roșu + pwm manual, victorie verde + pwm manual, imunitate albastru + pwm hardware)
Buzzer-ul este conectat la A1 și folosit pentru generarea de sunete cu frecvențe diferite (power-up, game over, victory)
Cardul SD este conectat prin SPI folosind pinii standard: MISO (D12), MOSI (D11), SCK (D13) și CS (D10) pentru salvarea automată și încărcarea progresului jocului la restart
Caracteristici Advanced ale Jocului
Nivelul 1: Labirint basic cu 9 puncte de colectat
Nivelul 2: Introducerea capcanelor
Nivelul 3: Adăugarea unei fantome simple care urmărește jucătorul
Nivelul 4: Nivel complet cu fantoma, power-up special pentru imunitate temporară de 5 secunde (protecție împotriva fantomei)
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
Audio Feedback: Sunete distincte pentru fiecare acțiune (power-up, game over, win, dot collection)
Tabel Conexiuni Componente
Componentă | Pin Arduino | Funcție |
Buton Sus | D2 | Control joc – mișcare sus (digital input) |
Buton Jos | D3 | Control joc – mișcare jos (digital input) |
Buton Stânga | D4 | Control joc – mișcare stânga (digital input) |
Buton Dreapta | D5 | Control joc – mișcare dreapta (digital input) |
Buton Shoot | D6 | Declanșare împușcare (digital input) |
Potențiometru | A0 | Reglare dificultate – citire analogică (ADC) |
Display OLED | A4 (SDA), A5 (SCL) | Afișaj stare joc |
LED RGB - Roșu | D7 | Feedback – stare eșec (digital output) |
LED RGB - Verde | D8 | Feedback – stare victorie (digital output) |
LED RGB - Albastru | D9 (PWM) | Feedback – efecte fading (PWM output) |
Buzzer | A1 | Sunete joc (digital output) |
SD Card – MISO | D12 | Citire date (SPI) |
SD Card – MOSI | D11 | Scriere date (SPI) |
SD Card – SCK | D13 | Ceas SPI |
SD Card – CS | D10 | Chip Select pentru SD (SPI) |
Imagini Sugestive Implementare Hardware
Software Design
Mediu de dezvoltare
Librării și surse 3rd-party
Componente hardware utilizate
Algoritmi și structuri implementate
Efecte imunitate:
Condiții de terminare:
Funcții și comportamente principale
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
loop()
Monitorizează inputul de la butoane pentru mișcarea jucătorului
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
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ă
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
isImmunityActive()
playPowerUpSound(), playGameOverSound(), playWinSound(), playDotSound()
Funcționalități speciale
Controlul vitezei jocului printr-un potentiometru (analog A0), adaptând delay-ul de mișcare.
Feedback vizual și audio complet:
Extindere modulară pentru niveluri multiple (până la 4), fiecare cu logică specifică.
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
Rezultate Obţinute
În urma realizării proiectului am reușit următoarele milestone-uri:
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
Software:
4 niveluri progresive din punct de vedere al dificultății
Semnale vizuale și sonore prin LED, respectiv 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
Concluzie
Î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”.
Bibliografie/Resurse