This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:alexandra.londraliu [2025/04/29 09:15] alexandra.londraliu |
pm:prj2025:rnedelcu:alexandra.londraliu [2025/05/27 16:15] (current) alexandra.londraliu [Download] |
||
---|---|---|---|
Line 8: | Line 8: | ||
<note tip> | <note tip> | ||
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | ||
- | |||
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | ||
- | |||
Proiectul se bazeaza pe 3 componente principale: | Proiectul se bazeaza pe 3 componente principale: | ||
* Intreruperi: Detectarea apăsării butoanelor pentru a interacționa cu pet-ul. | * Intreruperi: Detectarea apăsării butoanelor pentru a interacționa cu pet-ul. | ||
* PWM: Controlul unui LED RGB pentru a reflecta starea animalului (fericit/trist). | * PWM: Controlul unui LED RGB pentru a reflecta starea animalului (fericit/trist). | ||
* UART: Comunicarea cu utilizatorul prin consola serială pentru mesaje de stare și comenzi de interacțiune. | * UART: Comunicarea cu utilizatorul prin consola serială pentru mesaje de stare și comenzi de interacțiune. | ||
+ | Modul de interacțiune: | ||
+ | * Butoanele sunt conectate la pinii de întrerupere ai microcontrolerului, iar la apăsarea acestora se activează întreruperile care modifică starea pet-ului. | ||
+ | * LED-ul RGB este controlat prin PWM pentru a reflecta starea pet-ului (verde pentru fericire, roșu pentru tristețe). | ||
+ | * Comunicarea serială prin UART permite utilizatorului să trimită comenzi pentru hrănire sau joacă și vizualizează starea pet-ului. | ||
</note> | </note> | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | + | {{:pm:prj2025:rnedelcu:img_0726.jpg?200|}}<note tip> | |
- | <note tip> | + | |
Lista de piese: | Lista de piese: | ||
* Microcontroler: Arduino UNO | * Microcontroler: Arduino UNO | ||
- | * 2 butoane | + | * 3 butoane |
- | * LED RGB | + | * 2 LED-uri RGB |
- | * Display Nokia | + | * Display Nokia 5110 |
+ | * fire tata-tata | ||
+ | * 2 rezistori | ||
</note> | </note> | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | |||
- | |||
<note tip> | <note tip> | ||
Descrierea codului aplicaţiei (firmware): | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * mediu de dezvoltare: Arduino IDE |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * Limbaj de programare: C++ |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * librării şi surse 3rd-party: |
- | * (etapa 3) surse şi funcţii implementate | + | - SPI.h - Librărie standard Arduino pentru comunicare SPI |
+ | - Adafruit_GFX.h - Librărie grafică pentru afișaje, dezvoltată de Adafruit | ||
+ | - Adafruit_PCD8544.h - Librărie specifică pentru controlul afișajului Nokia 5110 (PCD8544), dezvoltată de Adafruit | ||
+ | * algoritmi principali: | ||
+ | - Sistemul de management al nevoilor: | ||
+ | -- Algoritm de foame: Nivelul de foame crește gradual în timp (5% la fiecare 30 secunde) | ||
+ | -- Algoritm de hrănire: Activat de un buton fizic, reduce nivelul de foame cu 20% pentru fiecare hrănire completă | ||
+ | - Sisteme de animație | ||
+ | -- Animație de dans: Deplasează pisica pe axa Y într-o mișcare oscilantă | ||
+ | -- Animație de alergare: Mișcă pisica pe axa X cu revenire pe partea stângă a ecranului când depășește marginea dreaptă | ||
+ | -- Animație de hrănire: Simulează hrănirea prin căderea obiectului "mâncare" de la partea superioară a ecranului către poziția pisicii | ||
+ | - Sistem de indicare vizuală a stării prin LED-uri | ||
+ | -- LED verde: Indică stare de satisfacție completă, aprins când nivelul de foame este 0% | ||
+ | -- LED roșu: Indică stare de foame critică, aprins când nivelul de foame depășește 70% | ||
+ | - Sistem de interacțiune | ||
+ | -- Interacțiune hardware: Utilizează un buton fizic pentru hrănirea animalului | ||
+ | -- Interacțiune software: Acceptă comenzi prin interfața serială pentru activarea diverselor animații și funcții | ||
+ | - Mini-joc "Prinde Șoriceii": | ||
+ | -- Algoritm de control al jocului: Sistem de stare pentru gestionarea fazelor de joc (în desfășurare, câștigat, pierdut) | ||
+ | -- Algoritm de mișcare a șoricelului: Deplasare pe axa Y cu viteză progresivă crescândă | ||
+ | -- Algoritm de detecție a coliziunilor: Verifică distanța relativă între pisică și șoricel pentru determinarea prinderii | ||
+ | -- Sistem de punctaj: Acordă puncte pentru fiecare șoricel prins și monitorizează progresul | ||
+ | -- Control dual cu butoane: Folosește 2 butoane fizice pentru mișcarea pisicii pe axa X în timpul jocului | ||
+ | * funcţii implementate: | ||
+ | - Funcții principale | ||
+ | -- setup(): Inițializează componentele hardware, afișează mesaje de bun venit, configurează pinii pentru LED-uri și butoane | ||
+ | -- loop(): Buclă principală care verifică comenzile, butoanele, actualizează nivelul de foame și gestionează modul de joc | ||
+ | - Funcții de verificare și procesare | ||
+ | -- checkCommands(): Verifică și procesează comenzile primite prin interfața serială | ||
+ | -- checkButton(): Verifică starea butonului cu debounce pentru a evita citirile false | ||
+ | -- checkHungry(): Actualizează nivelul de foame și generează mesaje de avertizare | ||
+ | -- updateLedStatus(): Controlează starea LED-urilor în funcție de nivelul de foame | ||
+ | - Funcții de joc | ||
+ | -- startGame(): Inițializează variabilele de joc și pornește mini-jocul "Prinde Șoricii" | ||
+ | -- runMouseGame(): Gestionează logica principală a jocului (mișcarea șoricelului, verificarea coliziunilor) | ||
+ | -- checkGameButtons(): Procesează input-ul de la butoanele de control ale jocului cu debounce | ||
+ | -- spawnNewMouse(): Generează un nou șoricel pe o poziție aleatorie și crește progresiv viteza | ||
+ | -- checkCollision(): Verifică dacă pisica a prins șoricelul bazat pe pozițiile relative | ||
+ | -- handleGameWon()/handleGameLost(): Gestionează stările de sfârșit de joc | ||
+ | -- endGame(): Închide jocul și oferă recompense pisicii bazate pe performanță | ||
+ | -- updateGameDisplay(): Actualizează afișajul specific pentru modul de joc | ||
+ | - Funcții de afișare | ||
+ | -- drawCat(): Desenează sprite-ul pisicii și informațiile de stare pe ecran | ||
+ | -- drawHearts(): Desenează inimi decorative animate (opțional) | ||
+ | -- drawFood(): Desenează obiectul "mâncare" în timpul procesului de hrănire | ||
+ | -- updateDisplay(): Actualizează întregul conținut al afișajului în modul normal | ||
+ | -- handleAnimations(): Gestionează toate tipurile de animații (dans, alergare, hrănire) | ||
</note> | </note> | ||
- | |||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Rezultate Obținute: |
- | </note> | + | |
+ | Funcționalități Implementate: | ||
+ | * Animal virtual complet: pisică interactivă cu sistem de foame | ||
+ | * Hrănire prin buton: reduce foamea cu 20% | ||
+ | * Animații multiple - dans, alergare, hrănire | ||
+ | * Mini-joc "Prinde Șoarecii" - cu 2 butoane de control | ||
+ | * Feedback vizual - LED verde/roșu + afișaj Nokia 5110 | ||
+ | * Control dual - comenzi seriale + butoane fizice | ||
+ | |||
+ | Performanță Tehnică: | ||
+ | * Memorie optimizată - funcționează pe Arduino Uno | ||
+ | * Interfață responsivă - debouncing 50ms pentru butoane | ||
+ | * Update automat - foame +5% la 30 secunde | ||
+ | * Sistem de recompense - jocul reduce foamea cu 40% | ||
+ | |||
+ | Rezultat Final: | ||
+ | Tamagotchi funcțional cu 7 comenzi, 3 butoane, mini-joc interactiv și gestionare completă a stării animalului virtual!</note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | ||
<note warning> | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | {{:pm:prj2025:rnedelcu:alexandra_londraliu.zip|}}===== Download ===== |
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | ||
</note> | </note> | ||
Line 59: | Line 116: | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 12.05: am primit comanda cu piesele necesare |
+ | * 13.05: este gata o parte din hardware | ||
+ | * 16.05: am ars lcd-ul si am dat comanda de altul | ||
+ | * 18.05: am facut rost de alt lcd | ||
+ | * 20.05: gata o parte din software | ||
+ | * 22.05: gata software & hardware | ||
+ | * 25.05: am infrumusetat aspectul vizual al proiectului | ||
</note> | </note> | ||