Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/23 20:18]
alexandru.lintmaier [Hardware Design]
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/28 12:33] (current)
alexandru.lintmaier [Download]
Line 3: Line 3:
  
 <note tip> <note tip>
-Proiectul ​meu constă în realizarea unui joc de tip Spânzurătoarea, ​implementat pe o platformă ​cu microcontroler (ex: Arduino UNO)Utilizatorul are la dispoziție X de secunde pentru a ghici un cuvânt ales aleator dintr-o bază de date predefinită. Jocul este controlat ​cu ajutorul a două butoane: unul pentru navigarea prin literele alfabetului ('​A'​-'​Z'​) ​și unul pentru ​selectarea literei curente. Dacă litera selectată se regăsește în cuvânt, ​se completează spațiile corespunzătoare și se aprinde un LED galben. La finaldacă jucătorul reușește să ghicească cuvântulLED-ul devine verde; dacă timpul expiră, se aprinde LED-ul roșu.+Proiectul ​este o implementare fizică a celebrului ​joc de ghicit cuvinte „Spânzurătoarea"realizat ​cu microcontrollerul ​Arduino UNO și afișat pe un ecran LCD 16x2Jucătorul navighează prin alfabet ​cu ajutorul a trei butoane și selectează litere ​pentru ​a ghici un cuvânt ​din categorii predefinite (AnimaleFructeȚărisau Aleator)
  
-De asemeneaproiectul are si urmatoarele optiuni:+Sistemul oferă feedback vizual prin LED-uri (verde pentru succesroșu pentru eșec) și feedback sonor prin buzzer. Jocul include mai multe niveluri de dificultate (Ușor, Mediu, Greu) și permite jucătorului să facă maximum 6 greșeli înainte de a pierde.
  
-- sa pot tine apasat pe unul din butoate pentru a trece mai repede prin literele de la A la Z +Scopul proiectului este să combine ​concepte esențiale ​de programare embedded: interfațarea ​cu LCD prin I2Cgestionarea input-urilor prin butoanefeedback vizual/​audio ​și implementarea unei logici ​de joc interactive.
- +
-- jucatorul isi poate introduce numele la inceputul jocului. Astfel, se salveaza numele si highscore-ul pe un card SD sau in memoria interna +
- +
-- mai multe nivele de dificultate din care se pote alege la inceput +
- +
-Am ales acest proiect pentru a îmbina ​concepte esențiale ​în lucrul ​cu microcontrolere:​ maparea butoanelorutilizarea temporizatoruluiafisarea pe LCD și interacțiunea utilizator-hardware. Proiectul este distractiv, ușor de extins și oferă o bază solidă pentru învățarea noțiunilor embedded.+
 </​note>​ </​note>​
  
Line 19: Line 13:
  
 <note tip> <note tip>
-Proiectul este alcătuit din următoarele module:+Schema bloc:
  
-Control input (butoane) – pentru navigarea prin alfabet și selectarea literelor.+{{:​pm:​prj2025:​rnedelcu:​schema_bloc_lint.png?200|}}
  
-Display LCD – pentru afișarea cuvântului parțial ghicit și a timpului rămas. 
  
