Differences

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

Link to this comparison view

pm:prj2025:avaduva:mmahmoudi [2025/05/20 19:11]
mmahmoudi [Bibliografie/Resurse]
pm:prj2025:avaduva:mmahmoudi [2025/05/24 09:58] (current)
mmahmoudi [Hardware Design]
Line 14: Line 14:
 ===== Hardware Design ===== ===== Hardware Design =====
  
-Lista de piese: +Stadiul Actual al Implementarii 
-  * 3 butoane ​(Start/​SarituraStangaDreapta) +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. 
-  * Placa de dezvoltare Arduino UNO R3 + 
-  * Modul afisaj LCD I2C 16x2 +Componente Folosite si Rolul Lor
-  * Rezistenta 1.0kΩ +  * 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). 
-  * Buzzer pasiv +  * Afisaj LCD I2C 16x2: Este interfata vizuala principala. Afiseaza personajul, obstacolele,​ scorul, vietile ramase si meniurile de navigare. Modulul I2C simplifica mult conexiunile. 
-  * LED RGB+  * 3 x Butoane: Sunt dispozitivele de intrare pentru jucator. 
 +  *   * Buton Start/​Saritura: Porneste jocul si controleaza actiunea de saritura a personajului. 
 +  *   * Butoane ​Stanga/Dreapta: Permit navigarea prin meniurile jocului (selectare jucator, dificultate,​ etc.). 
 +  * LED RGB: Ofera feedback vizual colorat despre starea jocului: 
 +  *   * Verde: Joc in desfasurare normala. 
 +  *   * Albastru: Personajul este in timpul unei sarituri. 
 +  *   * 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. 
 +  * 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 
 +Afisaj LCD (I2C): 
 + 
 +  * Pin SDA -> Pin A4 (Arduino): Linia de date (Serial Data). 
 +  * 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. 
 +Butoane: 
 +  * 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. 
 +  * Stanga -> Pin Digital 3: 
 +  * 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. 
 +LED RGB
 +  * Pin Rosu -> Pin Digital 9: 
 +  * Pin Verde -> Pin Digital 10: 
 +  * Pin Albastru -> Pin Digital 11: 
 +  * Motivatie: Pinii 9, 10 si 11 sunt pini PWM (Pulse Width Modulation),​ necesari pentru a controla intensitatea fiecarei culori prin functia analogWrite. 
 +Buzzer Pasiv: 
 +  * 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.
  
 Schema electrica: Schema electrica:
Line 36: 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 stabila. Toate functionalitatile si algoritmii descrisi in proiect ​sunt implementati si functioneaza conform asteptarilorde la meniul interactiv si mecanicile de joc, pana la sistemul de salvare a scorurilor ​si modul de economisire a energiei.
  
-Librării şi surse 3rd-party : +Motivarea Alegerii Bibliotecilor 
-  * LiquidCrystal_I2C - Librarie pentru comunicarea cu display-ul LCD prin protocolul I2Cpermitand afisarea caracterelor personalizate si a textului pe ecranul 16x2. +Pentru proiectam folosit doua biblioteci esentiale, alese strategic ​pentru ​eficienta:
-  * EEPROM - Librarie standard Arduino ​pentru ​accesarea memoriei non-volatile,​ folosita la stocarea scorurilor maxime ale utilizatorilor.+
  
-Algoritmi şi structuri implementate ​+  * LiquidCrystal_I2C.hAm ales aceasta biblioteca pentru a 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. 
-  * Masina de stari pentru ​meniuri ​Implementeaza navigarea intre diferite ecrane (meniu principalsetariinstructiuniselectare nivel) folosind aceleasi butoane.+  * EEPROM.h: Aceasta biblioteca standard a fost cruciala ​pentru ​a implementa o functionalitate cheie: persistenta datelor. Prin utilizarea memoriei non-volatilescorurile maxime ale jucatorilor sunt salvate permanentchiar si dupa intreruperea alimentariioferind o experienta de joc completa si motivanta.
  
-  * Sistem dinamic ​de generare a obstacolelor - Algoritmul genereaza obstacole (cactusi) cu frecventa si spatiere adaptata la nivelul ​de dificultate selectat.+Elementul ​de Noutate al Proiectului 
 +Elementul ​de noutate consta in integrarea unui set complex de sisteme software pe o platforma hardware cu resurse foarte limitateProiectul nu este doar un simplu joc, ci o aplicatie completa care demonstreaza eficienta software prin imbinarea urmatoarelor sisteme avansate:
  
-  * Sistem ​de coliziuni - Detecteaza suprapunerea intre personajul jucatorului si obstacolecu reactie corespunzatoare (pierdere vieti, sfarsit ​de joc).+  * O masina ​de stari pentru gestionarea meniurilor. 
 +  * Un algoritm dinamic pentru generarea obstacolelorcare se adapteaza la dificultate. 
 +  * Un sistem ​de animare a caracterelor prin alternarea de frame-uri. 
 +  * Managementul scorurilor pentru multiple profiluri de jucatori. 
 +  * Un mecanism de economisire a energiei (sleep mode). 
 +  * Scheletul Proiectului,​ Interactiune si Validare
  
-  * Mecanisme de economisire a energiei - Implementare ​modului sleep cu detectie de inactivitate ​si reactivare la apasarea butoanelor.+Scheletul si Interactiunea Functionalitatilor 
 +Fluxul software este structurat logic pentru ​asigura claritate ​si eficienta:
  
