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:19]
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 ​care reacționează la mediul înconjurător și la interacțiunea utilizatorului. Proiectul ​își propune să simuleze comportamentul unui animal virtual folosind un microcontroller ​ATmega328P-XMINI ​împreună cu senzori și module hardware interactive.+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 nivelul de lumină din mediul înconjurător și își modifică starea în funcție de valorile detectate și de acțiunile utilizatorului. MoodPet ​poate deveni fericittristobosit sau flămând și oferă feedback vizual și sonor prin LCDLED RGB și 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 foame, energie, fericireXP și level.
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-MoodPet funcționează similar unui Tamagotchi modernUtilizatorul poate interacționa ​cu pet-ul ​folosind butoane ​dedicate pentru hrănire, joacă și somn.+La pornire, utilizatorul intră în meniul de alegere a numeluiNumele este introdus literă ​cu literă ​folosind ​cele patru butoane.
  
-Proiectul include: +Funcționalitatea butoanelor ​în meniul ​de nume:
-  * sistem de emoții și stări +
-  * sistem de energie și foame +
-  * mod zi/​noapte ​în funcție ​de lumina ambientală +
-  * sistem de nivel și experiență +
-  * personalitate aleatorie +
-  * salvarea progresului folosind memoria EEPROM+
  
-MoodPet va reacționa diferit în funcție de personalitatea generată ​și de modul în care utilizatorul interacționează cu el.+  * 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.
  
-  * Detectarea temperaturii și umidității folosind senzorul DHT11 +În meniul principal:
-  * Detectarea luminii ambientale folosind senzorul TEMT6000 +
-  * Afișarea mesajelor și emoțiilor pe display LCD cu interfață I2C +
-  * Feedback vizual folosind LED RGB +
-  * Feedback sonor folosind buzzer activ +
-  * Interacțiune prin butoane +
-  * Sistem de level și experiență +
-  * Sistem de personalitate +
-  * Salvarea stării în EEPROM +
-  * Mini-game pentru creșterea nivelului de fericire+
  
-===== 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
  
-  * ATmega328P-XMINI +MoodPet își modifică starea în funcție de:
-  * Display LCD 16x2 cu I2C +
-  * Senzor DHT11 +
-  * Senzor TEMT6000 +
-  * Modul LED RGB +
-  * Buzzer activ 5V +
-  * Butoane tactile 6x6x6 +
-  * Breadboard +
-  * Fire jumper +
-  * Rezistoare+
  
-===== Rezultat așteptat =====+  * temperatura detectată 
 +  * umiditatea ambientală 
 +  * nivelul de lumină 
 +  * nivelul de foame 
 +  * nivelul de energie 
 +  * nivelul de fericire 
 +  * interacțiunea utilizatorului
  
-Rezultatul final va fi un companion digital interactiv capabil să reacționeze la mediu și la utilizator ​prin efecte vizuale, sonore și modificări de comportament. ​Proiectul ​combină senzori, ​periferice ​și logică ​embedded ​pentru ​realizarea ​unui sistem interactiv ​și creativ bazat pe microcontroller.+Stările principale sunt: 
 + 
 +  * HAPPY 
 +  * CALM 
 +  * HUNGRY 
 +  * SLEEPY 
 +  * SAD 
 +  * ANGRY 
 + 
 +===== Schema bloc ===== 
 + 
 +{{ :​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 ===== 
 + 
 +==== Lista de piese ==== 
 + 
 +^ 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 | 
 + 
 +==== Conexiuni principale ==== 
 + 
 +  * 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 
 + 
 +===== Software Design ===== 
 + 
 +==== 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 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 ===== 
 + 
 +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 stadiu, proiectul 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.1778278772.txt.gz · Last modified: 2026/05/09 01:19 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