-LED RGB – pentru semnalizarea stării jocului: progres ​(galben), câștig (verde), pierdere (roșu).+Sistemul se bazează pe microcontrollerul Arduino UNO (ATmega328Pcare acționează ca unitate de control principală. Comunicarea cu LCD-ul se realizează prin protocolul I2C la adresa 0x27reducând numărul de pini necesari.
  
-Timer – pentru ​contorizarea timpului limită de joc (90 secunde).+La pornire, jucătorul selectează categoria de cuvinte și nivelul de dificultate folosind butoanele LEFT/​RIGHT ​pentru ​navigare și SELECT pentru confirmare. Sistemul alege aleator un cuvânt din categoria selectată și afișează numărul de litere.
  
-Memorie statică – cuvinte prestabilite (hardcoded în cod sau extrase din EEPROM/SD).+În timpul jocului, jucătorul navighează prin alfabetul A-Z cu butoanele LEFT/RIGHT și selectează litere cu butonul SELECT. Fiecare literă ghicită corect este afișată pe pozițiile corespunzătoare,​ iar greșelile sunt contorizate și vizualizate prin desenarea progresivă a spânzurătorii pe LCD.
  
-Exemplu ​de schemă bloc: http://​www.robs-projects.com/​mp3proj/​newplayer.html+Jocul se termină prin victorie (toate literele ghicite) sau înfrângere (6 greșeli), cu posibilitatea ​de restart automată.
 </​note>​ </​note>​
  
Line 37: Line 30:
  
 <note tip> <note tip>
-Componente folosite:+| Nume Componentă | Cantitate | Descriere | 
 +|---|---|---| 
 +| Arduino UNO R3 | 1 | Microcontroller ATmega328P | 
 +| LCD 16x2 cu I2C | 1 | Display cu interfață I2C (adresa 0x27) | 
 +| Butoane tactile | 3 | LEFT, SELECT, RIGHT | 
 +| LED Verde | 1 | Feedback pozitiv | 
 +| LED Roșu | 1 | Feedback negativ | 
 +| Buzzer Pasiv | 1 | Feedback audio | 
 +| Rezistențe 220Ω | 3 | Pentru LED-uri si Buzzer | 
 +| Rezistențe 10kΩ | 3 | Pull-down pentru butoane | 
 +| Breadboard | 1 | Montaj circuit | 
 +| Fire de conectare | Diverse | Conexiuni |
  
-Microcontroler:​ Arduino UNO / ATmega328P 
  
-2 butoane (Select / Navigare)+**Funcționalitate hardware & conexiuni**
  
-LED RGB+1. Arduino UNO 
 +   - Rol: controler principal cu microcontroller ATmega328P 
 +   - Alimentare: 5V prin USB sau alimentator extern
  
-LCD 16x2 (I2C sau paralel)+2. LCD 16x2 cu I2C 
 +   - Rol: afișează starea jocului, meniurile și progresul 
 +   - Alimentare: 5V și GND 
 +   - Comunicare: SDA (A4), SCL (A5) - interfață I2C
  
-(Opțional) Card SD pentru salvare scoruri/​nume+3. Butoane 
 +   - Configurare:​ pull-down extern cu rezistențe de 10kΩ 
 +   - Stare default: LOW, HIGH la apăsare 
 +   - Debouncing: software cu delay de 200ms
  
-Rezistențe de pull-down pentru ​butoane+4. LED-uri 
 +   - Verde (pin 8): feedback pentru litere corecte 
 +   - Roșu (pin 10): feedback ​pentru ​greșeli
  
-Sursă alimentare 5V+5. Buzzer pasiv (pin 7) 
 +   - Emite tonuri diferite pentru success/​fail/​navigare 
 +   - Folosește funcția tone() pentru generarea frecvențelor
  
-Scheme electrice și semnale: 
  
-Butoanele conectate la pini digitali cu întreruperi externe 
  
-PWM pentru controlul culorii LED-ului RGB+**Tabel cu alocarea pinilor**
  
-LCD conectat prin interfață I2C pentru economie de pini+| Pin Arduino | Funcție | Nume Reg. MCU | Direcție | Motiv alegere | 
 +|---|---|---|---|---| 
 +| 2 | Buton LEFT | PD2 | IN | Navigare alfabet | 
 +| 4 | Buton SELECT | PD4 | IN | Selecție literă 
 +| 6 | Buton RIGHT | PD6 | IN | Navigare alfabet | 
 +| 7 | Buzzer | PD7 | OUT | Feedback audio | 
 +| 8 | LED Verde | PB0 | OUT | Feedback pozitiv | 
 +| 10 | LED Roșu | PB2 | OUT | Feedback negativ | 
 +| A4 | SDA (I2C) | PC4 | OUT | Date către LCD | 
 +| A5 | SCL (I2C) | PC5 | OUT | Ceas I2C |
  
 {{:​pm:​prj2025:​rnedelcu:​tinkercad3.png?​200|}} {{:​pm:​prj2025:​rnedelcu:​tinkercad3.png?​200|}}
Line 65: Line 87:
 {{:​pm:​prj2025:​rnedelcu:​tinkercad4.png?​200|}} {{:​pm:​prj2025:​rnedelcu:​tinkercad4.png?​200|}}
  
-{{:​pm:​prj2025:​rnedelcu:​poza_proiect.jpg?200|}}+{{:​pm:​prj2025:​rnedelcu:​pozaa.jpg?200|}}
  
  
Line 74: Line 96:
  
 <note tip> <note tip>
-Medii și librării: 
  
-Arduino IDE+**Biblioteci utilizate**
  
-Librărie ​LiquidCrystal_I2C ​pentru ​LCD+  - LiquidCrystal_I2C.h: control ​LCD 16x2 prin I2C la adresa 0x27
  
-TimerOne pentru contorizarea timpului 
  
-EEPROM sau SD.h dacă se implementează salvare scoruri+**Structura software** 
 +Programul este organizat în următoarele module functionale:​
  
-Funcționalități software planificate:​+1. Inițializare (setup()) 
 +  - Configurare LCD și pini 
 +  - Crearea caracterelor personalizate pentru spânzurătoare 
 +  - Afișare mesaj de bun venit
  
-Interfață de navigare alfabet ​(cu accelerare la apăsare lungă)+2. Selecția configurației ​(start()) 
 +  - Navigare prin categorii: Animale, Fructe, Țări, Aleator 
 +  - Selectare dificultate:​ Ușor, Mediu, Greu 
 +  - Alegerea aleatoare a cuvântului din setul corespunzător
  
-Afișare progres pe LCD (cu actualizări dinamice)+3. Bucla principală (loop()
 +  - Gestionarea input-urilor de la butoane 
 +  - Navigarea prin alfabet (A-Z) 
 +  - Procesarea selecției de litere 
 +  - Actualizarea stării jocului
  
-Semnalizare stări cu LED RGB+4. Afișare și feedback (drawGame(),​ drawHangman()) 
 +  - Desenarea progresului cuvântului 
 +  - Afișarea spânzurătorii progresive 
 +  - Feedback vizual/​audio pentru acțiuni
  
-Cronometru integrat cu întreruperi+5. Logica de joc (hasWon(), gameOver()) 
 +  - Verificarea condițiilor de victorie/​înfrângere 
 +  - Gestionarea sfârșitului de joc și restart
  
-Niveluri de dificultate (opțional: număr de greșeli permise, lungimea cuvântului)+**Funcționalități implementate**
  
-Introducere nume utilizator ​pentru ​highscore ​(opțional)+  - 4 categorii de cuvinte cu câte 6 cuvinte fiecare 
 +  - 3 niveluri de dificultate (2 cuvinte per nivel per categorie) 
 +  - Navigare prin alfabet cu butoane LEFT/​RIGHT 
 +  - Selecție litere cu feedback audio/​vizual 
 +  - Afișare progresivă a spânzurătorii (8 caractere personalizate) 
 +  - Contorizare greșeli (maximum 6) 
 +  - Detectare automată victorie/​înfrângere 
 +  - Sistem de restart automat 
 +  - Debouncing software ​pentru ​butoane 
 + 
 +**Algoritmi principali** 
 + 
 +1. Algoritm de navigare: 
 +  - Incrementare/​decrementare ciclică prin alfabet ​(A-Z) 
 +  - Limitare la capetele intervalului 
 + 
 +2. Algoritm de verificare literă: 
 +  - Căutare în cuvântul ​țintă cu indexOf() 
 +  - Marcare literă ca ghicită în array boolean 
 +  - Actualizare progres și contorizare greșeli 
 + 
 +3. Algoritm de verificare victorie: 
 +  - Iterare prin toate literele cuvântului 
 +  - Verificare dacă toate sunt marcate ca ghicite 
 + 
 +4. Algoritm de afișare spânzurătoare:​ 
 +  - Afișare progresivă a 8 caractere personalizate 
 +  - Mapare numărul greșelilor la părțile corpului
 </​note>​ </​note>​
  
Line 102: Line 165:
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+Proiectul a fost implementat cu succes, oferind o experiență de joc interactivă și intuitivă. Sistemul funcționează stabil, cu timp de răspuns rapid la input-uri și feedback clar pentru utilizator. 
 + 
 +Caracteristici finale: 
 +- 24 de cuvinte organizate în 4 categorii 
 +- 3 niveluri de dificultate funcționale 
 +- Interface LCD clar și responsive 
 +- Feedback audio/​vizual consistent 
 +- Sistem de restart automat functional 
 + 
 +Îmbunătățiri posibile: 
 +- Adăugarea unui card SD pentru cuvinte suplimentare 
 +- Implementarea unui sistem de scoruri 
 +- Timer pentru limitarea timpului de joc 
 +- Mai multe categorii de cuvinte
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul a demonstrat cu succes implementarea unui joc interactiv pe platformă Arduino, combinând multiple concepte de programare embedded: interfațarea I2C, gestionarea input-urilor,​ generarea de sunete și crearea unei interfețe utilizator intuitive.
 +
 +Aspectele cele mai valoroase ale implementării:​
 +- Utilizarea eficientă a caracterelor personalizate LCD pentru grafică
 +- Organizarea modulară a codului pentru ușurință în dezvoltare
 +- Implementarea unui sistem de feedback multi-modal (vizual/​audio)
 +- Gestionarea corectă a stărilor de joc și tranziților
 +
 +Proiectul oferă o bază solidă pentru dezvoltarea ulterioară și poate fi extins cu funcționalități suplimentare cum ar fi conectivitate,​ scoruri online sau AI pentru generarea dinamică de cuvinte.
 ===== 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ă ;-). 
  
-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**.+Arhiva 
 +{{:pm:prj2025:rnedelcu:spanzuratoarea.zip|}}  
 </​note>​ </​note>​
  
pm/prj2025/rnedelcu/alexandru.lintmaier.1748020695.txt.gz · Last modified: 2025/05/23 20:18 by alexandru.lintmaier
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