Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:avaduva:mmahmoudi [2025/05/24 09:24]
mmahmoudi [Hardware Design]
pm:prj2025:avaduva:mmahmoudi [2025/05/24 09:58] (current)
mmahmoudi [Hardware Design]
Line 17: Line 17:
 Circuitul hardware este finalizat si complet functional. Toate componentele din lista de piese au fost interconectate pe un breadboard si conectate la placa de dezvoltare Arduino UNO. Montajul respecta schema electrica si este capabil sa ruleze logica jocului "Pixel Runner",​ raspunzand la comenzi si afisand elementele vizuale si auditive conform codului. Circuitul hardware este finalizat si complet functional. Toate componentele din lista de piese au fost interconectate pe un breadboard si conectate la placa de dezvoltare Arduino UNO. Montajul respecta schema electrica si este capabil sa ruleze logica jocului "Pixel Runner",​ raspunzand la comenzi si afisand elementele vizuale si auditive conform codului.
  
-Componente Folosite si Rolul Lor+Componente Folosite si Rolul Lor:
   * Arduino UNO R3: Reprezinta unitatea centrala a proiectului. Ruleaza codul sursa, proceseaza logica jocului, citeste starea butoanelor si controleaza toate componentele externe (LCD, LED, Buzzer).   * Arduino UNO R3: Reprezinta unitatea centrala a proiectului. Ruleaza codul sursa, proceseaza logica jocului, citeste starea butoanelor si controleaza toate componentele externe (LCD, LED, Buzzer).
   * Afisaj LCD I2C 16x2: Este interfata vizuala principala. Afiseaza personajul, obstacolele,​ scorul, vietile ramase si meniurile de navigare. Modulul I2C simplifica mult conexiunile.   * Afisaj LCD I2C 16x2: Este interfata vizuala principala. Afiseaza personajul, obstacolele,​ scorul, vietile ramase si meniurile de navigare. Modulul I2C simplifica mult conexiunile.
   * 3 x Butoane: Sunt dispozitivele de intrare pentru jucator.   * 3 x Butoane: Sunt dispozitivele de intrare pentru jucator.
-Buton Start/​Saritura:​ Porneste jocul si controleaza actiunea de saritura a personajului. +  *   ​* ​Buton Start/​Saritura:​ Porneste jocul si controleaza actiunea de saritura a personajului. 
-Butoane Stanga/​Dreapta:​ Permit navigarea prin meniurile jocului (selectare jucator, dificultate,​ etc.). +  ​* ​  ​* ​Butoane Stanga/​Dreapta:​ Permit navigarea prin meniurile jocului (selectare jucator, dificultate,​ etc.). 
-LED RGB: Ofera feedback vizual colorat despre starea jocului: +  ​* ​LED RGB: Ofera feedback vizual colorat despre starea jocului: 
-Verde: Joc in desfasurare normala. +  ​* ​  ​* ​Verde: Joc in desfasurare normala. 
-Albastru: Personajul este in timpul unei sarituri. +  ​* ​  ​* ​Albastru: Personajul este in timpul unei sarituri. 
-Rosu: Sfarsitul jocului (Game Over). +  ​* ​  ​* ​Rosu: Sfarsitul jocului (Game Over). 
-Buzzer Pasiv: Componenta audio a proiectului. Genereaza efecte sonore (saritura, coliziune) si melodia din timpul jocului si de la finalul acestuia. +  ​* ​Buzzer Pasiv: Componenta audio a proiectului. Genereaza efecte sonore (saritura, coliziune) si melodia din timpul jocului si de la finalul acestuia. 
-Rezistenta 1.0kΩ: Este folosita ca rezistenta de limitare a curentului pentru a proteja pinii digitali ai placii Arduino, de obicei in serie cu LED-ul sau buzzer-ul.+  ​* ​Rezistenta 1.0kΩ: Este folosita ca rezistenta de limitare a curentului pentru a proteja pinii digitali ai placii Arduino, de obicei in serie cu LED-ul sau buzzer-ul.
 Descrierea Detaliata a Pinilor Descrierea Detaliata a Pinilor
 Afisaj LCD (I2C): Afisaj LCD (I2C):
  
