Proiectul implementează un ceas de șah digital folosind Arduino, afișaje cu 7 segmente și un LCD. Ceasul oferă funcționalități standard pentru turneele de șah:
Ideea a pornit de la dorința de a crea un instrument practic pentru jucătorii de șah, care să fie în același timp un exercițiu educațional de programare și electronică. Utilitatea acestui proiect constă în:
Ceasul de șah digital este un sistem complex care îmbină componente hardware și software pentru a oferi o soluție funcțională și intuitivă de cronometrare pentru jocul de șah. Proiectul utilizează o singură placă Arduino MEGA 2560 pentru a controla toate componentele și a implementa logica necesară.
Arduino MEGA 2560 reprezintă “creierul” sistemului, coordonând toate funcționalitățile și procesând interacțiunile utilizatorului. Acesta a fost ales datorită numărului mare de pini I/O disponibili (54 pini digitali și 16 pini analogici), care permit conectarea simultană a tuturor componentelor necesare. Arduino rulează firmware-ul care implementează logica jocului, gestionează timerii, procesează input-ul de la butoane și controlează afișajele și feedback-ul audio.
LCD-ul oferă o interfață vizuală pentru utilizator, afișând informații despre:
Cele două afișaje cu 7 segmente și 4 digiti sunt utilizate pentru a afișa timpul rămas pentru fiecare jucător în format MM:SS (minute:secunde). Aceste afișaje utilizează tehnica de multiplexare pentru a controla toate cele 32 de segmente (8 segmente × 4 digiti) cu doar 12 pini pentru fiecare afișaj. Multiplexarea implică activarea rapidă și secvențială a câte unui digit la un moment dat, creând iluzia că toate sunt aprinse simultan datorită persistenței vizuale.
Sistemul include patru butoane tactile:
Butoanele sunt conectate la Arduino folosind intrările analogice și utilizează rezistențe pull-up interne pentru stabilitate.
Buzzer-ul oferă feedback audio pentru diverse evenimente din timpul jocului:
Modulele interacționează într-un flux logic care permite funcționarea coerentă a ceasului de șah:
La pornire, sistemul afișează meniul principal pe LCD, permițând utilizatorului să selecteze modul de joc folosind butoanele de control. După selectarea modului, timpii inițiali sunt setați pentru ambii jucători și afișați pe cele două afișaje cu 7 segmente. Jocul începe cu cronometrul jucătorului 1 activat. Când acesta termină mutarea și apasă butonul său, timpul său se oprește și începe cronometrul jucătorului 2. Buzzer-ul emite sunete pentru a indica transferul de control între jucători și pentru a avertiza când timpul este pe cale să expire. Arduino MEGA gestionează continuu afișajele, actualizându-le pentru a reflecta timpul rămas, și procesează input-ul de la butoane pentru a detecta schimbările de stare (pauză, terminare mutare, etc.). LCD-ul afișează informații suplimentare despre starea jocului, cum ar fi jucătorul activ, modul de joc curent, și eventuale notificări.
Această arhitectură modulară permite o implementare clară a funcționalităților și facilitează eventuale extinderi ulterioare ale sistemului, cum ar fi adăugarea de moduri de joc suplimentare sau funcții avansate de cronometrare.
Pentru reglarea contrastului LCD-ului
Schema electrică LCD 16×2:
Afișaj cu 7 segmente pentru Jucătorul 1:
Afișaj cu 7 segmente pentru Jucătorul 2:
Butoane:
Buton Jucător 1:
Buton Jucător 2:
Buton Navigare Mod:
Buton Selectare Mod:
Buzzer:
Codul aplicației este structurat în jurul a două componente principale:
Logica principală se bazează pe funcțiile standard Arduino: `setup()` (inițializare) și `loop()` (execuție continuă). În cadrul `loop()`, se gestionează evenimentele produse de butoane și se actualizează timpul și afișajele în mod continuu, în funcție de starea curentă a jocului.
Aplicația implementează următoarele funcționalități software relevante:
Funcție | Descriere |
---|---|
`setup()` | Configurează pinii, initializează LCD-ul, încarcă modul salvat din EEPROM și pregătește componentele pentru execuția logicii principale. |
`loop()` | Gestionează selecția modului de joc, desfășurarea partidei, schimbarea turelor, decrementarea timpului și actualizarea afișajelor. Toate sunt controlate de un state machine simplificat. |
`updateDisplay(…)` | Actualizează valorile de timp pe afișajul 7 segmente prin multiplexare. Activează fiecare cifră pe rând cu un delay scurt pentru a simula refresh continuu. |
`showDigit(…)` | Afișează o cifră pe una dintre cele patru poziții ale unui afișaj. Activează doar segmentele necesare. |
`playSwitchBeep()` | Redă un sunet scurt prin buzzer la schimbarea de tură. |
`playAlarm()` | Declanșează o secvență sonoră repetitivă când timpul unui jucător a expirat. |
Pentru a îmbunătăți experiența utilizatorului și a evita selecția repetată a modului de joc la fiecare pornire, proiectul folosește EEPROM pentru a salva indexul modului de joc selectat.
Codul complet al aplicației poate fi consultat în repository-ul public de pe GitHub: https://github.com/biancapopescu0411/arduino-digital-chess-clock
Acesta este un video demonstrativ cu functionalitatea proiectului:
Proiectul realizat este un ceas digital de sah complet functional, care permite selectarea modului de joc, afisarea timpului pentru fiecare jucator si semnalizarea sonora in momentele importante. Am folosit un LCD pentru interfata cu utilizatorul, doua afisaje cu 7 segmente pentru a afisa timpii si mai multe butoane pentru interactiune directa.
Pe parcursul implementarii am aplicat notiuni invatate la mai multe laboratoare, cum ar fi lucrul cu afisaje digitale, butoane, semnalizare cu buzzer si salvarea datelor in EEPROM. Proiectul a fost o ocazie buna de a pune in practica teoria si de a intelege mai bine cum functioneaza un sistem embedded complet.
Am facut inclusiv lucru manual, construind si o carcasa pentru a proteja componentele si pentru a oferi un aspect mai profesional. Pe viitor, as putea adauga si alte functii, cum ar fi increment de timp sau salvarea scorurilor.
In final, proiectul mi-a oferit o experienta completa si m-a ajutat sa inteleg mai bine ce inseamna sa construiesti un dispozitiv electronic real, de la idee pana la testare.