Autor: Florin Bădilaș
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 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.
La pornire, utilizatorul intră în meniul de alegere a numelui. Numele este introdus literă cu literă folosind cele patru butoane.
Funcționalitatea butoanelor în meniul de nume:
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.
În meniul principal:
MoodPet își modifică starea în funcție de:
Stările principale sunt:
| Componentă | Model | Rol |
|---|---|---|
| Microcontroller | ATmega328P-XMINI | Unitate centrală de control |
| Display LCD | LCD 16×2 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 |
| 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 |
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:
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.
Interfața utilizatorului este organizată sub forma mai multor meniuri:
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 16×2 caractere nu permite afișarea simultană a tuturor datelor. Navigarea între pagini este realizată folosind Butonul 4.
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:
Astfel sunt eliminate apăsările multiple accidentale.
Mood-ul companionului nu este bazat pe o singură condiție, ci pe un sistem intern de scor.
Scorul este influențat de:
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:
MoodPet utilizează mai multe statistici interne:
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-ul este implementat folosind o a doua mașină de stări:
La pornirea jocului:
Timpul de reacție este măsurat folosind millis().
În funcție de timpul de reacție:
LED-ul RGB oferă feedback vizual pentru mood și pentru mini-game.
Exemple:
Buzzerul este folosit pentru:
La pornire, utilizatorul alege numele companionului virtual.
Pagini afișate:
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.
MoodPet utilizează două mașini de stări:
Prima controlează meniurile principale:
A doua controlează mini-game-ul:
Această abordare permite separarea logicii și organizarea mai clară a codului.
Până în acest stadiu, proiectul permite:
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.