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> | ||