Adresa de e-mail: rares.folea@stud.acs.upb.ro
Proiectul propune o implementare a unui joc de sah electronic, in mod player vs computer, de tipul Mephisto Chess Challenger. Proiectul presupune implementarea unei table de sah controlata direct de microcontroller, prin intermediul careia jucatorul si calculatorul pot interactiona usor, a elementelor de control ale tablei si a implementarii protocolului de comunicare UCI (Universal Chess Interface). De asemenea, este necesara configurarea unei legaturi seriale de comunicare intre microcontroller si calculatorul pe care ruleaza engine-ul de sah.
Placa de baza contine un microcontroller Atmega324PA ce este responsabil de controlul logicii placii de sah si de conexiunea USART catre un dispozitiv pe care ruleaza un engine de sah, comunicand mutarea aleasa de jucator si raspunsul primit de la engine catre placa de sah.
Placa propriu-zisa de sah permite jucatorului sa mute piesele, prin actionarea butoanelor corespunzatoare, iar calculatorului o modalitate de a interactiona cu jucatorul, ilustrand mutarea aleasa prin utilizarea unor leduri de selectie pe linii/coloane. Placa are si un suport LCD text, pentru a preciza mutarea in format UCI si pentru alte informatii referitoare la starea jocului. De asemenea, placa contine si un buzzer, pentru a semnala mutari invalide/ selectie incorecta sau alte erori aparute.
Universal Chess Interface (UCI) este un protocol de comunicare care permite enginului de sah sa comunice cu interfetele utilizatorilor. Acesta va fi folosit pentru a interschimba mutari intre jucator si calculator, si va rula intern in calculator, care primeste/trimite date de la/catre placa de sah, utilizand un modul de conversie USB-TTL, pe microcontroler fiind configurata o conexiune USART (Universal Synchronous-Asynchronous Receiver/Transmitter), cu parametrii
--baudrate 9600 --databits 8 --flow none --stopbits 1 --parity even
Software-ul necesar se imparte in trei mari categorii: gestionarea tablei de sah de catre microcontroller, engine-ul de sah si asigurarea modalitatii de comunicare intre engine-ul de sah si software-ul de gestiune al tablei.
1. Implementarea software pentru Atmega 324PA urmareste simularea unui automat finit cu stari. Am definit 2 clase de stari, starea finala fiind determinata prin produs cartezian intre starile individuale.
[linie_sursa, coloana_sursa, linie_destinatie, coloana_destinatie]
. spre exemplu, mutarea unui pion in deschidere Catalana va fi codificata: d2d4
Ca urmare, vom avea un automat finit cu 8 stari principale, la care adaugam o stare de reset. Din software, se activeaza rezistentele de pull-up pentru porturile care asteapta semnal de la butoane (PA0-7), iar detectia apasarii butonului se face prin verificari secventiale si se verifica valoarea periodic. In cazul in care butonul apasat este cel apasat, se avanseaza cu o tranzitie catre starea urmatoare a mutarii, iar in cazul in care s-a finalizat o mutare, se face trecerea la starea 0 a urmatorul jucator. Implementarea este realizata in C.
2. Engine-ul de sah utilizat este MisterQueen, un engine open-source. Au fost putine modificarile pe care le-am facut, pentru o uniformizare a interfetei de comunicare si dezactivarea suportului de multi-threading, pentru a asigura asteptarea finalizarii operatiilor si doar dupa acest punct se comunica alegerea mutarii catre software-ul intermediar de comunicare cu microcontrollerul. Principala functionalitate este de oferirea de bestmove, pentru un scenariu de joc dat. Interfata de comunicare este asigurata dupa pornirea engine-ului, prin comanda de initializare UCI a pozitiei de joc:
position startpos moves d2d4 g8f6 c2c3 c7c5 go
Implementarea este realizata in C.
3. Implementearea software-ului ce asigura modalitatii de comunicare intre engine-ul de sah si microcontroller.
Implementarea este realizata in bash (Linux), utilizand putty.
Pentru asculatea pe /dev/ttyUSB0
, se utilizeaza comanda sudo putty /dev/ttyUSB0 -log test -serial -sercfg 9600,8,e,1,N
. Bucla principala respecta formatul:
repeta: verifica actualizare daca exista actualizare: daca este mutarea calculatorului: transmite cerere engineului asteapta raspuns transmite raspuns
Rezultatele au fost conforme cu specificatiile. S-a obtinut o tabla electronica de sah, pe care se poate juca impotriva calculatorului, bot-ul de sah fiind cotat in jurul valorii de 2000 pe scara de rating ELO.
/dev/ttyUSB0