This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:catalin.aldobritei [2025/05/24 18:22] catalin.aldobritei [Hardware Design] |
pm:prj2025:rnedelcu:catalin.aldobritei [2025/05/28 12:38] (current) catalin.aldobritei [Software Design] |
||
---|---|---|---|
Line 40: | Line 40: | ||
1. Microcontroller Arduino | 1. Microcontroller Arduino | ||
+ | |||
- Model: Arduino UNO (ATmega328P) | - Model: Arduino UNO (ATmega328P) | ||
+ | |||
- Tensiune operare: 5V | - Tensiune operare: 5V | ||
+ | |||
- Memorie: 32KB Flash, 2KB SRAM, 1KB EEPROM | - Memorie: 32KB Flash, 2KB SRAM, 1KB EEPROM | ||
2. Display LCD I2C (16x2) | 2. Display LCD I2C (16x2) | ||
+ | |||
- Specificații: 16 coloane × 2 rânduri | - Specificații: 16 coloane × 2 rânduri | ||
+ | |||
- Protocol: I2C (Inter-Integrated Circuit) | - Protocol: I2C (Inter-Integrated Circuit) | ||
+ | |||
- Tensiune: 5V | - Tensiune: 5V | ||
+ | |||
- Pini conectați: | - Pini conectați: | ||
- SDA → A4 | - SDA → A4 | ||
Line 55: | Line 62: | ||
3. LED-uri Indicator | 3. LED-uri Indicator | ||
+ | |||
LED Verde (Succes) | LED Verde (Succes) | ||
+ | |||
- Pin Arduino: 4 | - Pin Arduino: 4 | ||
+ | |||
LED Roșu (Eroare/Timp Expirat) | LED Roșu (Eroare/Timp Expirat) | ||
+ | |||
- Pin Arduino: 5 | - Pin Arduino: 5 | ||
4. Butoane de Control | 4. Butoane de Control | ||
+ | |||
Buton Selecție | Buton Selecție | ||
+ | |||
- Pin Arduino: 2 | - Pin Arduino: 2 | ||
+ | |||
Buton Confirmare | Buton Confirmare | ||
+ | |||
- Pin Arduino: 3 | - Pin Arduino: 3 | ||
5. Buzzer Audio | 5. Buzzer Audio | ||
+ | |||
- Pin Arduino: A0 | - Pin Arduino: A0 | ||
+ | |||
- Tip: Buzzer pasiv | - Tip: Buzzer pasiv | ||
+ | |||
- Tensiune: 5V | - Tensiune: 5V | ||
+ | |||
- Control: functia `tone()` | - Control: functia `tone()` | ||
Line 78: | Line 97: | ||
{{:pm:prj2025:rnedelcu:aldobriteicatalin.jpg?200|}} | {{:pm:prj2025:rnedelcu:aldobriteicatalin.jpg?200|}} | ||
- | </note> | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 84: | 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 94: | 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> | ||