This shows you the differences between two versions of the page.
pm:prj2025:avaduva:stefania.draghici [2025/05/26 19:17] stefania.draghici [Bibliografie/Resurse] |
pm:prj2025:avaduva:stefania.draghici [2025/05/28 18:48] (current) stefania.draghici [Rezultate Obţinute] |
||
---|---|---|---|
Line 122: | Line 122: | ||
== Funcționalități Implementate == | == Funcționalități Implementate == | ||
- | - **Sistem de afișare animat** pe OLED SSD1306 | + | * **Sistem de afișare animat** pe OLED SSD1306 |
- | - **Interfață grafică completă** cu animații pentru toate stările | + | * **Interfață grafică completă** cu animații pentru toate stările |
- | - **Sistem de management stări** (baby/adult cu tranziție automată) | + | * **Sistem de management stări** (baby/adult cu tranziție automată) |
- | - **Interacțiune prin butoane** (Play, Feed, Reset cu debounce) | + | * **Interacțiune prin butoane** (Play, Feed, Reset cu debounce) |
- | - **Senzor de lumină ambientală** cu detecție automată zi/noapte | + | * **Senzor de lumină ambientală** cu detecție automată zi/noapte |
- | - **Feedback audio** prin buzzer pentru toate acțiunile | + | * **Feedback audio** prin buzzer pentru toate acțiunile |
- | - **Sistem de bare de progres** pentru hunger și happiness | + | * **Sistem de bare de progres** pentru hunger și happiness |
- | - **Timer de evoluție** (baby → adult după 3 minute, pentru testare, dar cu posibilitatea de a extinde durata) | + | * **Timer de evoluție** (baby → adult după 3 minute, pentru testare, dar cu posibilitatea de a extinde durata) |
- | - **Sistem de warning audio** pentru stări critice | + | * **Sistem de warning audio** pentru stări critice |
- | - **Funcționalitate de reset** cu confirmare prin apăsare lungă, pentru a nu apăsa din greșeală | + | * **Funcționalitate de reset** cu confirmare prin apăsare lungă, pentru a nu apăsa din greșeală |
+ | * **Mini Game** pentru funcționalitatea de Play, pentru a reduce monotonia | ||
== Arhitectura Software == | == Arhitectura Software == | ||
Line 168: | Line 169: | ||
Funcții principale utilizate: | Funcții principale utilizate: | ||
- | - **display.begin()**: inițializează ecranul | + | * **display.begin()**: inițializează ecranul |
- | + | * **display.clearDisplay()**: șterge conținutul ecranului | |
- | - **display.clearDisplay()**: șterge conținutul ecranului | + | * **display.print()**: pentru afișare de text |
- | + | * **drawBitmap()**: pentru afișarea pictogramelor | |
- | - **display.print()**: pentru afișare de text | + | |
- | + | ||
- | - **drawBitmap()**: pentru afișarea pictogramelor | + | |
==== Elementul de noutate al proiectului ==== | ==== Elementul de noutate al proiectului ==== | ||
Line 186: | Line 184: | ||
**I2C** | **I2C** | ||
- | - Aplicare: comunicația cu display-ul OLED SSD1306 | + | * Aplicare: comunicația cu display-ul OLED SSD1306 |
- | + | * Avantaje: doar 2 fire pentru date și clock, protocol robust | |
- | - Avantaje: doar 2 fire pentru date și clock, protocol robust | + | * Implementare: Wire.begin() pentru inițializare, transfer automat prin bibliotecă |
- | + | ||
- | - Implementare: Wire.begin() pentru inițializare, transfer automat prin bibliotecă | + | |
**GPIO** | **GPIO** | ||
- | - Butoane: citire digitală cu digitalRead() și debounce software | + | * Butoane: citire digitală cu digitalRead() și debounce software |
+ | * Configurare: pinMode() pentru INPUT | ||
- | - Buzzer: generare PWM pentru tonuri diferite cu tone() | ||
- | - Configurare: pinMode() pentru INPUT și OUTPUT | + | **ADC** |
+ | * Senzor lumină: conversie analog-digitală a intensității luminoase | ||
+ | * Rezoluție: 10-bit (0-1023) pentru precizie suficientă | ||
+ | * Procesare: conversie la procent pentru logică simplificată | ||
- | **ADC** | + | **PWM** |
- | + | ||
- | - Senzor lumină: conversie analog-digitală a intensității luminoase | + | |
- | - Rezoluție: 10-bit (0-1023) pentru precizie suficientă | + | * Buzzer: generare tonuri diferite cu tone() pentru feedback sonor și oprire cu noTone() |
- | - Procesare: conversie la procent pentru logică simplificată | ||
==== Scheletul Proiectului și Interacțiunea Funcționalităților ==== | ==== Scheletul Proiectului și Interacțiunea Funcționalităților ==== | ||
Line 221: | Line 217: | ||
== Starea Principală (gestionată prin flag-uri boolean): == | == Starea Principală (gestionată prin flag-uri boolean): == | ||
- | - **checkSleepCondition()**: monitorizează senzorul de lumină | + | * **checkSleepCondition()**: monitorizează senzorul de lumină |
- | - **animateIdle()**: animația de bază când animalul este treaz | + | * **animateIdle()**: animația de bază când animalul este treaz |
- | - **animateSleep()**: animația de somn când este întuneric | + | * **animateSleep()**: animația de somn când este întuneric |
== Sistem de Evenimente: == | == Sistem de Evenimente: == | ||
- | - **triggerHappyAnimation()** + **runHappyAnimation()**: răspuns la butonul PLAY | + | * **triggerHappyAnimation()** + **runHappyAnimation()** + **runMiniGame()**: răspuns la butonul PLAY |
- | - **triggerEatAnimation()** + **runEatAnimation()**: răspuns la butonul FEED | + | * **triggerEatAnimation()** + **runEatAnimation()**: răspuns la butonul FEED |
- | - **updateHungerAndHappiness()**: degradare automată a parametrilor la 30s | + | * **updateHungerAndHappiness()**: degradare automată a parametrilor la 30s |
=== Fluxul Principal de Execuție === | === Fluxul Principal de Execuție === | ||
Line 239: | Line 235: | ||
**setup()** → **showIntro()** → | **setup()** → **showIntro()** → | ||
- | ── Zi: **animateIdle()** + verificare butoane + update status | + | * Zi: **animateIdle()** + verificare butoane + update status |
- | ── Noapte: **animateSleep()** + melodie când "adoarme" | + | * Noapte: **animateSleep()** + melodie când "adoarme" |
==== Modul de Validare a Funcționalităților ==== | ==== Modul de Validare a Funcționalităților ==== | ||
Line 247: | Line 243: | ||
== Testare unitară pe componente: == | == Testare unitară pe componente: == | ||
- | - Fiecare animație testată individual cu delay-uri controlate | + | * Fiecare animație testată individual cu delay-uri controlate |
- | - Butoanele testate cu Serial Monitor pentru debug | + | * Butoanele testate cu Serial Monitor pentru debug |
- | - Senzorul calibrat în condiții diferite de lumină | + | * Senzorul calibrat în condiții diferite de lumină |
== Testare integrată: == | == Testare integrată: == | ||
- | - Sesiuni complete de 5+ minute pentru verificarea evoluției | + | * Sesiuni complete de 5+ minute pentru verificarea evoluției |
- | - Test de rezistență cu apăsări rapide pentru debounce | + | * Test de rezistență cu apăsări rapide pentru debounce |
- | - Validare tranziții zi/noapte cu acoperire/descoperire senzor | + | * Validare tranziții zi/noapte cu acoperire/descoperire senzor |
Line 268: | Line 264: | ||
== Proces de calibrare experimentală: == | == Proces de calibrare experimentală: == | ||
- | - Măsurători în condiții normale de cameră: ~300-500 (valori ADC) | + | * Măsurători în condiții normale de cameră: ~300-500 (valori ADC) |
- | - Măsurători în întuneric: ~10-50 | + | * Măsurători în întuneric: ~10-50 |
- | - Prag stabilit: 3% din scala completă (≈30 valori ADC) | + | * Prag stabilit: 2% din scala completă (≈20 valori ADC) |
== Justificarea pragului: == | == Justificarea pragului: == | ||
- | - Suficient de sensibil pentru detectarea întunericului natural | + | * Suficient de sensibil pentru detectarea întunericului natural |
- | -Rezistent la variații mici de lumină (umbre, mișcări) | + | * Rezistent la variații mici de lumină (umbre, mișcări) |
- | -Testat în diferite condiții: cameră luminoasă, lumină directă de la o lanternă, întuneric complet | + | * Testat în diferite condiții: cameră luminoasă, lumină directă de la o lanternă, întuneric complet |
==== Optimizări Realizate ==== | ==== Optimizări Realizate ==== | ||
Line 305: | Line 301: | ||
Proiectul Picochi a fost finalizat cu succes, rezultând într-un joc funcțional și distractiv care recreează experiența clasică Tamagotchi cu elemente moderne. Am reușit să creez un animal virtual care reacționează natural la mediul înconjurător, adoarme când se întunecă și se trezește la lumină, oferind o experiență mai realistă decât jocurile similare. Sistemul funcționează stabil timp îndelungat fără erori, butoanele răspund prompt la comenzi, iar animațiile sunt fluide și atractive. Prin acest proiect am învățat să lucrez cu multiple componente hardware simultan, să optimizez codul pentru performanță, și să calibrez senzori pentru funcționare optimă. | Proiectul Picochi a fost finalizat cu succes, rezultând într-un joc funcțional și distractiv care recreează experiența clasică Tamagotchi cu elemente moderne. Am reușit să creez un animal virtual care reacționează natural la mediul înconjurător, adoarme când se întunecă și se trezește la lumină, oferind o experiență mai realistă decât jocurile similare. Sistemul funcționează stabil timp îndelungat fără erori, butoanele răspund prompt la comenzi, iar animațiile sunt fluide și atractive. Prin acest proiect am învățat să lucrez cu multiple componente hardware simultan, să optimizez codul pentru performanță, și să calibrez senzori pentru funcționare optimă. | ||
+ | [[https://youtu.be/w-dy4ar_Ra4?si=V-8LC7MzfvqlPeFS]] | ||
+ | |||
+ | Demo cu mini game: | ||
+ | [[https://youtube.com/shorts/y88nRnVo5h0?si=fG_Q-Cwj3rChF7mN]] | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
Line 338: | Line 338: | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | - https://github.com/KeyboardCamper/Tamaguino-AB.git | + | * https://github.com/KeyboardCamper/Tamaguino-AB.git |
- | - https://javl.github.io/image2cpp/ | + | * https://javl.github.io/image2cpp/ |
- | - https://www.spriters-resource.com/game_boy_gbc/tamagotchi/ | + | * https://www.spriters-resource.com/game_boy_gbc/tamagotchi/ |