Go Down

Topic: Jeu d'échecs électronique ( ChessboARDuino ) (Read 16456 times) previous topic - next topic

May 07, 2015, 02:35 pm Last Edit: Apr 15, 2017, 11:39 pm by fredjust
Bonjour

Etant un joueur d'échecs amateur, j'ai toujours rêver d'avoir un véritable échiquier électronique relié en USB à un PC.
Cela existe mais ils coûtent environ 600 euros …

Je me suis donc lancé dans un projet arduino d'échiquier électronique, il fonctionne maintenant correctement



Mon but initial était de pouvoir enregistrer une partie d'échecs jouée entre deux humains sur un échiquier classique.

Les contraintes sont dans ce cas plus fortes que dans d'autres projets qui demandent seulement de pouvoir jouer contre l'ordinateur. Ce but étant maintenant atteint, voici une présentation de ce qui est réalisé.

Pour une question de coût, j'ai choisi d'utiliser de simples interrupteurs reed pour détecter la présence d'une pièce.
Ces interrupteurs se ferment lorsqu'ils sont soumis à un champ magnétique.
Les pièces sont munies d'aimant pour activer l'interrupteur en étant sur une case.

Les diodes forment une matrice de 8 par 8 ce qui permet de n'utiliser que 16 entrées digitales pour les 64 cases.
(sur le principe de la bibliothèque Keypad).

Certains projets utilisaient déjà ce procédé mais ne correspondaient pas à mes besoins.
Les joueurs d'échecs ont des habitudes (et des règles précises) lorsqu'ils déplacent les pièces, il n'est pas possible de leur demander de les changer pour permettre l'enregistrement.
Celui-ci doit être le plus transparent possible pour les joueurs.

La carte Arduino scanne plus de 50 fois par seconde la position de l'échiquier et au moindre changement, renvoie l'état de l'ensemble du plateau (actuellement vers le port série).
J'ai choisi pour le moment de faire le minimum de chose sur la carte, c'est un programme PC qui traite ensuite les données.

La transcription de la partie est actuellement possible à posteriori.
Il reste à améliorer l'ensemble et à augmenter ses possibilités.