-  * Algoritm de animatie ​caracterelor - Sistem de alternare ​frame-urilor ​de animatie pentru personaje ​(DinoGhostLGhost) in functie de starea jocului.+  * setup(): La pornire, aceasta functie ruleaza o singura data pentru ​initializa componentele hardware (pini, LCD), incarca scorurile din EEPROM si a afisa meniul principal. 
 +  * Functiile ​de Meniu (showMainMenuselectPlayeretc.): 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. 
 +  * 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. 
 +  * 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.
  
-  * Structura de memorare ​scorurilor - Utilizeaza EEPROM pentru a pastra scorurile maxime pentru multiple profiluri de jucatori.+Validarea Implementarii 
 +Validarea ​fost realizata in doua etape:
  
 +  * Testare modulara: Fiecare functie a fost testata individual pentru a-i verifica corectitudinea (ex: saveHighScore salveaza corect, resetGame reseteaza toate variabilele).
 +  * Testare integrata: Am rulat scenarii complete de utilizare – navigare prin toate meniurile, jucarea unei partide pe fiecare nivel de dificultate,​ atingerea starii de "Game Over" si verificarea salvarii corecte a scorului. Astfel, am confirmat ca toate modulele interactioneaza corect.
  
-Functii principale ​de control al fluxului jocului: +Calibrarea Elementelor ​de Senzorica 
-  * setup() ​Initializeaza hardware-ul,​ afisajul si variabilele de joc +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.
-  * loop() - Controleaza starea joculuiverifica timpi si detecteaza input-ul utilizatorului +
-  * resetGame() - Reseteaza toate variabilele pentru inceperea unui joc nou+
  
-Functii pentru gestionarea interactiunii cu utilizatorul:​ +Optimizari Realizate 
-  * showMainMenu()selectPlayer(),​ selectLevel(),​ selectCharacter() - Gestiunea meniurilor +Pentru a asigura o experienta de joc superioara si o utilizare eficienta a resurseloram implementat urmatoarele optimizari:
-  * buttonPressed() - Detecteaza apasarea butoanelor cu debouncing +
-  * onJumpButtonPress() - Functie de intrerupere pentru butonul de salt+
  
-Functii pentru mecanica jocului: +  * Reactivitate Maxima la ComenziCea mai importanta optimizare este utilizarea unei intreruperi hardware ​(attachInterruptpentru butonul ​de salt. Astfel, comanda de salt este preluata ​si procesata instantaneueliminand orice intarziere ​(lagsi fiind esentiala pentru un gameplay precis. 
-  * Logica de detectie a coliziunilor implementata in bucla principala +  * 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 a ecranului LCD. Animatia se realizeaza prin alternarea rapida a acestor caractere pre-incarcate. Aceasta tehnica reduce drastic incarcarea procesorului si asigura o animatie fluida, fara sacadari. 
-  * Controlul saltului personajului cu timing bazat pe millis() +  * Economisirea EnergieiAm implementat un mod sleep caredupa 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().
-  * Generarea dinamica a obstacolelor cu spatiere si frecventa variabila +
- +
-Functii ​de audio si efecte vizuale: +
-  * playSound()playFullMelody(), playGameplayMusic() - Sistemul audio +
-  * setRGB() ​Controleaza LED-ul RGB pentru feedback vizual +
-  * Melodii integrate pentru diferite evenimente din joc +
- +
-Functii pentru gestionarea memoriei: +
-  * loadHighScores()saveHighScore()forceHighScore() ​Manipuleaza datele in EEPROM +
- +
-Functii pentru economisirea energiei: +
-  * enterSleepMode()wakeUp() ​- Controleaza modul de economisire a energiei +
- +
- +
-Acest cod integreaza in mod eficient multiple tehnologii (GPIO, I2C, Intreruperi,​ Timere, PWM) pentru a crea o experienta de joc completa pe o platforma cu resurse limitate, demonstrand implementarea practica a conceptelor studiate in laboratoare.+
  
 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]]
  
-===== Rezultate ​Obţinute ​=====+===== Rezultate ​Obtinute ​=====
  
-<note tip> +Am realizat cu succes un joc complet functional si stabil pe platforma Arduino, care integreaza corect toate componentele hardware. Sistemul ofera o experienta de joc fluida, cu meniuri intuitive, scoruri salvate in EEPROM si un mod de economisire a energiei.
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Acest proiect a demonstrat integrarea practica si eficienta a tehnologiilor studiate (GPIO, I2C, PWM, Intreruperi) intr-o aplicatie reala. Codul rezultat este modular si robust, indeplinind toate cerintele initiale si constituind o baza solida pentru dezvoltari viitoare.
 ===== Download ===== ===== Download =====
  
Line 104: Line 124:
 </​note>​ </​note>​
  
-===== Jurnal ===== 
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 + 
 +Proiectul utilizeaza concepte studiate in laborator, precum GPIO (interfatarea cu butoane si LED), I2C (comunicarea cu LCD-ul), intreruperi hardware (pentru butonul de salt), PWM (pentru controlul ledului RGB si buzzer), precum si timere software (gestionarea timpului de joc si a animatiilor) – integrand astfel cerintele pentru laboratoare PM.
  
- +[[https://​docs.arduino.cc/​learn/​built-in-libraries/​eeprom/​]]
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2025/avaduva/mmahmoudi.1747757495.txt.gz · Last modified: 2025/05/20 19:11 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