Differences

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

Link to this comparison view

pm:prj2026:alexandru.jipa2803:florin.badilas [2026/05/09 01:25]
florin.badilas
pm:prj2026:alexandru.jipa2803:florin.badilas [2026/05/24 17:23] (current)
florin.badilas [Prototip]
Line 5: Line 5:
 ===== Introducere ===== ===== Introducere =====
  
-MoodPet este un companion virtual embedded bazat pe microcontrollerul ATmega328P-XMINI, proiectat pentru a simula comportamentul unui animal virtual interactiv. Proiectul ​combină senzori de mediu, ​periferice de afișare și componente de feedback ​audio-vizual pentru a crea o experiență asemănătoare unui Tamagotchi modern.+MoodPet este un companion virtual embedded ​inspirat de jocurile de tip Tamagotchi. Proiectul este bazat pe microcontrollerul ATmega328P-XMINI ​și combină senzori de mediu, afișare ​pe LCD, interacțiune prin butoane, feedback vizual prin LED RGB și feedback ​sonor prin buzzer.
  
-Sistemul monitorizează temperatura și lumina ambientală și își modifică starea în funcție de condițiile detectate și de interacțiunea utilizatorului. MoodPet ​poate deveni fericittrist, obosit sau flămând și reacționează prin mesaje afișate pe LCDculori diferite ale LED-ului RGB și efecte sonore generate ​de buzzer. +Scopul proiectului este realizarea unui animal virtual care reacționează la mediul înconjurător și la acțiunile ​utilizatorului. MoodPet ​are nume propriustări internenivel de foameenergiefericireXP și level.
- +
-Pe lângă funcționalitatea de bazăproiectul include un sistem de personalitatenivel și experiențăprecum ​și salvarea progresului în memoria EEPROM a microcontrollerului.+
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-MoodPet funcționează pe baza unei mașini ​de stări care controlează comportamentul companionului virtual.+La pornire, utilizatorul intră în meniul ​de alegere a numelui. Numele este introdus literă cu literă folosind cele patru butoane.
  
-Stările principale sunt:+Funcționalitatea butoanelor în meniul de nume:
  
-  * HAPPY +  * Buton 1 - crește litera curentă 
-  * HUNGRY +  * Buton 2 - scade litera curentă 
-  * SLEEPY +  * Buton 3 - adaugă litera în nume 
-  * ANGRY +  * Buton 4 - confirmă numele
-  * PLAYING+
  
-Utilizatorul poate interacționa cu MoodPet folosind trei butoane+După confirmarea numelui, MoodPet intră în meniul principal de informații. Aici sunt afișate mai multe pagini ​cu informații despre pet și despre mediul înconjurător. 
-  * Feed + 
-  * Play +În meniul principal: 
-  * Sleep+ 
 +  * Buton 1 - intră în meniul de hrănire 
 +  * Buton 2 - pornește mini-game-ul de dexteritate 
 +  * Buton 4 - schimbă pagina de informații
  
 MoodPet își modifică starea în funcție de: MoodPet își modifică starea în funcție de:
-  * nivelul de lumină ambientală+
   * temperatura detectată   * temperatura detectată
-  * timpul ​de inactivitate+  * umiditatea ambientală 
 +  * nivelul ​de lumină 
 +  * nivelul de foame 
 +  * nivelul de energie 
 +  * nivelul de fericire
   * interacțiunea utilizatorului   * interacțiunea utilizatorului
  