-Pin SDA -> Pin A4 (Arduino): Linia de date (Serial Data). +  * Pin SDA -> Pin A4 (Arduino): Linia de date (Serial Data). 
-Pin SCL -> Pin A5 (Arduino): Linia de ceas (Serial Clock). +  ​* ​Pin SCL -> Pin A5 (Arduino): Linia de ceas (Serial Clock). 
-Motivatie: A4 si A5 sunt pinii hardware dedicati pentru comunicatia I2C pe placa Arduino Uno. Utilizarea I2C reduce numarul de pini necesari pentru controlul ecranului de la peste 6 la doar 2.+  ​* ​Motivatie: A4 si A5 sunt pinii hardware dedicati pentru comunicatia I2C pe placa Arduino Uno. Utilizarea I2C reduce numarul de pini necesari pentru controlul ecranului de la peste 6 la doar 2.
 Butoane: Butoane:
- +  * Start/​Saritura -> Pin Digital 2: 
-Start/​Saritura -> Pin Digital 2: +  ​* ​Motivatie: Pinul 2 este unul dintre pinii de intrerupere externa pe Arduino Uno. Folosirea unei intreruperi (attachInterrupt) asigura detectarea apasarii butonului instantaneu,​ fara intarziere, ceea ce este critic pentru o actiune de saritura precisa. 
-Motivatie: Pinul 2 este unul dintre pinii de intrerupere externa pe Arduino Uno. Folosirea unei intreruperi (attachInterrupt) asigura detectarea apasarii butonului instantaneu,​ fara intarziere, ceea ce este critic pentru o actiune de saritura precisa. +  ​* ​Stanga -> Pin Digital 3: 
-Stanga -> Pin Digital 3: +  ​* ​Dreapta -> Pin Digital 4: 
-Dreapta -> Pin Digital 4: +  ​* ​Motivatie: Acesti pini digitali sunt folositi ca intrari simple. Sunt configurati ca INPUT_PULLUP,​ eliminand necesitatea rezistentelor externe pentru a mentine o stare logica stabila.
-Motivatie: Acesti pini digitali sunt folositi ca intrari simple. Sunt configurati ca INPUT_PULLUP,​ eliminand necesitatea rezistentelor externe pentru a mentine o stare logica stabila.+
 LED RGB: LED RGB:
- +  * Pin Rosu -> Pin Digital ​9
-Pin Rosu -> Pin Digital ​6+  ​* ​Pin Verde -> Pin Digital 10: 
-Pin Verde -> Pin Digital 10: +  ​* ​Pin Albastru -> Pin Digital ​11
-Pin Albastru -> Pin Digital ​13+  ​* ​Motivatie: Pinii 9, 10 si 11 sunt pini PWM (Pulse Width Modulation),​ necesari pentru a controla intensitatea fiecarei culori prin functia analogWrite.
-Motivatie: Pinii 6 si 10 sunt pini PWM (Pulse Width Modulation),​ necesari pentru a controla intensitatea fiecarei culori prin functia analogWrite. Pinul 13 este utilizat pentru componenta albastra conform codului furnizat.+
 Buzzer Pasiv: Buzzer Pasiv:
- +  * Iesire -> Pin Digital 5: 
-Iesire -> Pin Digital 5: +  ​* ​Motivatie: Pinul 5 este un pin PWM, ceea ce il face ideal pentru a genera tonuri de diferite frecvente si durate folosind functia tone(), necesara pentru melodiile si efectele sonore din joc.
-Motivatie: Pinul 5 este un pin PWM, ceea ce il face ideal pentru a genera tonuri de diferite frecvente si durate folosind functia tone(), necesara pentru melodiile si efectele sonore din joc.+
  
 Schema electrica: Schema electrica:
Line 67: Line 64:
 ===== Software Design ===== ===== Software Design =====
  
