This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:catalin.aldobritei [2025/05/13 10:17] catalin.aldobritei [Descriere generală] |
pm:prj2025:rnedelcu:catalin.aldobritei [2025/05/28 12:38] (current) catalin.aldobritei [Software Design] |
||
---|---|---|---|
Line 3: | Line 3: | ||
<note tip> | <note tip> | ||
- | Prezentarea pe scurt a proiectului vostru: | + | Am creat un joc cu Arduino care îți permite să ghicești numere. Ai un ecran care îți arată informațiile, două butoane pentru a juca, LED-uri care se aprind în diferite culori și un buzzer care face sunete. |
- | Jocul consta in ghicirea unui numar ales aleator avand timp limitat si diferite hint-uri afisate pe LCD. Acesta are mai multe dificultati si de mod multi player care va face jocul mai interesant. | + | Jocul funcționează in felul urmator: alegi cât de greu vrei să fie - poți ghici numere de la 1 la 10 dacă vrei să fie ușor, de la 1 la 100 pentru mediu, sau de la 1 la 1000 dacă vrei să fie greu. Fiecare nivel îți dă timp diferit să ghicești - de la 2 minute (cel ușor) până la 1 minut (cel greu). |
- | Scopul proiectului este de a crea o experienta de joc interactiva. | + | Buzzer-ul face sunete diferite să îți arate cât de aproape ești. Dacă ești foarte aproape, sunetele sunt rapide și înalte. Dacă ești departe, sunetele sunt lente și joase. |
- | Ideea de baza a pornit de la jocul clasic "Higher/Lower", dar a fost extinsa pentru a include mai multe caracteristici si provocari | + | LED-ul verde se aprinde când câștigi, cel roșu când greșești, și sunt melodii speciale pentru când câștigi sau pierzi. Introduci numărul cifră cu cifră apăsând butoanele, și poți să încerci din nou de câte ori vrei fără să oprești jocul. |
</note> | </note> | ||
Line 12: | Line 12: | ||
<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ă. | + | O schema bloc: |
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | {{:pm:prj2025:rnedelcu:schema_bloc_aldobritei_catalin.png?200|}} |
- | Implementarea jocului Guess the number folosind un display LCD, 3 butoane si LED-uri. Pe display vor aparea diferite hint-uri pentru joc. Scopul jocului este de a ghici numarul ales intr-un timp limitat folosind indicatiile de pe display. | + | Componente Hardware |
+ | - Arduino (microcontroller principal) | ||
+ | - LCD I2C 16x2 (afișare informații) | ||
+ | - 2 LED-uri (feedback vizual - verde/roșu) | ||
+ | - 2 Butoane (input utilizator - selecție/confirmare) | ||
+ | - Buzzer (feedback audio) | ||
+ | |||
+ | Module Software | ||
+ | - Modul Inițializare - configurare hardware și meniu principal | ||
+ | - Modul Dificultate - selecție nivel și setare parametri | ||
+ | - Modul Joc Principal - loop principal cu timer și input | ||
+ | - Modul Verificare - logica de ghicire și feedback | ||
+ | - Modul Audio - sisteme de sunete contextuale | ||
+ | |||
+ | Ordinea de executie: | ||
+ | Inițializare → Selecție Dificultate → Joc Activ → Feedback → Reset/Restart | ||
</note> | </note> | ||
Line 22: | Line 37: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | Componente Hardware: |
- | Aici puneţi tot ce ţine de hardware design: | + | |
- | * listă de piese | + | 1. Microcontroller Arduino |
- | * 3 butoane | + | |
- | * display LCD | + | - Model: Arduino UNO (ATmega328P) |
- | * placuta ATMega324p | + | |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | - Tensiune operare: 5V |
- | * diagrame de semnal | + | |
- | * rezultatele simulării | + | - Memorie: 32KB Flash, 2KB SRAM, 1KB EEPROM |
- | </note> | + | |
+ | 2. Display LCD I2C (16x2) | ||
+ | |||
+ | - Specificații: 16 coloane × 2 rânduri | ||
+ | |||
+ | - Protocol: I2C (Inter-Integrated Circuit) | ||
+ | |||
+ | - Tensiune: 5V | ||
+ | |||
+ | - Pini conectați: | ||
+ | - SDA → A4 | ||
+ | - SCL → A5 | ||
+ | - VCC → 5V | ||
+ | - GND → GND | ||
+ | |||
+ | 3. LED-uri Indicator | ||
+ | |||
+ | LED Verde (Succes) | ||
+ | |||
+ | - Pin Arduino: 4 | ||
+ | |||
+ | LED Roșu (Eroare/Timp Expirat) | ||
+ | |||
+ | - Pin Arduino: 5 | ||
+ | |||
+ | 4. Butoane de Control | ||
+ | |||
+ | Buton Selecție | ||
+ | |||
+ | - Pin Arduino: 2 | ||
+ | |||
+ | Buton Confirmare | ||
+ | |||
+ | - Pin Arduino: 3 | ||
+ | |||
+ | 5. Buzzer Audio | ||
+ | |||
+ | - Pin Arduino: A0 | ||
+ | |||
+ | - Tip: Buzzer pasiv | ||
+ | |||
+ | - Tensiune: 5V | ||
+ | |||
+ | - Control: functia `tone()` | ||
+ | |||
+ | {{:pm:prj2025:rnedelcu:hardware_aldobritei_catalin1.png?200|}} | ||
+ | |||
+ | {{:pm:prj2025:rnedelcu:hardware_aldobritei_catalin2.png?200|}} | ||
+ | |||
+ | {{:pm:prj2025:rnedelcu:aldobriteicatalin.jpg?200|}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 37: | Line 102: | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | Mediu de dezvoltare: Arduino IDE |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | Librarii: LiquidCrystal_I2C.h |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
+ | Structuri si algoritmi: | ||
+ | |||
+ | State machine cu stari: diffSelect, gameOver, selectMode pentru controlul fluxului de executie | ||
+ | |||
+ | Timer non-blocking bazat pe millis() pentru countdown-ul in timp real | ||
+ | |||
+ | Debouncing software cu interval de 300ms pentru stabilitatea butoanelor si prevenirea apasarilor multiple | ||
+ | |||
+ | Algoritm de construire progresiva a numarului (cifra cu cifra) adaptat pe dificultate: | ||
+ | |||
+ | Easy (1-10): doar unitati | ||
+ | |||
+ | Medium (1-100): zeci + unitati | ||
+ | |||
+ | Hard (1-1000): sute + zeci + unitati | ||
+ | |||
+ | |||
+ | Generator aleator pentru randomizare cu randomSeed | ||
+ | |||
+ | Sistem de feedback audio adaptat cu frecvente variabile bazate pe proximitatea ghicirii | ||
+ | |||
+ | PWM si tone() pentru controlul buzzer-ului si generarea tonurilor | ||
+ | |||
+ | Algoritm de verificare cu feedback directional (prea mic/prea mare) | ||
+ | |||
+ | Sistem de proximitate inteligent cu praguri adaptive in functie de dificultate | ||
+ | |||
+ | Functii implementate: | ||
+ | |||
+ | setup() – initializare hardware si configurare pin-uri | ||
+ | |||
+ | loop() – bucla principala cu gestionarea starilor | ||
+ | |||
+ | handleDiffSelect() – gestioneaza selectia si confirmarea nivelului de dificultate | ||
+ | |||
+ | initGame() – seteaza parametrii specifici dificultatii (limite, timp, pozitii cifre) | ||
+ | |||
+ | checkTime() – monitorizeaza timer-ul si actualizeaza display-ul in timp real | ||
+ | |||
+ | checkGuess() – compara numarul introdus cu cel ales random si ofera feedback | ||
+ | |||
+ | resetGuess() – reseteaza starea pentru o noua incercare fara restart complet | ||
+ | |||
+ | timeUp() – gestioneaza sfarsitul jocului cand timpul expira | ||
+ | |||
+ | showDiffMenu() – afiseaza meniul principal de selectare dificultate | ||
+ | |||
+ | showDiff() – afiseaza dificultatea curenta selectata | ||
+ | |||
+ | proximitySound() – calculeaza si reproduce feedback audio bazat pe distanta pana la raspuns | ||
+ | |||
+ | winSound() – melodie de victorie cu tonuri crescatoare | ||
+ | |||
+ | failSound() – sunet de esec cu tonuri descrescatoare | ||
+ | |||
+ | quickBeep(), shortBeep(), confirmBeep() – feedback audio pentru actiuni utilizator | ||
</note> | </note> | ||
Line 47: | Line 168: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Proiectul și-a atins toate obiectivele, creând un joc fara probleme. |
+ | |||
+ | |||
+ | |||
+ | |||
+ | Limitări identificate: | ||
+ | |||
+ | -Lipsa persistenței datelor la restart (scoruri, statistici) | ||
+ | |||
+ | -Feedback audio limitat la un singur buzzer (monoton) | ||
+ | |||
+ | -Interface fixă fără personalizare pentru utilizatori | ||
+ | |||
+ | -Dependența de alimentarea externă (fără baterie) | ||
+ | |||
+ | |||
+ | Ce mai poate fi adaugat: | ||
+ | |||
+ | -LED RGB pentru efecte vizuale mai complexe în loc de LED-urile simple | ||
+ | |||
+ | -Card SD pentru salvarea scorurilor și statisticilor de joc | ||
+ | |||
+ | -Mod Multiplayer - doi jucători alternează | ||
+ | |||
+ | -Mod Sprint - ghicește cât mai multe numere în timp limitat | ||
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Proiectul a fost finalizat cu succes, demonstrând funcționarea stabilă a tuturor componentelor și modulelor implementate. Experiența de dezvoltare a oferit cunoștințe practice în programarea Arduino și integrarea sistemelor embedded. | ||
+ | Rezultatele obținute confirmă eficiența soluțiilor adoptate pentru realizarea jocului. | ||
===== Download ===== | ===== 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ă ;-). | + | Arhiva {{:pm:prj2025:rnedelcu:guessthenumber.zip|}} |
- | + | ||
- | 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> | ||