This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/24 12:50] alexandru.lintmaier [Hardware Design] |
pm:prj2025:rnedelcu:alexandru.lintmaier [2025/05/28 12:33] (current) alexandru.lintmaier [Download] |
||
---|---|---|---|
Line 38: | Line 38: | ||
| LED Roșu | 1 | Feedback negativ | | | LED Roșu | 1 | Feedback negativ | | ||
| Buzzer Pasiv | 1 | Feedback audio | | | Buzzer Pasiv | 1 | Feedback audio | | ||
- | | Rezistențe 220Ω | 2 | Pentru LED-uri si Buzzer | | + | | Rezistențe 220Ω | 3 | Pentru LED-uri si Buzzer | |
| Rezistențe 10kΩ | 3 | Pull-down pentru butoane | | | Rezistențe 10kΩ | 3 | Pull-down pentru butoane | | ||
| Breadboard | 1 | Montaj circuit | | | Breadboard | 1 | Montaj circuit | | ||
| Fire de conectare | Diverse | Conexiuni | | | Fire de conectare | Diverse | Conexiuni | | ||
+ | |||
+ | |||
+ | **Funcționalitate hardware & conexiuni** | ||
+ | |||
+ | 1. Arduino UNO | ||
+ | - Rol: controler principal cu microcontroller ATmega328P | ||
+ | - Alimentare: 5V prin USB sau alimentator extern | ||
+ | |||
+ | 2. LCD 16x2 cu I2C | ||
+ | - Rol: afișează starea jocului, meniurile și progresul | ||
+ | - Alimentare: 5V și GND | ||
+ | - Comunicare: SDA (A4), SCL (A5) - interfață I2C | ||
+ | |||
+ | 3. Butoane | ||
+ | - Configurare: pull-down extern cu rezistențe de 10kΩ | ||
+ | - Stare default: LOW, HIGH la apăsare | ||
+ | - Debouncing: software cu delay de 200ms | ||
+ | |||
+ | 4. LED-uri | ||
+ | - Verde (pin 8): feedback pentru litere corecte | ||
+ | - Roșu (pin 10): feedback pentru greșeli | ||
+ | |||
+ | 5. Buzzer pasiv (pin 7) | ||
+ | - Emite tonuri diferite pentru success/fail/navigare | ||
+ | - Folosește funcția tone() pentru generarea frecvențelor | ||
+ | |||
+ | |||
+ | |||
+ | **Tabel cu alocarea pinilor** | ||
+ | |||
+ | | 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 47: | 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 56: | 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 84: | 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> | ||