-Mediu de dezvoltare ​+Stadiul Actual al Implementarii Software: 
-  * Arduino IDE - Ales pentru dezvoltarea acestui proiect datorita interfetei prietenoasecompatibilitatii extinse cu placile Arduino ​si ecosistemului bogat de librarii. +Implementarea software, realizata in mediul ​de dezvoltare Arduino IDE, este completa, testata ​si stabilaToate functionalitatile ​si algoritmii descrisi in proiect sunt implementati si functioneaza conform asteptarilorde la meniul interactiv si mecanicile ​de jocpana la sistemul ​de salvare ​scorurilor ​si modul de economisire a energiei.
- +
-Librării şi surse 3rd-party : +
-  * LiquidCrystal_I2C - Librarie pentru comunicarea cu display-ul LCD prin protocolul I2C, permitand afisarea caracterelor personalizate ​si a textului pe ecranul 16x2. +
-  * EEPROM - Librarie standard Arduino pentru accesarea memoriei non-volatilefolosita ​la stocarea scorurilor maxime ale utilizatorilor. +
- +
-Algoritmi şi structuri implementate : +
-  * Masina ​de stari pentru meniuri - Implementeaza navigarea intre diferite ecrane (meniu principalsetari, instructiuni,​ selectare nivel) folosind aceleasi butoane. +
- +
-  * Sistem dinamic ​de generare ​obstacolelor - Algoritmul genereaza obstacole (cactusi) cu frecventa ​si spatiere adaptata la nivelul de dificultate selectat. +
- +
-  * Sistem de coliziuni - Detecteaza suprapunerea intre personajul jucatorului si obstacole, cu reactie corespunzatoare (pierdere vieti, sfarsit de joc). +
- +
-  * Mecanisme ​de economisire a energiei ​- Implementare a modului sleep cu detectie de inactivitate si reactivare la apasarea butoanelor.+
  
-  * Algoritm de animatie a caracterelor - Sistem de alternare a frame-urilor de animatie pentru personaje (DinoGhostLGhost) in functie de starea jocului.+Motivarea Alegerii Bibliotecilor 
 +Pentru proiectam folosit doua biblioteci esentialealese strategic pentru eficienta:
  
-  * Structura de memorare ​scorurilor ​Utilizeaza ​EEPROM pentru a pastra ​scorurile maxime ​pentru multiple profiluri ​de jucatori.+  * LiquidCrystal_I2C.h:​ Am ales aceasta biblioteca pentru ​simplifica drastic conexiunile hardware. Prin protocolul I2C, controlul afisajului se realizeaza cu doar doi pini de date (SDA si SCL), eliberand ceilalti pini ai microcontrolerului pentru alte componente, cum ar fi butoanele sau LED-ul. 
 +  * EEPROM.h: Aceasta biblioteca standard a fost cruciala ​pentru a implementa o functionalitate cheie: persistenta datelor. Prin utilizarea memoriei non-volatile, ​scorurile maxime ​ale jucatorilor sunt salvate permanent, chiar si dupa intreruperea alimentarii,​ oferind o experienta ​de joc completa si motivanta.
  
 +Elementul de Noutate al Proiectului
 +Elementul de noutate consta in integrarea unui set complex de sisteme software pe o platforma hardware cu resurse foarte limitate. Proiectul nu este doar un simplu joc, ci o aplicatie completa care demonstreaza eficienta software prin imbinarea urmatoarelor sisteme avansate:
  
-Functii principale ​de control al fluxului jocului: +  * O masina ​de stari pentru gestionarea meniurilor. 
-  * setup() - Initializeaza hardware-ulafisajul si variabilele de joc +  * Un algoritm dinamic pentru generarea obstacolelorcare se adapteaza la dificultate. 
-  * loop() ​Controleaza starea jocului, verifica timpi si detecteaza input-ul utilizatorului +  * Un sistem de animare a caracterelor prin alternarea de frame-uri. 
-  * resetGame() - Reseteaza toate variabilele pentru inceperea unui joc nou+  * Managementul scorurilor pentru multiple profiluri de jucatori. 
 +  * Un mecanism de economisire a energiei ​(sleep mode)
 +  * Scheletul Proiectului,​ Interactiune si Validare
  
