RetroPixel Game Hub

Introducere

RetroPixel Game Hub aduce la viață o mică consolă de jocuri retro pe baza platformei Arduino UNO, combinând jocuri clasice de logică și reflexe într-o singură interfață vizuală minimalistă: o matrice LED 8×8. Ideea pornește din dorința de a valorifica puterea Arduino în scopuri creative și recreative, oferind utilizatorului o experiență interactivă și nostalgică, cu o interfață simplă și ușor de folosit.

Utilizatorul poate naviga printr-un meniu intuitiv și poate selecta dintre mai multe jocuri:

•	Snake – versiunea clasică, în care șarpele trebuie să mănânce și să evite coliziunile.
•	Avoid Falling Lines – un joc de reflexe, unde trebuie să te ferești de linii verticale care cad.
•	Memory Game – un joc de memorie vizuală, unde utilizatorul trebuie să reproducă o secvență de lumini.

Descriere generală

Proiectul meu este dezvoltat pe o placă de dezvoltare Arduino UNO și are ca scop crearea unei mini-consolă retro, care integrează mai multe jocuri într-o singură interfață hardware.

Interfața vizuală principală este o matrice LED 8×8, care oferă o reprezentare minimalistă, dar eficientă, a fiecărui joc în parte. Jocurile sunt selectabile dintr-un meniu afișat separat pe un ecran LCD (tip 16×2), care este controlat de către utilizator prin intermediul a patru butoane dedicate: sus, jos, select și înapoi. Această abordare permite o interacțiune intuitivă și o separare clară între funcțiile de navigare și cele de joc propriu-zis.

Jocurile incluse în această mini-consolă sunt:

•	Snake – versiunea clasică, în care jucătorul controlează un șarpe și încearcă să mănânce hrană pentru a crește, evitând coliziunile cu propriul corp. Matricea LED afișează în timp real mișcările șarpelui, iar joystickul permite controlul acestuia în patru direcții. Dacă șarpele iese de pe o margine, el reapare pe partea opusă a ecranului, ceea ce adaugă un plus de dinamică jocului.
•	Avoid Falling Lines – un joc de reflexe rapide, în care jucătorul controlează un punct care trebuie să se ferească de linii verticale care „cad” din partea de sus a matricei. Scopul este de a evita cât mai multe linii consecutive, crescând scorul odată cu fiecare evitare reușită. Jocul devine treptat mai dificil, pe măsură ce viteza liniilor crește.
•	Memory Game – un joc de memorie vizuală, în care utilizatorul trebuie să reproducă corect o secvență luminoasă afișată pe matrice. La fiecare rundă, secvența devine mai lungă și mai complexă. Dacă utilizatorul greșește ordinea, jocul se termină și scorul este afișat.

Pe lângă interacțiunea vizuală, proiectul include posibilitatea de a salva scoruri sau de a accesa configurații dintr-un modul SD card.

Un alt aspect important este feedback-ul audio. Un buzzer conectat la placă oferă sunete caracteristice pentru fiecare acțiune importantă: selecția din meniu, atingerea unui obstacol, reușita sau eșecul în jocuri. Acest element contribuie la crearea unei atmosfere de tip arcade.

Prin combinarea unui meniu clar și a mai multor jocuri dinamice, proiectul reușește să aducă împreună atât partea de dezvoltare software (cod Arduino structurat pe stări), cât și hardware (conectivitate între componente multiple), devenind astfel un exemplu complet de proiect integrat, ideal pentru învățare și divertisment.

Hardware Design

Listă piese

Schemă bloc

Circuit Design

Hardware

https://youtu.be/KvNT7M_AtZ0

Din păcate, LCD-ul pe care l-am primit nu funcționează, așa că am comandat altul…

Descriere Hardware

  • placă de dezvoltare compatibilă cu Arduino UNO R3:
