Spânzurătoarea – Joc Interactiv - SIMILEA Alin-Andrei

Introducere

Nume: Similea Alin-Andrei
Grupa: 334CA

Proiectul este o implementare fizică a celebrului joc de ghicit cuvinte „Spânzurătoarea”, adaptat pentru microcontrollerul Arduino Nano și afișat pe un ecran LCD. Utilizatorul navighează prin alfabet cu ajutorul a trei butoane și alege litere pentru a ghici un cuvânt ascuns. Feedback-ul este oferit atât vizual (LED RGB și ecran LCD), cât și sonor (buzzer).

Descriere generală

Placa de dezvoltare Arduino Nano (ATmega328P) acționează ca unitate de control principală. Aceasta gestionează afișajul LCD, buzzer-ul, cât și LED-ul RGB. Primește input de la 3 butoane (2 pentru navigare și unul pentru selecție).

Comunicarea cu ecranul LCD se realizează prin protocolul SPI, folosind interfața hardware a microcontrollerului.

Scopul jucătorului este să ghicească un cuvânt completând literele lipsă, selectând din caracterele afișate pe ecran. Acesta poate face doar un număr limitat de greșeli (X încercări).

Jucătorul va putea naviga prin set cu ajutorul a două butoane (stânga, dreapta) și va putea selecta o literă cu butonul de select. Apăsarea unui buton generează o întrerupere către Arduino, care procesează acțiunea.
Dacă litera aleasă se regăsește în cuvânt, LED-ul se aprinde cu culoarea verde, iar litera este afișată pe pozițiile corespunzătoare.
Dacă litera aleasă nu se regăsește în cuvânt, LED-ul se aprinde cu culoarea roșie, iar jucătorul pierde una din cele X vieți puse la dispoziție.
De asemenea, buzzer-ul va oferi feedback auditiv specific pentru o selectare corectă sau greșită.

După o selecție, Arduino actualizează afișajul LCD și verifică dacă jocul trebuie continuat sau dacă a fost câștigat/pierdut.

Hardware Design

Componente folosite

Nume Componentă Cantitate Link Datasheet
Arduino Nano V3 1 Arduino Nano V3 Arduino Nano datasheet
LCD SPI MAR1801 1 LCD SPI MAR1801 LCD datasheet
Buton 3 Buton
Buzzer pasiv 1 Buzzer pasiv
Led RGB (catod comun) 1 Led RGB
Breadboard HQ (400 P) 2 Breadboard
Rezistor 100Ω 1 100Ω
Rezistor 220Ω 3 220Ω
Rezistor 5.1KΩ 6 5.1KΩ

Funcționalitate hardware & conexiuni

1. Arduino Nano
Rol: controler principal al sistemului cu microcontroller ATmega328P.

2. Display MAR1801 (ST7735S - SPI)
Rol: afișează starea jocului/mesaje către utilizator.
Alimentare: 5V și GND

Conectare SPI:

  • CLK → D13 (SCK)
  • SDA → D11 (MOSI)
  • CS → GND (Chip Select)
    • Mereu pe LOW (activ), deoarece display-ul e singurul dispozitiv SPI
  • RS → D9 (Data/Command)
  • RST → RST (Reset)
    • Se resetează odată cu Arduino Nano

Pinii D11(MOSI) și D13(SCK) sunt specifici pentru comunicare SPI pe Arduino Nano.

3. Butoane
Fiecare are pull-down extern de 10kΩ pentru a asigura citiri stabile (LOW default, HIGH la apăsare).

  • Stânga: conectat la A0 (PC0)
  • Dreapta: conectat la A1 (PC1)
  • Confirm: conectat la A2 (PC2)

4. LED-uri
Rol: feedback vizual (selectare corectă/greșită)

  • LED Verde: A3 (PC3) + rezistor 330Ω
  • LED Roșu: A4 (PC4) + rezistor 220Ω

