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 00:31]
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 animal ​virtual embedded ​care reacționează la mediul înconjurător ​și la interacțiunea utilizatorului. Proiectul simulează comportamentul unui mic companion digital, asemănător unui Tamagotchi, folosind ​senzori, butoane, afișaj LCD, LED RGB și buzzer.+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.
  
-Scopul proiectului este realizarea unui sistem interactiv ​care își schimbă starea în funcție de lumină, temperatură și acțiunile utilizatorului.+Scopul proiectului este realizarea unui animal virtual ​care reacționează la mediul înconjurător și la acțiunile utilizatorului. MoodPet are nume propriu, stări interne, nivel de foame, energie, fericire, XP și level.
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-MoodPet poate avea mai multe stări: +La pornire, utilizatorul intră în meniul de alegere a numelui. Numele este introdus literă cu literă folosind cele patru butoane.
-  * Happy +
-  * Hungry +
-  * Sleepy +
-  * Sad / Angry+
  
-Utilizatorul poate interacționa cu pet-ul prin butoane: +Funcționalitatea butoanelor în meniul de nume:
-  * Feed - hrănire +
-  * Play - joacă +
-  * Sleep - somn+
  
-Starea ​curentă ​este afișată pe LCD, iar LED-ul RGB și buzzerul oferă feedback vizual și sonor.+  * Buton 1 - crește litera ​curentă 
 +  * Buton 2 - scade litera curentă 
 +  * Buton 3 adaugă litera în nume 
 +  * Buton 4 - confirmă numele
  
-===== Funcționalități principale =====+După confirmarea numelui, MoodPet intră în meniul principal de informații. Aici sunt afișate mai multe pagini cu informații despre pet șdespre mediul înconjurător.
  
-  * Citirea temperaturii și umidității folosind senzor DHT11/​DHT22 +În meniul principal:
-  * Detectarea nivelului de lumină folosind LDR +
-  * Afișarea stării pe LCD 16x2 cu I2C +
-  * Interacțiune prin butoane +
-  * Feedback vizual prin LED RGB +
-  * Feedback sonor prin buzzer +
-  * Sistem de valori internefoame, energie, fericire +
-  * Mod zi/noapte +
-  * Salvarea stării în EEPROM+
  
-===== Componente utilizate =====+  * Buton 1 - intră în meniul de hrănire 
 +  * Buton 2 - pornește mini-game-ul de dexteritate 
 +  * Buton 4 - schimbă pagina de informații
  
-  * Arduino Uno / Arduino Nano / ATmega328P +MoodPet își modifică starea în funcție de:
-  * LCD 16x2 cu modul I2C +
-  * Senzor DHT11 sau DHT22 +
-  * Senzor de lumină LDR +
-  * LED RGB +
-  * Buzzer +
-  * 3 butoane +
-  * Rezistențe 220Ω și 10kΩ +
-  * Breadboard +
-  * Fire jumper+
  
-===== Schema ​de legare =====+  * temperatura detectată 
 +  * umiditatea ambientală 
 +  * nivelul ​de lumină 
 +  * nivelul de foame 
 +  * nivelul de energie 
 +  * nivelul de fericire 
 +  * interacțiunea utilizatorului
  
-==== LCD 16x2 I2C ====+Stările principale sunt:
  
-^ LCD I2C ^ Microcontroller ^ +  * HAPPY 
-| VCC | 5V | +  * CALM 
-| GND | GND | +  * HUNGRY 
-| SDA | A4 | +  * SLEEPY 
-| SCL | A5 |+  * SAD 
 +  * ANGRY
  
-==== DHT11 / DHT22 ====+===== Schema bloc =====
  
-^ DHT ^ Microcontroller ^ +{{ :​pm:​prj2026:​alexandru.jipa2803:​moodpet_schema_bloc.png?​700 ​|Schema bloc MoodPet }}
-| VCC | 5V | +
-| GND | GND | +
-| DATA | D2 |+
  
-==== LDR ====+===== Prototip =====
  
-LDR-ul este conectat ca divizor de tensiune: +{{ :pm:​prj2026:​alexandru.jipa2803:​moodpet_prototip.png?​700 |MoodPet - prototip initial }}
-  * un picior LDR la 5V +
-  * celălalt picior LDR la A0 +
-  * rezistență de 10kΩ între A0 și GND+
  
-==== LED RGB ====+==== Video demonstrativ ​====
  
