Retro Gaming Display

Introducere

Proiectul își propune realizarea unui Display Retro de Gaming care oferă utilizatorului posibilitatea alegerii între 3 jocuri clasice “retro”: Tetris, Snake și Brick Break. Va fi implementat și un ecran de stand-by care se va declanșa după o perioadă de inactivitate și care va arăta ora și temperatura curentă. Display-ul va avea un design aparte, pixelat, potrivit pentru jocurile propuse fiind alcătuit dintr-o matrice de 16×16 de LED-uri individual adresabile. Pentru o experiență cât mai plăcută, controller-ul folosit pentru selectarea jocurilor și interacțiunea cu ele este o aplicație bluetooth de android cu o interfață intuitivă, simplistă, user-friendly.

Acest proiect a pornit de la dragostea mea pentru jocurile video, în special cele “retro” de tip arcade. Acesta oferă o modalitate distractivă și nostalgică de petrecere a timpului liber într-un format modern și compact. Controller-ul bluetooth integrat în aplicația Android aduce un plus de accesibilitate și ușurință în utilizare, făcând experiența de joc mai plăcută și mai interactivă. Totodată, ecranul de standby care afișează ora și temperatura curentă adaugă utilitate și funcționalitate acestui dispozitiv, transformându-l într-o piesă utilă și practică în orice locuință sau spațiu de divertisment.

Descriere generală

Interfața grafică principală este reprezentată de o matrice de LED-uri de 16×16, compusă din 16 bucăți de bandă cu LED-uri individual adresabile, tipul WS2812B, cu o densitate de 60 de LED-uri pe metru. Pentru realizarea matricei de LED-uri, acestea vor fi conectate într-o configurație serpuită pentru a forma matricea de 16×16. Această matrice este controlată de către un modul ESP32 conectat la un controller Bluetooth, prin intermediul unei aplicații dezvoltate în App Inventor și instalată pe un telefon mobil. Atunci când telefonul este conectat, utilizatorul are posibilitatea să se bucure de jocurile clasice Tetris, Snake și Brick Break, accesându-le prin interfața aplicației. În situația în care telefonul nu este conectat, matricea de LED-uri va trece într-un mod de standby, afișând ora și temperatura curentă. Astfel, proiectul va include și integrarea unui senzor de temperatură, care va fi conectat la modulul ESP32 pentru a furniza datele necesare pentru afișarea temperaturii pe ecranul de standby. Pentru o structură solidă și estetică, voi proiecta și imprima o carcasă 3D în Fusion 360. Partea software va fi simplă și intuitivă, cu câteva butoane colorate care vor permite utilizatorului să selecteze jocurile dorite și să controleze fiecare joc în parte funcționalitatea butoanelor fiind diferită în funcție de jocul ales.

Hardware Design

Componente folosite:

Etapa 1

Inițial neavând la dispoziție carcasa pentru proiect care urma a fi finalizată în decursul următoarelor zile, am decis să fac un montaj preliminar, de testare. Acesta e menit să verfice atât conectivitatea, cât și buna funcționare a tuturor componentelor. În poze se poate observa cablajul care urmărește în mare parte schema electrică realizată, urmând să adaug ulterior un întrerupător pe cablul de alimentare și să montez atât bandă LED, cât și restul componentelor în carcasa proiectată de către mine în fusion 360.

Etapa 2

Design-ul carcasei a fost realizat cu ajutorul Fusion 360. Am luat măsurătorile necesare precum distanța dintre LED-uri, distanța dintre benzi (astfel încât rama finală să fie un pătrat pefect încăpător inclusiv pentru fire mai lungi) și mărimile componentelor mele (sursă, ESP32 și DHT11). Pe baza acestor măsurători am realizat 2 mari componente:

  • 1) rama propiu-zisă - formată din partea din spate (menită să cuprindă LED-urile), grid-ul care se așează peste LED-uri (separă fiecare LED în propria “căsuță” pentru a nu exista amestec între culori) și partea din față (o muchie care se prinde de partea din spate și are rolul menținerii plexiglasului și fixării panoului)
  • 2) cutia de “mentenanță” - cutie cu un capac glisant pentru accesul facil la componente; are un compartiment separat pentru sursă și unul pentru ESP32 și senzor DHT11 (această alegere de design a fost realizată datorită căldurii generate atât de LED-uri cât și de sursă lucru care poate afecta citirile senzorului de temperatură)

Etapa 3