En cours de réalisation
- utiliser une carte NANO et l'intégrer dans l'échiquier (à la place d'une MEGA)
- utiliser une carte SD pour l'enregistrement sans PC
- améliorer le programme de traduction de donnée
- écrire un programme pour jouer en temps réel contre un ordinateur

Evolutions possibles
- utiliser une liaison Bluetooth pour communiquer avec un PC ou une tablette
- émuler le protocole DGT pour rendre l'échiquier compatible avec les programmes l'utilisant
- déplacer les pièces de l'ordinateur à l'aide d'un bras mécanique ou d'un aimant sous l'échiquier pour un effet fantôme


Si vous voulez des détails n'hésitez pas à me poser des questions.
Vous pouvez trouver de nombreuses photos prisent en cours de réalisation sur le site de mon club d'échecs.
http://www.cpe95.org/spip.php?rubrique128
(on en cliquant sur les différents liens dans le texte)

Voila pour mon projet ChessboARDuino
je viens de trouver le nom  :D



bricoleau

Chouette réalisation !

Tu arrives à un résultat satisfaisant, malgré le fait que chaque pièce ne soit pas précisément identifiée sur l'échiquier?

Comment gères-tu les cas de promotion d'un pion en aute chose qu'une dame?

Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Artouste

Bonjour
jolie realisation
dans ton enregistrement sur SD , tu prevois un timer en + , du genre millis() pour calculer le temps entre les coups ?

bricoleau

Bon là je viens de me pencher un peu plus sur cette réalisation, qui mérite vraiment qu'on s'y arrête.

Franchement bravo

@Artouste : les video de démo montrent bien le principe d'enregistrement. Oui il y a forcément un timer qui permet d'horodater chaque mouvement détecté. Donc il sera forcément intégré à toute log sur carte SD.

Intellectuellement, je trouve que le plus attractif est l'analyse post-mortem des mouvements captés, pour reconstituer le fil de la partie et tous les coups joués.
Détecter les prises "carreaux", les glissades de pièces, éliminer les informations inutiles liées aux coups repris, etc.
Et comme il subsiste toujours des cas où il y a un doute sur la position (on connait seulement toutes les cases sur lesquelles il y a une pièce), l'intégration des règles du jeu peut lever la plupart des doutes : positions interdites, analyses des déplacements suivants, etc...
Il y aura toujours quelques cas marginaux où la levée de doute ne peut pas être automatique, mais on doit pouvoir les limiter au strict minimum.

Bon c'est vrai, cette partie là n'est plus de l'arduino.
Encore que, une fois toutes les règles d'analyse des mouvements définies et validées, un bon nombre d'entre elles devraient pouvoir être implémentées sur une arduino.
Cela permettrait une reconstitution quasi temps réel de la partie, sans PC
Probablement un peu chaud à faire au niveau soft, mais indubitablement un défi à relever  ;D




Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

 bricoleau  c'est exactement cela tu as bien cerné les problèmes actuels et les évolutions possibles  :)

je suis actuellement en pleine recherche d'un algorithme parfait qui reconnait les coups
à partir de toutes ces infos et c'est une grosse prise de tête.

Avec la première version de mon prog (façon usine à gaz)
j'arrive à reconstituer la partie même avec des prises carreaux et sans vérifier la validité des coup mais au moindre problème j'interviens manuellement, et encore trop a mon gout.
Surtout si le but est la reconnaissance en temps réel pour diffuser la partie sur un vidéoprojecteur ou sur internet ...

il y a un mois j'avais fait une vidéo pour expliquer la transcription
mais je viens de retourner les aimants sur les pièces noires ce qui devrait faire disparaître la totalité des prises carreaux et grandement facilité la reconnaissance des coups.
j'ai aussi écris un code donnant la liste des coups possibles pour chaque pièce.

Mon algo est donc complètement à revoir.

Les parties officielles sont théoriquement simple à suivre car les joueurs ne peuvent pas faire n'importe quoi, il y a des règles :
- "pièce touchée, pièce à jouer" (ou à prendre)
- reprendre son coup est interdit
- un coup illégal (constaté par l'adversaire) et la partie est perdue !
cela qui limite les problèmes

j'ai testé l'échiquier de nombreuses fois avec les joueurs de mon club et les enregistrements parasites ne sont pas si nombreux que cela. Parfois une case s'allume à coté de la pièce que l'on prends mais rien de bien méchant

L'échiquier doit être placé à la première table lors d'un tournoi ce week end, avec enregistrement en autonomie sur carte SD (ce que les échiquiers DGT ne font même pas )
j'aurai alors 9 nouveaux logs pour tester le futur algo.

C'est pas simple mais je suis persuadé que l'on peut arriver à obtenir une reconnaissance quasi parfaite.

Faut donc que je réécrive entièrement la procédure de recherche des coups et je cale un peu
si le défit intéresse du monde je suis preneur de toutes aides/idées


PS1
Pour les promotions autre qu'en dame, c'est dans les règles mais je n'ai encore jamais vu cela en partie réelle ! et cela se produit lorsqu'il y a pat avec une dame on peut donc le "deviner"

PS2
les echiquiers DGT font un peut la meme chose mais avec comme infos supplémentaires le type de pièce sur chaque case : Retransmission de parties d'échecs en ligne


bricoleau

Arf, si seulement j'avais du temps à consacrer à ce projet...

C'est du softeux à 100%

Juste une "simple" fonction à écrire, pour passer d'une liste d'états de capteurs à une liste de coups d'une partie d'échecs, tel que très bien expliqué ici

Le genre de petite fonction qui nécessite un certain nombre de jours de travail de développement.

Et effectivement, vaut mieux être joueur d'échec de tournoi pour appréhender tout ce qui peut se passer sur un échiquier, et pondre l'algo de reconnaissance adapté.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

bricoleau

PS1
Pour les promotions autre qu'en dame, c'est dans les règles mais je n'ai encore jamais vu cela en partie réelle ! et cela se produit lorsqu'il y a pat avec une dame on peut donc le "deviner"
Tiens, juste pour taquiner, une miniature avec sous-promotion en cavalier pour mater :
http://www.chessgames.com/perl/chessgame?gid=1075778

Bon d'accord, un algo de détection des sous-promotions intéressantes, par analyse des pat et mat, devrait traiter 99% des cas.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

#9
May 12, 2015, 10:37 pm Last Edit: May 15, 2015, 12:14 am by fredjust Reason: suppression de texte n'apportant rien
cela me rappelle que j'ai déjà placé une promotion cavalier en blitz
mais c'était sur une variante théorique du contre gambit albin connue jusqu'au bout
http://fr.lichess.org/CvG1FcrQ#13
il n'y a même pas pat en cas de promotion dame ni mat avec promotion cavalier

statistiquement les promotions n'arrivent que dans 1.3% des parties (source)

Premiers tests après avoir retourné les aimants des pièces noirs

90% de coup reconnu   :)

et ce avec mon ancien algo très linéaire qui ne vérifie pas la validité des coups

les 99% me semblent possibles ...

bricoleau

Tu fais suer  :smiley-twist:

J'ai trop de trucs à faire en ce moment, mais je n'arrive pas à décrocher de ton sujet, qui est trop intéressant.

Pas moyen de ne pas y cogiter à temps perdu.

Bien sûr que tu peux monter à 99%.
Perso je parie même sur 100%, avec une reconnaissance temps réel implémentée dans l'arduino, en parallèle de la lecture des capteurs, sans le moindre besoin de levée de doute par un humain.
Ma seule interrogation est sur la suffisance de 2 ko de RAM. Peut-être qu'une mega reste nécessaire (8 ko RAM).

L'algo auquel je pense n'utilise même pas le délai entre chaque configuration des capteurs, ce qui le rend insensible à la vitesse des déplacements ou glissades.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Artouste

Premiers tests après avoir retourné les aimants des pièces noirs
bonjour
J'ai du louper qq chose , mais c'est quoi cette histoire de retournement d'aimant ?
ils sont bien destiné à exciter de l'ILS "basiques" en contact NO  ?

bricoleau

Cela s'appuie sur une constatation expérimentale de FredJust.

Explication ici

Il semble que l'inversion du champs magnétique s'accompagne d'une brève ouverture du contacteur
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

bricoleau

Esprit taquin, le retour  :D

1) as-tu pensé à fabriquer plus de pièces magnétiques que nécessaire ?
Par exemple pour les positions avec deux dames de la même couleur suite à promotion.
Si non, le joueur d'échecs moyen va faire comme d'hab : il va retourner une tour déjà éliminée pour l'utiliser comme une dame, et à moins d'avoir un aimant collé sur le dessus, fini la reconnaissance.

2) que penses-tu d'une partie dont les premiers coups (certes ubuesques), seraient :
1.Cf3 Cf6 2.Cd4 Cd5 3.Cf5 Cf4 4.Cg3 Cg6 5.Tg1 Tg8 6.Ch1 Ch8 7....

3) reprise de coup non lâché
Par exemple : je glisse ma tour de d1 à d7, marque une pause de 2 secondes sans lâcher la pièce, avant de me raviser et de la glisser en arrière jusqu'à d2.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Go Up