-^ LED RGB ^ Microcontroller ^ +[[https://​github.com/​FlorinBadilas/​MoodPet/​blob/​main/​demo/​moodpet_hardware.mp4|MoodPet - video demonstrativ hardware]]
-| R | D9 | +
-| G | D10 | +
-| B | D11 | +
-| Comun | GND |+
  
-==== Buzzer ​====+===== Hardware Design =====
  
-^ Buzzer ^ Microcontroller ^ +==== Lista de piese ====
-| + | D6 | +
-| - | GND |+
  
-==== Butoane ​====+^ Componentă ^ Model ^ Rol ^ 
 +| Microcontroller | ATmega328P-XMINI | Unitate centrală de control | 
 +| Display LCD | LCD 16x2 I2C | Afișare meniu, status și informații | 
 +| Senzor temperatură | DHT11 | Detectare temperatură și umiditate | 
 +| Senzor lumină | TEMT6000 | Detectare lumină ambientală | 
 +| LED RGB | CJMCU RGB LED Module | Feedback vizual pentru stări și joc | 
 +| Buzzer | Active Buzzer 5V | Feedback sonor | 
 +Butoane ​| Push Button 6x6x6 | Control meniu și interacțiune | 
 +| Breadboard | 830 puncte | Prototipare | 
 +| Fire jumper | Dupont wires | Conexiuni |
  
-^ Buton ^ Microcontroller ^ +==== Conexiuni principale ====
-| Feed | D3 | +
-| Play | D4 | +
-| Sleep | D5 |+
  
-Celălalt picior al fiecărui buton se leagă la GND. În cod se va folosi INPUT_PULLUP.+  * DHT11 DATA → PD2 
 +  * Buzzer → PD4 
 +  * RGB RED → PD5 
 +  * RGB GREEN → PD6 
 +  * RGB BLUE → PD7 
 +  * Buton 1 → PB0 
 +  * Buton 2 → PB1 
 +  * Buton 3 → PB2 
 +  * Buton 4 → PB3 
 +  * TEMT6000 OUT → PC0 / A0 
 +  * LCD SDA → PC4 / SDA 
 +  * LCD SCL → PC5 / SCL
  
-===== Concluzie ​=====+===== Software Design ​=====
  
-MoodPet este un proiect interactiv care combină senzorilogică de control ​și feedback vizual-sonor pentru ​a crea un animal ​virtual ​fizicProiectul evidențiază utilizarea microcontrollerului ​pentru ​citirea mediuluiprocesarea datelor ​și controlul ​perifericelor.+==== Mediu de dezvoltare ==== 
 + 
 +  * PlatformIO 
 +  * AVR-GCC 
 +  * Limbaj C/C++ 
 + 
 +==== Periferice utilizate ==== 
 + 
 +^ Periferic ^ Utilizare ^ 
 +| ADC | Citire senzor TEMT6000 | 
 +| GPIO | Butoane, LED RGB și buzzer | 
 +| TWI / I2C | Comunicare LCD | 
 +| Timer / millis | Actualizare stări și joc | 
 +| DHT library | Citire temperatură și umiditate | 
 + 
 +==== Structura software ==== 
 + 
 +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. 
 + 
 +Fluxul principal al aplicației este: 
 + 
 +  * citirea periodică a senzorilor 
 +  * actualizarea statisticilor companionului 
 +  * calcularea mood-ului 
 +  * 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 timpuluiLED-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 ===== 
 + 
 +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:​ 
 + 
 +  * PLAY_START 
 +  * PLAY_WAIT 
 +  * PLAY_SIGNAL 
 + 
 +Această abordare permite separarea logicii și organizarea mai clară a codului. 
 + 
 +===== Rezultate obținute ===== 
 + 
 +Până în acest stadiuproiectul permite: 
 + 
 +  * 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 ===== 
 + 
 +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 machine, debounce software, actualizare non-blocking cu millis() și control hardware prin GPIO și ADC. 
 + 
 +===== Download ===== 
 + 
 +  * [[https://​github.com/​FlorinBadilas/​MoodPet|Cod sursă MoodPet - GitHub]] 
 +  * [[https://​github.com/​FlorinBadilas/​MoodPet/​blob/​main/​demo/​moodpet_hardware.mp4|Video demonstrativ]] 
 +  * Schema bloc - disponibilă în secțiunea Schema bloc 
 +  * Imagini prototip - disponibile în secțiunea Prototip 
 + 
 +===== Jurnal ===== 
 + 
 +  * 09.05.2026 - Alegerea temei și stabilirea componentelor necesare 
 +  * 10.05.2026 - Crearea paginii OCW și realizarea schemei bloc 
 +  * 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 ===== 
 + 
 +  * [[https://​www.microchip.com/​en-us/​product/​atmega328p|ATmega328P Datasheet]] 
 +  * [[https://​platformio.org/​|PlatformIO]] 
 +  * [[https://​github.com/​adafruit/​DHT-sensor-library|Adafruit DHT Sensor Library]] 
 +  * [[https://​github.com/​johnrickman/​LiquidCrystal_I2C|LiquidCrystal I2C Library]]
pm/prj2026/alexandru.jipa2803/florin.badilas.1778275860.txt.gz · Last modified: 2026/05/09 00:31 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