Hangman (Spânzurătoarea)

Introducere

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 16×2. Jucătorul navighează prin alfabet cu ajutorul a trei butoane și selectează litere pentru a ghici un cuvânt din categorii predefinite (Animale, Fructe, Țări, sau Aleator).

Sistemul oferă feedback vizual prin LED-uri (verde pentru succes, roș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.

Scopul proiectului este să combine concepte esențiale de programare embedded: interfațarea cu LCD prin I2C, gestionarea input-urilor prin butoane, feedback vizual/audio și implementarea unei logici de joc interactive.

Descriere generală

Schema bloc:

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.

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.

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

Jocul se termină prin victorie (toate literele ghicite) sau înfrângere (6 greșeli), cu posibilitatea de restart automată.

Hardware Design

Nume Componentă Cantitate Descriere
Arduino UNO R3 1 Microcontroller ATmega328P
LCD 16×2 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

Funcționalitate hardware & conexiuni

1. Arduino UNO

  1. Rol: controler principal cu microcontroller ATmega328P
  2. Alimentare: 5V prin USB sau alimentator extern

2. LCD 16×2 cu I2C

  1. Rol: afișează starea jocului, meniurile și progresul
  2. Alimentare: 5V și GND
  3. Comunicare: SDA (A4), SCL (A5) - interfață I2C

3. Butoane

  1. Configurare: pull-down extern cu rezistențe de 10kΩ
  2. Stare default: LOW, HIGH la apăsare
  3. Debouncing: software cu delay de 200ms

4. LED-uri

  1. Verde (pin 8): feedback pentru litere corecte
  2. Roșu (pin 10): feedback pentru greșeli

5. Buzzer pasiv (pin 7)

  1. Emite tonuri diferite pentru success/fail/navigare
  2. 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

Software Design

Biblioteci utilizate

  1. LiquidCrystal_I2C.h: control LCD 16×2 prin I2C la adresa 0x27

Structura software Programul este organizat în următoarele module functionale:

1. Inițializare (setup())

  1. Configurare LCD și pini
  2. Crearea caracterelor personalizate pentru spânzurătoare
  3. Afișare mesaj de bun venit

2. Selecția configurației (start())

  1. Navigare prin categorii: Animale, Fructe, Țări, Aleator
  2. Selectare dificultate: Ușor, Mediu, Greu
  3. Alegerea aleatoare a cuvântului din setul corespunzător

3. Bucla principală (loop())

  1. Gestionarea input-urilor de la butoane
  2. Navigarea prin alfabet (A-Z)
  3. Procesarea selecției de litere
  4. Actualizarea stării jocului

4. Afișare și feedback (drawGame(), drawHangman())

  1. Desenarea progresului cuvântului
  2. Afișarea spânzurătorii progresive
  3. Feedback vizual/audio pentru acțiuni

5. Logica de joc (hasWon(), gameOver())

  1. Verificarea condițiilor de victorie/înfrângere
  2. Gestionarea sfârșitului de joc și restart

Funcționalități implementate

  1. 4 categorii de cuvinte cu câte 6 cuvinte fiecare
  2. 3 niveluri de dificultate (2 cuvinte per nivel per categorie)
  3. Navigare prin alfabet cu butoane LEFT/RIGHT
  4. Selecție litere cu feedback audio/vizual
  5. Afișare progresivă a spânzurătorii (8 caractere personalizate)
  6. Contorizare greșeli (maximum 6)
  7. Detectare automată victorie/înfrângere
  8. Sistem de restart automat
  9. Debouncing software pentru butoane

Algoritmi principali

1. Algoritm de navigare:

  1. Incrementare/decrementare ciclică prin alfabet (A-Z)
  2. Limitare la capetele intervalului

2. Algoritm de verificare literă:

  1. Căutare în cuvântul țintă cu indexOf()
  2. Marcare literă ca ghicită în array boolean
  3. Actualizare progres și contorizare greșeli

3. Algoritm de verificare victorie:

  1. Iterare prin toate literele cuvântului
  2. Verificare dacă toate sunt marcate ca ghicite

4. Algoritm de afișare spânzurătoare:

  1. Afișare progresivă a 8 caractere personalizate
  2. Mapare numărul greșelilor la părțile corpului

Rezultate Obţinute

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

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

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/rnedelcu/alexandru.lintmaier.txt · Last modified: 2025/05/28 12:33 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