-Functii ​pentru ​gestionarea interactiunii cu utilizatorul: +Scheletul si Interactiunea Functionalitatilor 
-  * showMainMenu(),​ selectPlayer(),​ selectLevel(),​ selectCharacter() - Gestiunea meniurilor +Fluxul software este structurat logic pentru ​a asigura claritate si eficienta:
-  * buttonPressed() - Detecteaza apasarea butoanelor cu debouncing +
-  * onJumpButtonPress() - Functie de intrerupere pentru butonul de salt+
  
-Functii pentru mecanica jocului+  * setup()La pornire, aceasta functie ruleaza o singura data pentru a initializa componentele hardware (pini, LCD), a incarca scorurile din EEPROM si a afisa meniul principal. 
-  * Logica ​de detectie a coliziunilor implementata ​in bucla principala +  * Functiile ​de Meniu (showMainMenu,​ selectPlayer,​ etc.): Acestea actioneaza ca o masina de stari. Programul ramane ​in aceasta ​bucla de navigare, permitand utilizatorului sa configureze jocul. Setarile alese (dificultate,​ personaj) sunt stocate in variabile globale. 
-  * Controlul saltului personajului cu timing bazat pe millis() +  * loop(): Odata ce jocul este pornit din meniu, bucla principala devine activa. Aceasta constituie motorul de joc, unde se gestioneaza in timp real miscarea personajului,​ generarea obstacolelor,​ detectarea coliziunilor si actualizarea scorului, folosind variabilele setate anterior. 
-  * Generarea dinamica a obstacolelor cu spatiere ​si frecventa variabila+  * onJumpButtonPress():​ Aceasta functie de intrerupere ruleaza independent de loop(). Ea detecteaza instantaneu apasarea butonului de salt si seteaza un indicator (flag), pe care bucla loop() il verifica ​si actioneaza imediat, asigurand un raspuns rapid.
  
-Functii de audio si efecte vizuale: +Validarea Implementarii 
-  * playSound(),​ playFullMelody(),​ playGameplayMusic() - Sistemul audio +Validarea a fost realizata in doua etape:
-  * setRGB() - Controleaza LED-ul RGB pentru feedback vizual +
-  * Melodii integrate pentru diferite evenimente din joc+
  
-Functii ​pentru ​gestionarea memoriei+  * Testare modulara: Fiecare functie a fost testata individual ​pentru ​a-i verifica corectitudinea (exsaveHighScore salveaza corect, resetGame reseteaza toate variabilele). 
-  * loadHighScores()saveHighScore()forceHighScore() - Manipuleaza datele in EEPROM+  * Testare integrata: Am rulat scenarii complete de utilizare – navigare prin toate meniurilejucarea unei partide pe fiecare nivel de dificultateatingerea starii de "Game Over" si verificarea salvarii corecte a scorului. Astfel, am confirmat ca toate modulele interactioneaza corect.
  