•	5V (folosit pentru alimentarea componentelor care necesită tensiune constantă)
•	GND (comun tuturor componentelor, asigurând referința de tensiune)
  • LCD 16×2 (cu modul I2C): display pentru afișarea meniului
•	SDA (Serial Data) -> A4
•	    - linia de date pentru protocolul I2C (permite transferul datelor între Arduino și LCD)
•	SCL (Serial Clock) -> A5:
•	    - linia de ceas pentru transmiterea sincronizată a datelor între dispozitivele I2C
  • 4 x (push-button + rezistență): implementarea de comenzi pentru meniu
•	conexiune la pini digitali (D4-D7):
•	    - folosiți pentru a detecta apăsările de butoane
•	folosire de rezistențe 10kΩ:
•	    - folosite ca pull-down pentru a menține starea LOW în absența apăsării
  • matrice LED 8×8 (cu modul MAX7219): display pentru afișarea interfeței în timpul jocurilor
•	CS (Chip Select) -> D8:
•	    - activează comunicarea SPI pentru matricea LED
•	CLK (Clock) -> D9:
•	    - linia de ceas pentru transmiterea sincronizată a datelor
•	DIN (Data In) -> D10:
•	    - linie de date pentru trimiterea comenzilor către matrice
  • joystick (cu buton inclus): controlul mișcării și acțiunilor în jocuri
•	VRx -> A0 și VRy -> A1:
•	    - citirea valorilor analogice de la potențiometrele din joystick
•	    - returnează valori între 0 și 1023, corespunzând deplasării pe axe
•	SW -> D2:
•	    - detectează apăsarea butonului joystick-ului (HIGH/LOW)
  • SD Card Reader: SD Card-ul este folosit pentru stocarea fișierelor și datelor de joc
•	CS (Chip Select) - D3:
•	    - activează comunicarea SPI pentru SD Card
•	MOSI (Master Out Slave In) -> D11:
•	    - se transmit date de la Arduino la modulul SD
•	MISO (Master In Slave Out) -> D12:
•	    - se transmit date de la modulul SD la Arduino
•	SCK (Serial Clock) -> D13:
•	    - linia de ceas pentru transmiterea sincronizată a datelor
  • buzzer: sunete de fundal și avertizare sonoră pentru acțiuni în jocuri
•	conexiune la pin analogic (A3):
•	    - controlul sunetului prin generarea de tonuri cu funcția tone() din Arduino

Software Design

Mediu de Dezvolate: Arduino IDE

Elemente de noutate al proiectului

Proiectul RetroPixel Game Hub se remarcă prin realizarea unei unități modulare de tip consolă retro, care oferă o experiență completă de joc într-un format compact și extensibil.

Principalele puncte de interes ale proiectului meu sunt:

•	integrarea coerentă a mai multor componente hardware într-un sistem unitar: ecran LCD pentru meniu și scor, matrice LED pentru gameplay, butoane și joystick pentru control, buzzer pentru sunete
•	separarea clară a funcționalităților între interfața informativă - meniul (LCD) și mediul de joc (matrice LED), pentru o experiență fluentă și intuitivă
•	suită de 3 jocuri, dintre care jucătorul alege pe care dorește să îl joace
•	arhitectură software modulară, ce permite adăugarea rapidă de jocuri și funcționalități suplimentare fără a modifica structura de bază
•	combinație de stil retro și funcționalități moderne

Bibliotecile folosite în cadrul proiectului

În cadrul proiectului meu, am folosit următoarele biblioteci:

•	#include <LiquidCrystal_I2C.h> - oferă o interfață ușor de folosit pentru controlul unui ecran LCD cu interfață I2C (folosită pentru a realiza interfața informativă - meniul)
•	#include <LedControl.h> - oferă o interfață ușor de folosit pentru controlul matricei LED 8x8 bazată pe MAX7219, permițând chiar controlul individual al fiecărui LED din matrice (folosită pentru a realiza mediul de joc)
•	#include <SPI.h> - oferă utilitate pentru comunicare prin protocolul SPI (folosită în comunicarea cu SD card)
•	#include <SD.h> - oferă utilitate în manipularea fișierelor de pe SD card (folosită pentru salvarea de date pe SD card)

