This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/24 12:41] alexandru.lintmaier [Introducere] |
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/28 12:33] (current) alexandru.lintmaier [Download] |
||
---|---|---|---|
Line 18: | Line 18: | ||
- | Proiectul este alcătuit din următoarele module: | + | Sistemul se bazează pe microcontrollerul Arduino UNO (ATmega328P) care acționează ca unitate de control principală. Comunicarea cu LCD-ul se realizează prin protocolul I2C la adresa 0x27, reducând numărul de pini necesari. |
- | Control input (butoane) – pentru navigarea prin alfabet și selectarea literelor. | + | 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. |
- | Display LCD – pentru afișarea cuvântului parțial ghicit și a timpului rămas. | + | Î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. |
- | LED RGB – pentru semnalizarea stării jocului: progres (galben), câștig (verde), pierdere (roșu). | + | Jocul se termină prin victorie (toate literele ghicite) sau înfrângere (6 greșeli), cu posibilitatea de restart automată. |
- | + | ||
- | Timer – pentru contorizarea timpului limită de joc (90 secunde). | + | |
- | + | ||
- | Memorie statică – cuvinte prestabilite (hardcoded în cod sau extrase din EEPROM/SD). | + | |
- | + | ||
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | |
</note> | </note> | ||
Line 36: | 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 64: | 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 73: | 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 101: | 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> | ||