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).
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.
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:
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).
4. LED-uri
Rol: feedback vizual (selectare corectă/greșită)
5. Buzzer pasiv
Rol: emite sunete (tonuri) în funcție de acțiunile utilizatorului
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 |
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
Î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ă.
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ă.
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