-Sistemul include+Stările principale sunt
-  * sistem de emoții și stări + 
-  * sistem de energie și foame +  * HAPPY 
-  * mod zi/noapte +  * CALM 
-  * sistem de personalitate aleatorie +  * HUNGRY 
-  * sistem de nivel și experiență +  * SLEEPY 
-  * mini-game pentru creșterea nivelului de fericire +  * SAD 
-  * salvarea progresului în EEPROM+  * ANGRY
  
 ===== Schema bloc ===== ===== Schema bloc =====
  
 {{ :​pm:​prj2026:​alexandru.jipa2803:​moodpet_schema_bloc.png?​700 |Schema bloc MoodPet }} {{ :​pm:​prj2026:​alexandru.jipa2803:​moodpet_schema_bloc.png?​700 |Schema bloc MoodPet }}
 +
 +===== Prototip =====
 +
 +{{ :​pm:​prj2026:​alexandru.jipa2803:​moodpet_prototip.png?​700 |MoodPet - prototip initial }}
 +
 +==== Video demonstrativ ====
 +
 +[[https://​github.com/​FlorinBadilas/​MoodPet/​blob/​main/​demo/​moodpet_hardware.mp4|MoodPet - video demonstrativ hardware]]
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 53: Line 65:
 ^ Componentă ^ Model ^ Rol ^ ^ Componentă ^ Model ^ Rol ^
 | Microcontroller | ATmega328P-XMINI | Unitate centrală de control | | Microcontroller | ATmega328P-XMINI | Unitate centrală de control |
-| Display LCD | LCD 16x2 I2C | Afișare ​stare și informații |+| Display LCD | LCD 16x2 I2C | Afișare ​meniu, status ​și informații |
 | Senzor temperatură | DHT11 | Detectare temperatură și umiditate | | Senzor temperatură | DHT11 | Detectare temperatură și umiditate |
 | Senzor lumină | TEMT6000 | Detectare lumină ambientală | | Senzor lumină | TEMT6000 | Detectare lumină ambientală |
-| LED RGB | CJMCU RGB LED Module | Feedback vizual pentru stări |+| LED RGB | CJMCU RGB LED Module | Feedback vizual pentru stări ​și joc |
 | Buzzer | Active Buzzer 5V | Feedback sonor | | Buzzer | Active Buzzer 5V | Feedback sonor |
-| Butoane | Push Button 6x6x6 | Interacțiune ​utilizator ​|+| Butoane | Push Button 6x6x6 | Control meniu și interacțiune |
 | Breadboard | 830 puncte | Prototipare | | Breadboard | 830 puncte | Prototipare |
 | Fire jumper | Dupont wires | Conexiuni | | Fire jumper | Dupont wires | Conexiuni |
Line 64: Line 76:
 ==== Conexiuni principale ==== ==== Conexiuni principale ====
  
-  * DHT11 DATA → D2 +  * DHT11 DATA → PD2 
-  * Buton Feed → D3 +  * Buzzer ​→ PD4 
-  * Buton Play → D4 +  * RGB RED → PD5 
-  * Buton Sleep → D5 +  * RGB GREEN → PD6 
-  * Buzzer ​→ D6 +  * RGB BLUE → PD7 
-  * LED RGB → D9, D10, D11 +  * Buton → PB0 
-  * TEMT6000 OUT → A0 +  * Buton → PB1 
-  * LCD SDA → SDA +  * Buton 3 → PB2 
-  * LCD SCL → SCL+  * Buton 4 → PB3 
 +  * TEMT6000 OUT → PC0 / A0 
 +  * LCD SDA → PC4 / SDA 
 +  * LCD SCL → PC5 / SCL
  
 ===== Software Design ===== ===== Software Design =====
Line 86: Line 101:
 ^ Periferic ^ Utilizare ^ ^ Periferic ^ Utilizare ^
 | ADC | Citire senzor TEMT6000 | | ADC | Citire senzor TEMT6000 |
-| GPIO | Butoane ​și LED RGB |+| GPIO | ButoaneLED RGB și buzzer ​|
 | TWI / I2C | Comunicare LCD | | TWI / I2C | Comunicare LCD |
-EEPROM ​Salvare progres ​și stare +Timer / millis ​Actualizare stări ​și joc 
-Timer Actualizare stări și evenimente ​|+DHT library ​Citire temperatură și umiditate ​|
  
 ==== Structura software ==== ==== Structura software ====
  
-  ​Citirea ​periodică a senzorilor +Software-ul proiectului este organizat modular, fiecare componentă importantă fiind controlată prin funcții separate. Logica principală este implementată în jurul unei mașini de stări (state machine), care gestionează atât meniurile, cât și comportamentul companionului virtual. 
-  * Actualizarea stării companionului ​virtual + 
-  * Gestionarea sistemului ​de emoții +Fluxul principal al aplicației este: 
-  * Controlul afișajului LCD + 
-  * Controlul LED-ului RGB +  ​citirea ​periodică a senzorilor 
-  * Generarea efectelor sonore +  * actualizarea statisticilor companionului 
-  * Gestionarea ​mini-game-ului +  * calcularea mood-ului 
-  * Salvarea ​și încărcarea progresului ​din EEPROM+  * aplicarea efectelor vizuale și sonore 
 +  * gestionarea meniului activ 
 +  * afișarea informațiilor pe LCD 
 + 
 +Pentru actualizarea periodică a sistemului a fost folosit millis() în locul unor delay-uri mari. Această abordare permite rularea simultană a mai multor sisteme fără blocarea programului principal. 
 + 
 +==== Implementarea meniurilor ==== 
 + 
 +Interfața utilizatorului este organizată sub forma mai multor meniuri: 
 + 
 +  * NAME_MENU 
 +  * INFO_MENU 
 +  * FEED_MENU 
 +  * PLAY_MENU 
 + 
 +Fiecare meniu are propriul comportament și propriile funcții asociate butoanelor. 
 + 
 +În meniul de nume, utilizatorul poate construi numele companionului literă cu literă folosind cele patru butoane. Litera curentă este modificată incremental,​ iar confirmarea finalizează procesul și trece în meniul principal. 
 + 
 +În meniul principal sunt afișate mai multe pagini de informații deoarece LCD-ul de 16x2 caractere nu permite afișarea simultană a tuturor datelor. Navigarea între pagini este realizată folosind Butonul 4. 
 + 
 +==== Debounce pentru butoane ==== 
 + 
 +Pentru butoane a fost implementat debounce software. 
 + 
 +Butoanele mecanice produc oscilații electrice foarte scurte în momentul apăsării, ceea ce poate genera mai multe detectări pentru o singură apăsare. 
 + 
 +Pentru a evita această problemă, fiecare apăsare este verificată astfel: 
 + 
 +  * se detectează tranziția HIGH → LOW 
 +  * se aplică un delay scurt 
 +  * se verifică din nou starea butonului 
 +  * doar apoi apăsarea este considerată validă 
 + 
 +Astfel sunt eliminate apăsările multiple accidentale. 
 + 
 +==== Calcularea mood-ului ==== 
 + 
 +Mood-ul ​companionului ​nu este bazat pe o singură condiție, ci pe un sistem intern de scor. 
 + 
 +Scorul este influențat de: 
 + 
 +  * nivelul ​de foame 
 +  * energia rămasă 
 +  * temperatura 
 +  * umiditatea 
 +  * lumina ambientală 
 +  * nivelul de happiness 
 + 
 +Fiecare factor aplică penalizări sau bonusuri asupra scorului total. Această abordare produce un comportament mai natural și mai variat decât folosirea unor praguri fixe. 
 + 
 +Exemple: 
 + 
 +  * temperatură foarte mare → scade scorul 
 +  * foame ridicată → scade scorul 
 +  * lumină redusă și energie mică → SLEEPY 
 +  * happiness mare și condiții bune → HAPPY 
 + 
 +==== Sistemul de statistici ==== 
 + 
 +MoodPet utilizează mai multe statistici interne: 
 + 
 +  * hunger 
 +  * energy 
 +  * happiness 
 +  * XP 
 +  * level 
 + 
 +Aceste valori sunt actualizate periodic. 
 + 
 +Foamea crește automat în timp, energia scade, iar happiness-ul este influențat atât de mediul exterior, cât și de interacțiunea utilizatorului. 
 + 
 +Hrănirea companionului reduce foamea și oferă bonus de happiness și XP. O porție mai mare oferă bonus mai mare, dar reduce puțin energia. 
 + 
 +==== Mini-game de dexteritate ==== 
 + 
 +Mini-game-ul este implementat folosind o a doua mașină de stări: 
 + 
 +  * PLAY_START 
 +  * PLAY_WAIT 
 +  * PLAY_SIGNAL 
 + 
 +La pornirea jocului: 
 + 
 +  * LED-ul RGB este stins 
 +  * sistemul generează un timp random folosind random() 
 +  * după expirarea timpului, LED-ul devine verde 
 +  * utilizatorul trebuie să apese rapid Butonul 1 
 + 
 +Timpul de reacție este măsurat folosind millis(). 
 + 
 +În funcție de timpul de reacție: 
 + 
 +  * utilizatorul primește happiness și XP 
 +  * sau pierde happiness dacă reacționează prea târziu ori prea devreme 
 + 
 +==== Controlul LED-ului RGB și buzzerului ==== 
 + 
 +LED-ul RGB oferă feedback vizual pentru mood și pentru mini-game. 
 + 
 +Exemple: 
 + 
 +  * verde → HAPPY 
 +  * albastru → SLEEPY 
 +  * roșu → ANGRY 
 +  * verde aprins → semnal pentru joc 
 + 
 +Buzzerul este folosit pentru: 
 + 
 +  * confirmări de meniu 
 +  * level up 
 +  * erori 
 +  * feedback în mini-game 
 + 
 +===== Meniuri implementate ===== 
 + 
 +==== Meniul de nume ==== 
 + 
 +La pornire, utilizatorul alege numele companionului virtual. 
 + 
 +  * Buton 1 litera următoare 
 +  * Buton 2 - litera anterioară 
 +  * Buton 3 - adaugă litera selectată 
 +  * Buton 4 - confirmă numele 
 + 
 +==== Meniul principal ==== 
 + 
 +Pagini afișate: 
 + 
 +  * nume + mood 
 +  * temperatură,​ umiditate ​și lumină 
 +  * food, energy și happiness 
 +  * level, XP și timp de funcționare 
 + 
 +==== Meniul de hrănire ==== 
 + 
 +  * Buton 2 - scade porția 
 +  * Buton 3 - crește porția 
 +  * Buton 4 - confirmă hrănirea 
 + 
 +==== Mini-game de dexteritate ==== 
 + 
 +Mini-game-ul este pornit cu Butonul 2 din meniul principal. 
 + 
 +Utilizatorul trebuie să reacționeze rapid după aprinderea LED-ului verde pentru a primi bonus de happiness și XP.
  
 ===== State Machine ===== ===== State Machine =====
  
-MoodPet utilizează ​mașină de stări ​pentru gestionarea comportamentului companionului virtual.+MoodPet utilizează ​două mașini de stări
 + 
 +Prima controlează meniurile principale:​ 
 + 
 +  * NAME_MENU 
 +  * INFO_MENU 
 +  * FEED_MENU 
 +  * PLAY_MENU 
 + 
 +A doua controlează mini-game-ul:​
  
-Flux principal:+  * PLAY_START 
 +  * PLAY_WAIT 
 +  * PLAY_SIGNAL
  
-  * HAPPY → HUNGRY → ANGRY +Această abordare permite separarea logicii și organizarea mai clară a codului.
-  * HAPPY → SLEEPY +
-  * SLEEPY → HAPPY +
-  * PLAYING → HAPPY+
  
-===== Rezultate ​așteptate ​=====+===== Rezultate ​obținute ​=====
  
-Rezultatul final va fi un companion digital interactiv capabil să reacționeze la mediu și la utilizator prin efecte vizualesonore și modificări de comportament.+Până în acest stadiuproiectul permite:
  
-MoodPet va combina senzori, periferice ​și logică embedded pentru realizarea unui sistem ​interactiv ​și creativ bazat pe microcontroller.+  * alegerea numelui companionului virtual 
 +  * afișarea mai multor pagini pe LCD 
 +  * citirea temperaturii ​și umidității cu DHT11 
 +  * citirea luminii ambientale cu TEMT6000 
 +  * controlul LED-ului RGB în funcție de mood 
 +  * feedback sonor prin buzzer 
 +  * meniuri interactive bazate pe butoane 
 +  * mini-game de dexteritate 
 +  * sistem ​de mood, food, energy ​și happiness 
 +  * sistem de XP și level
  
 ===== Concluzii ===== ===== Concluzii =====
  
-Proiectul urmărește dezvoltarea unui sistem embedded interactiv care combină senzori și periferice ​pentru ​simularea comportamentului ​unui companion virtual. ​MoodPet evidențiază utilizarea practică a microcontrollerului pentru citirea mediuluiprocesarea datelor ​și controlul dispozitivelor externe.+MoodPet este un sistem embedded interactiv care combină senzori, meniuri ​și logică software ​pentru ​a simula comportamentul ​unui companion virtual. ​Proiectul utilizează tehnici de programare embedded precum state machinedebounce software, actualizare non-blocking cu millis() și control hardware prin GPIO și ADC.
  
 ===== Download ===== ===== Download =====
  
-  * Cod sursă +  * [[https://​github.com/​FlorinBadilas/​MoodPet|Cod sursă ​MoodPet - GitHub]] 
-  * Scheme hardware +  * [[https://​github.com/​FlorinBadilas/​MoodPet/​blob/​main/​demo/​moodpet_hardware.mp4|Video demonstrativ]] 
-  * Imagini proiect +  * Schema bloc - disponibilă în secțiunea Schema bloc 
-  * Documentație+  * Imagini prototip - disponibile în secțiunea Prototip
  
 ===== Jurnal ===== ===== Jurnal =====
  
-  * 09.05.2026 - Alegerea temei proiectului +  * 09.05.2026 - Alegerea temei și stabilirea componentelor necesare 
-  * 09.05.2026 - Alegerea componentelor hardware +  * 10.05.2026 - Crearea paginii OCW și realizarea schemei bloc 
-  * 09.05.2026 - Realizarea documentației ​inițiale+  * 11.05.2026 - Testarea componentelor principale și realizarea prototipului ​inițial 
 +  * 12.05.2026 - Implementarea meniului de nume, meniului de hrănire și mini-game-ului de dexteritate
  
 ===== Bibliografie / Resurse ===== ===== Bibliografie / Resurse =====
  
-  * Datasheet ​ATmega328P +  * [[https://​www.microchip.com/​en-us/​product/​atmega328p|ATmega328P Datasheet]] 
-  * Datasheet ​DHT11 +  * [[https://​platformio.org/​|PlatformIO]] 
-  * Datasheet TEMT6000 +  * [[https://​github.com/​adafruit/​DHT-sensor-library|Adafruit DHT Sensor Library]] 
-  * Documentație PlatformIO +  * [[https://​github.com/​johnrickman/​LiquidCrystal_I2C|LiquidCrystal ​I2C Library]]
-  * Documentație LCD I2C+
pm/prj2026/alexandru.jipa2803/florin.badilas.1778279104.txt.gz · Last modified: 2026/05/09 01:25 by florin.badilas
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