This is an old revision of the document!


GameBoy

Introducere

  • Ce face: Proiectul nostru este un mini GameBoy bazat pe Arduino Nano, care poate rula jocuri clasice retro precum Tetris, Space Invaders și Super Mario. Acesta include un display, butoane pentru controlul direcției și a acțiunii, și un buzzer pentru sunet.

  • Scop: Recreaza experiența de joc a unui console portabil retro folosind hardware simplu și accesibil. Acesta este un proiect educativ care îmbină învățarea conceptelor de electronică și programare cu un rezultat fun și interactiv.

  • Inspiratie: Ideea a pornit de la dorința de a construi un mini-console de jocuri portabil fiind pasionat de jocuri retro si modificand console, astfel ca am decis ca ar fi interesat o consola mica custom.

  • Utilitate: Util pentru alții deoarece poate încuraja învățarea interactivă a electronicii și programării, iar pentru mine este o oportunitate de a aplica concepte teoretice într-un proiect practic.

Descriere generală

Microcontroler - Arduino Nano: Arduino Nano va acționa ca unitatea principală de control a întregului sistem. Acesta va gestiona inputurile de la butoane, va rula jocul și va controla afișajul OLED/TFT, iar prin intermediul unui buzzer va emite sunete.

Display OLED/TFT (SPI/I2C): Display-ul va fi folosit pentru a reda grafica jocurilor. Acesta va comunica cu Arduino prin SPI sau I2C, în funcție de tipul de display ales.

Butonul D-pad (4 direcții) și 2 butoane A/B: Butoanele vor fi folosite pentru a controla mișcarea (sus, jos, stânga, dreapta) și acțiunile în joc (ex: sări, trage).

Buzzer: Buzzer-ul va emite sunete pentru diverse evenimente din joc (ex: când se câștigă un nivel sau când apare o coliziune).

Card SD: Intr-o varianta de optimizare a fost atasat si un card SD in vederea incadrarii tuturor jocurilor in acelasi “cod”, fara reusita insa.

Codul jocurilor (Breakout, Space Invaders, Super Mario): Codul jocurilor va fi stocat în memoria flash a Arduino-ului și va interacționa cu hardware-ul pentru a genera jocuri interactive. Nivelele și grafica vor fi stocate în PROGMEM pentru a economisi memoria RAM.

Utilizatorul va putea selecta folosind butonul A jocul pe care il doresc si apoi va rula ca variantele originale.

Hardware Design

Aici puneţi tot ce ţine de hardware design:

  • listă de piese:

Lista de piese:

Arduino Nano (Microcontroler ATmega328P)

Port USB pentru alimentare și programare

Display OLED

Butoane tactile 6×6 mm (6 bucăți) / DPAD

4 butoane pentru direcții (sus, jos, stânga, dreapta)

2 butoane pentru acțiuni (A, B)

Buzzer de mică putere, care poate emite sunete simple pentru evenimentele din joc.

Rezistențe 10kΩ (6 bucăți)

Breadboard mare

Fire DuPont M-M

Fire pentru conectarea componentelor pe breadboard.

Carcasă imprimată 3D

Design personalizat pentru a încorpora toate piesele într-o formă compactă.

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (Arduino)
  • Voi analiza codul pentru a explica implementarea software a proiectului conform cerințelor. Mai întâi, să vedem ce fișiere avem în proiect.
  • 1. Stadiul Actual al Implementării Software

Proiectul este implementat ca un sistem de gaming portabil cu următoarele componente principale:

Meniu Principal (`menu/`): - Implementat folosind Arduino și un display OLED SSD1306 - Oferă o interfață grafică pentru selecția jocurilor - Include efecte sonore pentru feedback - Gestionează tranzițiile între diferite stări (boot, meniu, jocuri)

Cele Trei Jocuri: 1. Joc1 (Super Mario):

  1. Implementare 2D a unui joc de platformă
  2. Controlul personajului prin D-pad
  3. Sistem de coliziuni și fizică simplă

2. Joc2 (Space Invaders):

  1. Joc de tip shoot'em up
  2. Sistem de proiectile și inamici
  3. Sistem de scor

3. Joc3 (Breakout):

  1. Joc de tip arcade cu mingie și paletă
  2. Sistem de blocuri distructibile
  3. Fizică pentru mișcarea mingii

* 2. Biblioteci Folosite și Motivația Alegerii

1. Adafruit_GFX și Adafruit_SSD1306:

  1. Motivație: Oferă suport nativ pentru display-ul OLED
  2. Facilități: Funcții de desenare optimizate, suport pentru fonturi
  3. Performanță: Optimizată pentru microcontrolere

2. Wire.h:

  1. Motivație: Necesară pentru comunicarea I2C cu display-ul
  2. Facilități: Implementare standard pentru comunicare serială

* 3. Elementul de Noutate

Elementul de noutate al proiectului constă în: - Integrarea a trei jocuri clasice într-un singur sistem portabil - Implementarea unui meniu interactiv cu feedback sonor - Sistem de control unificat pentru toate jocurile - Adaptarea jocurilor pentru un display OLED de dimensiuni reduse

* 4. Utilizarea Funcționalităților din Laborator

Funcționalitățile din laborator sunt utilizate în următoarele moduri: 1. Controlul I/O:

  1. Utilizarea pinilor digitali pentru butoane
  2. Implementarea debouncing-ului pentru butoane

2. Comunicare Serială:

  1. Debugging prin Serial Monitor
  2. Comunicare I2C cu display-ul OLED

3. Gestionarea Muzica:

  1. Controlul buzzer-ului pentru efecte sonore cu PWM folosind tune()

* 5. Scheletul Proiectului și Interacțiunea

Arhitectura Software: 1. Sistem de Stări:

  1. STATE_BOOT: Secvența de pornire
  2. STATE_MENU: Meniul principal
  3. STATE_GAME1/2/3: Stările jocurilor

2. Interacțiunea între Componente:

  1. Meniul principal gestionează selecția jocurilor
  2. Fiecare joc poate reveni la meniu
  3. Sistem unificat de control pentru toate jocurile

3. Validarea Funcționalităților:

  1. Testarea butoanelor prin `test_dpad/`
  2. Verificarea display-ului în secvența de boot
  3. Testarea tranzițiilor între stări
  4. Validarea sistemului de scor și a coliziunilor în fiecare joc

* Concluzie

Proiectul demonstrează o implementare software robustă care integrează multiple jocuri într-un sistem portabil. Arhitectura modulară permite ușoara adăugare de noi jocuri sau funcționalități. Sistemul de meniu oferă o experiență de utilizare intuitivă, iar implementarea hardware-ului este optimizată pentru performanță pe platforma Arduino.

DE FACUT: Implementat uniform codul pentru a nu mai avea module si sa fie totul deodata

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

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

Export to PDF

pm/prj2025/rnedelcu/vconstantinescu2109.1748425424.txt.gz · Last modified: 2025/05/28 12:43 by vconstantinescu2109
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