Următorul pas a fost lipirea și cablarea LED-urilor. Mai întâi am tăiat banda LED adresabilă în 16 porțiuni a câte 16 LED-uri pe care le-am lipit echidistant pe o bucată de aluminiu (28x28cm, 0.4mm) menită să disipeze căldura generată. După am legat LED-urile într-o manieră șerpuită legând capetele de DATA OUT cu cele de DATA IN de pe rândul următor. Pentru alimentare am legat toate benzile la un VCC și GND comune care urmau a fi legate la sursa de tensiune.

Restul montajului este unul relativ simplu fiind foarte puțin schimbat din demo-ul de mai sus. Cablul de alimentare cu ștecher intră în sursa de tensiune care alimentează tot ansamblul electric. De la bornele sursei folosind culorile corespunzătoare (roșu pentru + și negru pentru -) am alimentat atât palcuta de programare cât și montajul LED. Folosind un cablu dupont verde am legat primul pin DATA IN al LED-urilor cu pin-ul 2 de pe plăcuta ESP32 (acesta este pin-ul capabil PWM care facilitează întreg controlul LED-urilor, încât acestea funcționează pe baza unui protocol serial). Deoarece senzorul DHT11 suportă alimentare între 3.3V și 5V am ales să îl conectez direct la pinii de VCC și GND ai plăcuței, pin-ul de date fiind conectat cu pin-ul 4 al ESP-ului.

Software Design

Fiind data idea initiala a proiectului si faptul ca am ales un ESP32 drept microcontroller, sectiunea software se imparte in 2 subsectiuni: software-ul “embeded” care ruleaza pe ESP32 si controleaza logica de aprindere a LED-urilor si softwerul pentru aplicatia controller pentru android.

Software ESP32

În ceea ce privește partea de dezvoltare software pentru microcontroller-ul ESP32 am ales să folosesc Arduino IDE. Acest program mi-a oferit destul de multă flexibilitate încât am putut programa totul în C fiind ajutat de o mulțime de librării. Acestea sunt toate open-source, gratuite, link-uri pentru download fiind in secțiunea de bibliografie. Acestea sunt:

  • FastLED.h - Librărie foarte versatilă pentru controlul LED-urilor
  • LEDMatrix.h - Funcții auxiliare pentru asemănarea benzii LED cu o matrice C
  • LEDText.h - Funcții de afișare text, include și niște font-uri
  • LEDSprites.h - Utilă pentru programarea de joculețe oferind posibilitatea adăugării de animații în mișcare
  • DHT11.h - Funcții de interfațare cu senzorul de temperatura și umiditate DHT11

Software Controller Android

In ceea ce priveste partea de dezvoltare software pentru aplicatia controller de pe Android am folosit site-ul MIT App Inventor deoarece nu am experienta in dezvoltarea de aplicatii pentru Android, iar editor-ul block based mi-a permis sa realizez exact ceea ce voiam.

Aplicatia foloseste mai multe apeluri de functie de trimitere Serial prin Bluetooth. Pentru butoanele cu comenzi pentru a minimiza latenta trimit cate un caracter (“r”, “y”, “g”, “b”, “w”, “a”, “s”, “d” si “m”) care dupa ce este primita de catre ESP32 este procesata in functie de context. De asemenea pentru a retine pagina la care a fost lasata folosec modulul de TinyDB oferit de catre MIT App Inventor.

Rezultate Obţinute

Proiectul final funcționează exact întocmai ideii originale demo-ul urmând să fie prezentat în cadrul PM Fair.

Concluzii

Deși a fost o provocare fiind primul proiect software complex dezvoltat pentru un montaj hardware dedicat, sunt foarte mulțumit de rezultatul final. Fiind prima mea experiență cu un aparat de lipit, am întâmpinat inițial câteva dificultăți, motiv pentru care partea hardware, și în special montajul LED-urilor, mi s-a părut dificilă. Deși mă așteptam să fie mai dificilă, dezvoltarea aplicației Android a fost surprinzător de ușoară, datorită platformei MIT App Inventor, care oferă o experiență foarte intuitivă.

Sunt încântat că am avut oportunitatea de a lucra la un astfel de proiect creativ, fiind ceva ce îmi doream să realizez de mult timp.

Download

Librăriile auxiliare menționate în secțiunea software nu se află în arhiva de mai jos. Se regăsesc doar fișierele sursă care sunt încărcate pe ESP32 și fișierele .apk și .aia aferente aplicației de Android.

retro_gaming_display_andrei_calin.zip

Bibliografie/Resurse

pm/prj2024/sseverin/calin_mihail.andrei.txt · Last modified: 2024/05/27 14:51 by calin_mihail.andrei
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