-Functii pentru economisirea energiei: +Calibrarea Elementelor de Senzorica 
-  * enterSleepMode(), wakeUp() - Controleaza modul de economisire a energiei+Singurele "​elemente de senzorica"​ sunt butoanele. Calibrarea acestora a insemnat implementarea unui mecanism de debouncing software pentru a preveni inregistrarea unor apasari multiple la o singura actionare fizica. Acest lucru a fost realizat printr-o scurta pauza (delayadaugata in cod imediat dupa detectarea unei apasariasigurand astfel ca fiecare apasare este contorizata o singura data, facand navigarea prin meniuri precisa si fiabila.
  
 +Optimizari Realizate
 +Pentru a asigura o experienta de joc superioara si o utilizare eficienta a resurselor, am implementat urmatoarele optimizari:
  
-Acest cod integreaza in mod eficient multiple tehnologii ​(GPIOI2C, IntreruperiTimere, PWM) pentru a crea experienta ​de joc completa pe o platforma cu resurse limitatedemonstrand implementarea practica a conceptelor studiate in laboratoare.+  * Reactivitate Maxima la Comenzi: Cea mai importanta optimizare este utilizarea unei intreruperi hardware ​(attachInterrupt) pentru butonul de salt. Astfelcomanda de salt este preluata si procesata instantaneueliminand orice intarziere (lagsi fiind esentiala ​pentru ​un gameplay precis. 
 +  * Eficienta Grafica si Animatie Fluida: In loc sa redesenam caracterele in bucla principala, acestea sunt create o singura data la pornire si stocate in memoria CGRAM ecranului LCD. Animatia se realizeaza prin alternarea rapida a acestor caractere pre-incarcate. Aceasta tehnica reduce drastic incarcarea procesorului si asigura ​animatie fluida, fara sacadari. 
 +  * Economisirea Energiei: Am implementat un mod sleep care, dupa un minut de inactivitatestinge iluminarea ecranului si LED-ul RGB. Aceasta optimizare reduce semnificativ consumul de energie si este activata/​dezactivata inteligent prin functiile enterSleepMode() si wakeUp().
  
 Cod sursa: [[https://​github.com/​M-Mehdi-M/​Pixel_Runner|Pixel Runner GitHub Repository]] Cod sursa: [[https://​github.com/​M-Mehdi-M/​Pixel_Runner|Pixel Runner GitHub Repository]]
Line 121: Line 111:
 ===== Rezultate Obtinute ===== ===== Rezultate Obtinute =====
  
-  * Proiectul Pixel Runner Game functioneaza ​complet pe platforma Arduino, ​cu afisaj LCD I2C, LED RGB, buzzer si butoane. +Am realizat cu succes un joc complet ​functional si stabil ​pe platforma Arduino, ​care integreaza corect toate componentele hardwareSistemul ofera o experienta ​de joc fluida, cu meniuri intuitive, scoruri salvate ​in EEPROM si un mod de economisire ​energiei.
-  * Meniurile sunt intuitive, permit selectarea jucatorului,​ a nivelului ​de dificultate si a personajului,​ precum si accesarea scorurilor si setarilor. +
-  * Jocul ruleaza fluent, cu animatii pentru personaj si obstacolesi cu mecanism de coliziuni functional. +
-  * Sistemul de scoruri ​maxime functioneaza corect, scorurile fiind salvate ​si incarcate din EEPROM ​pentru fiecare profil de jucator. +
-  * Modul sleep reduce consumul energetic, iar sistemul revine rapid la functionare la apasarea oricarui buton. +
-  * Toate efectele sonore ​si vizuale (melodii, culori LED) se activeaza conform evenimentelor din joc, imbunatatind experienta utilizatorului. +
-  * Setarile permit activarea/​dezactivarea sunetului si resetarea scorurilor fara probleme. +
-  * Codul este modular si usor de extins sau adaptat pentru alte functionalitati sau platforme. +
-  * Testele efectuate au demonstrat stabilitatea jocului chiar si dupa utilizare indelungata,​ fara blocari sau erori. +
-  * Proiectul inglobeaza cu succes cerintele de laborator (GPIO, I2C, intreruperi,​ timere, PWM), demonstrand integrarea practica ​acestora intr-o aplicatie reala.+
  
 ===== Concluzii ===== ===== Concluzii =====
  
-Proiectul ​integrat cu succes mai multe tehnologii hardware ​si software pe Arduinooferind ​experienta de joc stabila si interactiva. +Acest proiect ​demonstrat integrarea practica ​si eficienta a tehnologiilor studiate (GPIO, I2C, PWMIntreruperi) intr-aplicatie realaCodul rezultat ​este modular si robust, indeplinind toate cerintele initiale si constituind o baza solida ​pentru ​dezvoltari ​viitoare.
-Toate cerintele de laborator au fost respectate, iar codul este modular si usor de extins. +
-Experienta acumulata este utila pentru ​proiecte ​viitoare ​in domeniul sistemelor embedded.+
 ===== Download ===== ===== Download =====
  
pm/prj2025/avaduva/mmahmoudi.1748067848.txt.gz · Last modified: 2025/05/24 09:24 by mmahmoudi
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