5. Buzzer pasiv
Rol: emite sunete (tonuri) în funcție de acțiunile utilizatorului

  • Conectat la D3 (PD3) prin rezistor de 220Ω.
    • Portul D3 de pe Arduino Nano are suport pentru PWM prin Timer2B, așa că e alegerea ideală pentru a controla un buzzer pasiv.

6. Utilizarea ADC pentru generarea de noise
Rol: generarea unui seed aleator pentru joc, prin citirea zgomotului electric de pe un pin analog neconectat.

Zgomotul analog de pe pinul A6 (ADC6) variază la fiecare pornire a sistemului.
Conversia ADC oferă valori între 0 și 1023, ceea ce permite obținerea unui seed diferit la fiecare rulare.

Tabel cu alocarea pinilor

Pin Arduino Funcție Nume Reg. MCU Direcție Motiv alegere
A0 Buton stânga PC0 IN Citire buton
A1 Buton dreapta PC1 IN Citire buton
A2 Buton confirm PC2 IN Citire buton
A3 LED verde PC3 OUT Feedback pozitiv
A4 LED roșu PC4 OUT Feedback negativ
A6 ADC(random seed) ADC6 IN Zgomot pentru randomizare
D3 Buzzer PD3 OUT Emitere sunet
D8 LCD RESET PB0 OUT Resetare display
D9 LCD DC PB1 OUT Comutare date/comenzi
D10 LCD CS PB2 OUT Selectare chip
D11 LCD SDA (MOSI) PB3 OUT Date către LCD
D13 LCD CLK (SCK) PB5 OUT Semnal de ceas SPI

Software Design

Biblioteci utilizate

Am folosit LCDWIKI_GUI și LCDWIKI_SPI pentru suportul oferit display-ului ST7735S. Acestea erau recomandate în datasheet-ul display-ului. Permit desenul de forme și text fără scrierea manuală a unui driver SPI.
Pentru a îmbunătăți viteza de randare am schimbat frecvența SPI de la 4Mhz la 8Mhz și am folosit pinii specifici SPI Hardware.

Funcționalități folosite din laborator

  1. GPIO (LED-uri, butoane)
  2. Întreruperi externe (PCINT)
  3. ADC (zgomot analog pe A6 pentru srand())
  4. Timere (debounce cu Timer0, reset automat cu Timer1)
  5. PWM (tone() pe D3 pentru buzzer)

Întreruperi și timere

Butonul stânga, dreapta și confirm sunt conectate pe portul C (PC0–PC2) și sunt tratați cu aceeași întrerupere externă (PCINT1). La detectarea unei apăsări, se setează un flag specific fiecărei acțiuni, iar logica este gestionată ulterior în loop() pentru decuplarea deciziilor față de ISR.

Pentru debounce, este folosit Timer0 în modul CTC, cu un delay de aproximativ 80ms.

Pentru resetarea jocului după câștig sau pierdere, se folosește Timer1, configurat tot în CTC cu un interval de 2 secunde. Temporizatorul este activat doar temporar după declanșarea terminării jocului. La expirarea cuantei de timp, se generează o întrerupere care reinițializează toate variabilele jocului și pornește o nouă rundă.

Rezultate Obţinute

Codul

Codul se găsește la: Link GitHub

Demo

Concluzii

Mă bucur că am avut prilejul să duc la bun sfârșit primul meu proiect cu un microcontroller. Am reușit să integrez concepte aprofundate la laborator, precum lucrul cu întreruperi, timere, ADC și periferice (LCD SPI, buzzer). Astfel, cred că mi-a oferit o experiență practică valoroasă.

Download

Jurnal

05.05.2025 - Alegerea temei
07.05.2025 - Completarea secțiunilor pentru Introducere și Descriere generală
08.05.2025 - Realizarea schemei circuitului
15.05.2025 - Completarea secțiunii Hardware Design
19.05.2025 - Scrierea codului
20.05.2025 - Completarea secțiunii Software Design
25.05.2025 - Final touches și concluzii

Bibliografie/Resurse

pm/prj2025/fstancu/alin_andrei.similea.txt · Last modified: 2025/05/30 00:18 by alin_andrei.similea
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