Table of Contents

C.I.A.C - (Li)Chess Interface with Arduino Control

Introducere

cutie_finala_lichess.jpeg

Proiectul presupune realizarea unei table de șah care poate fi conectată printr-un port USB la calculator pentru a juca meciuri online sau OTB(over the board) cu un prieten folosind API-ul oferit de Lichess.

Am vrut să fac un proiect care să se alinieze cu unul din hobby-urile mele la momentul de față, ceva pe care să-l pot folosi ulterior ca să exersez sau ca să pierd timpul. Întamplarea a făcut ca semestrul acesta să mă prindă in febra șahului, iar asta mi-a dat ideea de a face un proiect care să combine satisfacția de a juca șah pe o tablă fizică cu utilitatea unui chess engine.

Descriere generală

ARDUINO UNO - 1

Una din funcționalitățile principale ale tablei este detectarea pieselor folosind senzori magnetici și transmiterea datelor de la Arduino la calculator pentru procesarea mutărilor. Sub fiecare pătrat al tablei de șah se află un senzor hall A3144 așezat pe o bucată mică de metal, mai exact o moneda de 10 bani o piulita. În momentul în care o piesă este așezată pe tablă, magnetul de la baza ei magnetizează moneda, activând astfel senzorul. Citirea tablei se realizează prin activarea pe rând a fiecărei coloane cu un shift register și citirea datelor de pe fiecare linie cu un multiplexor (vezi schematic).

Interacțiunea cu utilizatorul se va realiza cu ajutorul unui ecran TFT cu touchscreen în felul următor:

  1. Utilizatorul poate selecta modul de joc (vs Stockfish, online sau OTB)
  2. Se va afișa timpului rămas fiecărui jucător
  3. În cazul în care se joacă online, ecranul va afișa mutarea făcută de oponent în notație algebrică (ex. E4, NxF6, etc.)
  4. În cazul în care mutarea efectuată de un jucător nu este legală, se va afișa configurația anterioară a tablei

Hardware Design

Hardware Schematic

Materiale folosite

Software Design

Toata partea de dezvoltare software pentru Arduino a fost facuta in Visual Studio Code folosind extensia PlatformIO, iar pentru partea de comunicare cu serverul de Lichess am folosit Python intr-un environment de Conda.

Biblioteci folosite pe Arduino

Module folosite in script-ul de Python

  python==3.11.3
  berserk==0.12.4
  CairoSVG==2.7.0
  chess==1.9.4
  ipython==8.13.2
  opencv_python==4.7.0.72
  Pillow==9.5.0
  pyserial==3.5

Functionalitati implementate pe Arduino

Am incercat sa impart logica programului in cat mai multe fisiere sursa ca sa am un program cat de cat modular. Deoarece am scris aproape 1000 de linii de cod(si INCA nu e gata), din respect pentru timpul persoanei care va citi asta si din ratiuni de economie pentru timpul meu, o sa ofer mai jos doar un overview asupra functionalitatilor implementate in fiecare fisier sursa, fara sa detaliez explicit fiecare functie.

Functionalitati implementate in script-ul de Python

Rezultate Obţinute si concluzii

Am invatat ca de multe ori ceea ce pare usor pe hartie se dovedeste a fi un chin in realitate. Pe parcursul proiectului, a trebuit sa-mi schimb de multe ori abordarea pentru ca de multe ori am descoperit ca ideile mele nu functioneaza asa cum m-as fi asteptat. Am improvizat mult si am fost nevoit sa renunt la multe lucruri pe care as fi vrut sa le adaug la proiect din cauza lipsei de timp.

Cele mai multe probleme le-am avut cu senzorii magnetici pentru ca uneori citeau prost, iar alteori nu citeau deloc. De asta, am fost nevoit sa schimb o parte din ei si sa improvizez un capac din carton pentru tabla pentru ca nu reuseam sa citesc intr-un mod consecvent senzorii prin materiale putin mai groase.

In final, desi am avut parte de multe dezamagiri de-alungul proiectului, ma simt foarte bine ca am reusit sa-l duc la capat. Satisfactia de a realiza ceva functional cu mainile tale e un lucru greu de echivalat.

Download

Jurnal

tabla_lipita.jpeg

senzori_fata.jpeg senzori_spate.jpeg

magnet_piesa.jpeg

ciac_schelet.jpg ciac_capac.jpg

cablaj_complet.jpeg ecran_tft.jpeg

cutie_finala2.jpeg

Resurse

Resurse Software

Resurse Hardware

Export to PDF