Utilizarea laboratoarelor în cadrul proiectului

* Laboratorul 0

•	am folosit Serial.begin(9600) pentru a inițializa comunicarea serială
•	am utilizat Serial.print() pentru a verifica inițializarea componentelor externe (LCD, matrice LED, SD card), și pentru a testa valorile de la butoane și joystick

* Laboratorul 1

•	am configurat pinii butoanelor (inclusiv cel al joystick-ului) și buzzer-ului cu pinMode() (INPUT / OUTPUT)
•	am citit stările pinilor butoanelor (inclusiv cel al joystick-ului) cu digitalRead() pentru navigarea prin meniu și controlul în jocuri

* Laboratorul 3

•	am folosit tone(pin, frecvență) pentru a genera sunete în meniu și în timpul jocurilor

* Laboratorul 4

•	am citit pozițiile joystick-ului cu analogRead() pe axe X și Y, apoi am comparat valorile cu praguri pentru a detecta direcția mișcării în timpul jocurilor

* Laboratorul 5

•	am folosit un SD card pentru salvarea highscore-ului pentru fiecare joc

* Laboratorul 6

•	am utilizat biblioteca LiquidCrystal_I2C.h pentru controlul ecranului LCD 16x2 cu modul I2C
•	am realizat afișările pentru meniu și scor cu lcd.setCursor() și lcd.print()

Scheletul proiectului

Proiectul RetroPixel Game Hub este structurat modular, pentru a integra toate funcționalitățile specifice unei mini-console retro:

•	interfața informativă (meniul), afișată pe LCD 16x2 I2C - permite alegerea între 3 jocuri (Snake Game, Avoid Falling Lines Game, Memory Game)
•	controlul în cadrul interfeței informative, realizat prin 4 butoane - permite deplasarea printre jocurile disponibile, selectarea unui joc, și întoarcerea la meniu (în cazul în care am pornit un joc)
•	mediul de joc, afișat pe o matrice LED MAX7219 8x8
•	controlul în cadrul mediului de joc, realizat prin joystick - permite mișcările acceptate în funcție de joc
•	feedback sonor, realizat cu ajutorul buzzer-ului
•	mediu de stocare, SD card - permite salvarea highscore-urilor pentru fiecare joc disponibil

Testarea validității interacțiunilor dintre componente s-a realizat pe parcursul dezvoltării software-ului, prin diverse simulări simple de test.

Rezultate Obţinute

Concluzii

Dezvoltarea proiectului RetroPixel Game Hub a fost o experiență foarte distractivă și educativă. Mi-a plăcut să combin joaca cu învățarea și să văd cum prind viață ideile mele, pas cu pas. Am învățat multe lucruri noi și m-am bucurat de fiecare etapă — de la conectarea componentelor până la scrierea codului și testarea jocurilor.

A fost o provocare plăcută care mi-a arătat cât de mult se poate realiza cu răbdare, creativitate și puțină pasiune pentru tehnologie.

Download

Software-ul este disponibil aici: https://github.com/RazvanSerb/RetroPixel-Game-Hub

Jurnal

06.05.2025 - am creat pagina si am adăugat descrierea generală a proiectului

09.05.2025 - am realizat design-ul circuitului

09.05.2025 - am comandat toate piesele necesare proiectului

12.05.2025 - am asamblat hardware-ul și am testat funcționalitatea pieselor

12.05.2025 - am comandat piesele care necesitau înlocuire

16.05.2025 - am început dezvoltarea software-ului

20.05.2025 - am obținut un software valid

24.05.2025 - am stilizat hardware-ul și am integrat software-ul, obținând un produs finit

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/avaduva/razvan_gabriel.serb.txt · Last modified: 2025/05/28 13:36 by razvan_gabriel.serb
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