This is an old revision of the document!


Retro arcade games console - Rusu Bogdan, 332CA

Introducere

Proiectul meu consta in realizarea unei console de jocuri arcade retro (Tetris, Pacman si altele) din dorinta de a face un proiect pe care sa il pot folosi si dupa PM.

Consola va fi encapsulata intr-o carcasa printata 3d si va avea un ecran color pe care se desfasoara jocurile, incluzand un meniu de selectie. Pe langa acestea, vor fi amplasate butoane pentru controlul in cadrul jocurilor, pentru controlul sunetului sau a statusul consolei (on, sound, sleep).

Ceea ce doresc sa realizez este si functionalitatea de power management a consolei pentru conservarea energiei cand nu se joaca nimeni pe ea.

Ideea a pornit mai mult din dorinta de a face ceva fun si interactiv si sa invat mai mult despre cum se poate construi un proiect practic pana la stadiul de a fi chiar utilizabil.

Pentru salvarea high scores sau a nivelurilor la care jucatorul a ajuns voi folosi un card micro sd conectat la placuta care sa memoreze aceste date.

Descriere generală

Placuta de ESP32 va actiona drept 'creierul' consolei de joc. De la acesta se vor trimite comenzile de desenare prin SPI catre ecran, se vor salva si respectiv retrage datele despre highscores si nivelurile la care a ajuns jucatorul si va interpreta comenzile de la butoane prin intreruperi. De asemenea prin timerele interne ale placutei se va monitoriza perioada de inactivitate pentru a trece consola intr-un sistem de low power pentru conservarea bateriei.

Hardware Design

Placa de dezvoltare ESP32

Este “creierul” consolei: un microcontroller dual-core Tensilica LX6 la 240 MHz, cu 520 KB SRAM și Wi-Fi/Bluetooth integrate. Primește alimentare prin pinul VIN (5 V) sau prin USB, iar regulatorul onboard îi trimite stabil 3,3 V la nucleu. Toate perifericele (SPI, ADC, GPIO, PWM, Deep-Sleep) sunt gestionate de ESP32.

TFT 2.2″ ILI9341 cu microSD

Un display color 320×240 px care comunică prin SPI. Pe aceeași magistrală împarte datele între ecran și cardul microSD, având două CS-uri separate. Backlight-ul are un pin marcat “BL” cu “PWM SAFE” – silkscreen-ul indică faptul că placa conține intern tranzistor și rezistență de limitare, astfel încât poți aplica direct un semnal PWM din ESP32 pentru reglaj de luminozitate.

Modul Pin ESP32 Pin Protocol Funcție
VCC 3V3 Power Alimentare 3.3 V
GND GND Power Masă comună
SCK GPIO18 SPI_CLK Ceas SPI
MISO GPIO19 SPI_MISO Date SPI din SD
MOSI GPIO23 SPI_MOSI Date SPI către TFT/SD
CS GPIO5 SPI_CS Chip-select pentru TFT
DC GPIO2 GPIO/SPI Data/Command TFT
RST GPIO16 GPIO Reset hardware TFT
SDCS GPIO4 SPI_CS Chip-select pentru microSD
BL GPIO15 PWM Reglaj backlight (PWM SAFE)

Card microSD

Se introduce direct în slotul modulului TFT. Servește la stocarea high-score-urilor, configurațiilor și eventual a altor asset-uri (hărţi de nivel, fonturi). Accesul se face cu biblioteca FatFS prin API-ul SD.begin(SD_CS) și operaţiuni standard SD.open()

Elemente de control (9 butoane INPUT_PULLUP + întreruperi)

Butoane (9×, INPUT_PULLUP + întreruperi)

  • 4× direcţionale (D-pad) pentru navigare în joc.
  • 2× A/B pentru acţiuni principale şi secundare.
  • Start/Select pentru control de meniu și pauză.
  • Power pentru deep-sleep/wake.
  • Fiecare e configurat ca pinMode(…, INPUT_PULLUP) și declanșează ISR pe front FALLING, asigurând reacţie instantă fără polling.

Funcție GPIO Pin Config Interrupție
D-pad Sus GPIO32 INPUT_PULLUP FALLING (apăsare)
D-pad Jos GPIO33 INPUT_PULLUP FALLING (apăsare)
D-pad Stânga GPIO25 INPUT_PULLUP FALLING (apăsare)
D-pad Dreapta GPIO26 INPUT_PULLUP FALLING (apăsare)
Buton A GPIO27 INPUT_PULLUP FALLING (apăsare)
Buton B GPIO14 INPUT_PULLUP FALLING (apăsare)
Start GPIO12 INPUT_PULLUP FALLING (apăsare)
Select GPIO13 INPUT_PULLUP FALLING (apăsare)
Power GPIO34 INPUT_PULLUP + WAKE FALLING (deep-sleep wake)

Monitorizare nivel baterie

Două rezistoare (100kΩ/100 kΩ) formează un divizor care aduce maxim 4,2 V de la BAT+ la ~2,1 V, sigur pentru ADC-ul ESP32. Se conecteaza punctul de măsură la GPIO35 (ADC1_CH7) cu atenuare de 11 dB și măsori nivelul bateriei în cod, transformând valoarea ADC invers la tensiunea reală a pachetului.

Divizor node ESP32 Pin Protocol Descriere
Între R1 și R2 GPIO35 ADC1_CH7 (ADC_11db) Măsurare tensiune baterie (factor 2×)

Alimentare și încărcare baterie

Două celule Li-Ion Samsung 25R (3,7 V nominal, 2 500 mAh fiecare) montate paralel într-un holder “go-bare”. În paralel se obtin ~5 000 mAh și tensiune constantă de 3,7 V, cu curent disponibil de zeci de amperi pentru perioade scurte.

Încărcător CC/CV pentru o singură celulă Li-Ion, alimentat la 5 V (micro-USB sau boost). Conține circuit de protecție la supraîncărcare, scurt-circuit și sub-tensiune. Pinii B+/B– se conectează la baterii, iar OUT+/OUT– livrează tensiunea protejată către consolă.

  • TP4056 VIN (+) → 5 V de la boost/USB
  • TP4056 GND (–) → GND comun
  • TP4056 B+ / B– → suportul 2×18650 (celule în paralel)
  • TP4056 OUT+ / OUT– → rail de alimentare (spre VIN al ESP32)

Bill of materials

Nume piesă Cantitate Link
Placă de dezvoltare ESP32 cu WiFi & Bluetooth 4.2 1 ESP32
Display LCD TFT 320×240 2.2″ cu slot microSD 1 Display TFT 2.2″
Modul DC-DC 1.5–5 V → 3.3 V 1 DC-DC 1.5–5 V→3.3 V
Modul încărcător TP4056 LiPo 1 A cu protecție 1 TP4056 charger
Card de memorie MicroSDHC 4 GB, Class 10 1 MicroSD card 4 GB
Suport baterii 2×18650 1 Battery holder 2×18650
Celule Li-Ion 18650 3.7 V 2 18650 Li-Ion 3.7 V
Piezo buzzer activ 1
Push-buttons tactile (momentary) 9
Fire jumper (duse-întoarse) 10
Rezistoare 100 kΩ 2

Proof of concept

Software Design

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

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/mdinica/bogdan.rusu1707.1747610135.txt.gz · Last modified: 2025/05/19 02:15 by bogdan.rusu1707
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