TETA

Proyecto Taller de Introducción a la Computación

Tablero Analógico-Digital T.E.T.A.

Integrantes: Martin Rovira, Yojan Rojas, Ignacio Suarez, Lorenzo Ávila

Introducción:

Nuestro equipo pertenece a la comunidad de ajedrez de la Universidad de la República (UdelaR), en esta comunidad es habitual registrar y analizar partidas, pero los tableros DGT (Digital Game Technology) oficiales, tienen un costo elevado, lo que nos impide adquirir uno.

Ante esta limitación económica, nos propusimos diseñar y construir un tablero analógico-digital que cumpla la misma función principal de un tablero DGT: detectar automáticamente la posición de cada pieza y registrar las jugadas de forma digital para luego guardarlas en formato PGN(Portable Game Notation).

Soluciones consideradas:

Tuvimos en cuenta tres enfoques posibles para construir un tablero analógico-digital:

Solución 1 (Inducción Electromagnética): La primera es hacer o replicar el funcionamiento de un tablero DGT, es decir, cada pieza tiene una bobina que cada casilla del tablero identifica por resonancia. Se descartó por falta de materiales, complejidad técnica y alto coste.

Solución 2 (Matriz Electromagnética): La segunda es el método que utilizan los tableros ChessNut. Este método utiliza tecnologías más complejas: una matriz con sensores de radiofrecuencias avanzados en el tablero, y una antena de distinta frecuencia en cada pieza. Similar en metodología al DGT, pero en lugar de detectar cada casilla por separado se utiliza una matriz. Por lo que también es inviable debido a la complejidad técnica y el costo.

Solución 3 (Matriz Eléctrica): Esta opción consiste en implementar una matriz de diodos, que es un sistema similar al que utilizan los teclados de computadora, método que nos resulta más accesible y mantendrá las funciones principales para lograr el objetivo. Matriz Eléctrica: Dentro de la Solución 3 (matriz de diodos) surgieron dos ideas principales para detectar la presencia de las piezas:

  • Utilizar un “Reed switch” (interruptor magnético de lámina): Cada pieza llevaría un imán y al colocarla sobre la casilla cerraría el interruptor. Es una solución confiable, pero aumenta considerablemente el costo y la complejidad del montaje.

  • Contacto directo pieza-matriz: la base de cada pieza y la casilla del tablero harían contacto eléctrico directo (usando materiales conductores). Es mucho más económico y sencillo de fabricar.

Se podrían ver varias otras formas de hacer que al apoyar una pieza en una casilla cierre el circuito eléctrico, pero estas nos parecieron las más óptimas para este diseño de tablero

Hardware TETA(Tablero Electronico de Transmision Automatica):

Como indicamos anteriormente el sistema usa una matriz de diodos, donde se organizan filas y columnas, en este caso la idea principal sería enviar una señal individual, separadas temporalmente, a cada una de las columnas, y observar qué filas captan la señal, de esta manera sabiendo que columna emite la señal y que fila la recibe, podemos determinar la posición de una pieza.

  • Sistema de Matriz de Diodos: la idea principal sería implementar una matriz de 8x8, se incluyen diodos del tipo “1N4148” para evitar el fenómeno de “ghosting”, un error común en teclados donde la computadora detecta pulsaciones falsas al presionar varias teclas simultáneamente, en este tablero siempre habrá más de 2 piezas, por lo que es necesario evitar este problema. El diodo “1N4148” es el que se utiliza comúnmente para señales digitales ya que este tiene una alta velocidad de reacción, por lo que puede manejar señales con una alta frecuencia.

  • Sistema de Interruptor:En cuanto al sistema del "switch" nos decantamos por utilizar el contacto directo pieza/matriz ya que es mucho más barato y sencillo de implementar, aunque queda abierta la posibilidad a el uso de otros métodos.

  • Sistema de Digitalización:Para digitalizar el juego es necesario un dispositivo llamado microcontrolador (Por ejemplo: Microbit, Arduino, Raspberry Pi o ESP32), el cual enviará y recibirá las señales para detectar la posición de cada una de las piezas, este dispositivo también podría conectarse a internet y guardar las partidas en una base de datos externa, servidor o similar, de esta forma los datos se pueden convertir a formato .PGN para poder así visualizar la partida de ajedrez.

La decisión del microcontrolador va estar atada a los pines de entrada y salida que este posea. La forma más sencilla es hacer una matriz 8x8, con ocho entradas y ocho salidas, pero si el microcontrolador no tiene los suficientes pines GPIO(General Purpose Input and Output), se podría simplificar la matriz con un aparato llamado Demultiplexor, el cual recibe una señal y la reparte. Con este aparato podríamos reducir el número de pines necesarios.

  • Software: El microcontrolador para detectar las posiciones de las piezas envía una señal por las letras y la recibe por un número, sabiendo por cuál letra está emitiendo la señal y cuál es el número que la recibe, podemos saber la posición exacta de una pieza. Los datos recibidos los ordenaremos en una matriz matemática 8x8 mediante datos binarios (0: casilla vacía, 1: casilla ocupada), en esta matriz las letras (de la A a la H) serían las columnas y los números (del 1 al 8) serían las filas.

  • Reconocimiento de piezas: Para el reconocimiento de piezas nos basaremos en la posición inicial de estas, que en una partida normal de ajedrez siempre es la misma. El tablero de arriba estaría mostrando la información del turno cero, en el cuál todas las piezas están en su lugar de inicio, de esta manera podemos reconocer por ejemplo que hay un peón blanco en E2, una torre negra en A8 y que entre la fila 3 y la fila 6 no hay ninguna pieza. De esta manera podemos asignar cada pieza a una posición concreta, se nos ocurrieron dos formas de hacer esto, la primera es asignar el valor de la posición a una variable con el nombre de la pieza, la segunda es crear un “diccionario” en donde cada pieza (clave) tendrá su posición (valor).

  • Reconocimiento de movimientos: Al realizar un movimiento de una pieza, ejemplo peón E2 a E4, en el caso más sencillo en el que se levantaría una pieza y se la dejaría en la posición que se quiere en la matriz momentáneamente se vería que hay una pieza faltante pues esta habría dejado de hacer contacto, en el ejemplo que dimos la matriz pasaría a tener un cero en la posición E2, de esta manera reconocemos que la pieza que se quiere mover es el peón E2, por lo que al colocarla en la posición E4 sabremos que es el mismo peón, gracias a eso podemos cambiar la variable de posición del peón a la nueva posición. El mismo procedimiento se daría para todas las piezas y, en caso de un movimiento ilegal (ver Errores posibles).

La otra forma de realizar un movimiento es arrastrar la pieza, esta sería un poco más difícil de solucionar, ya que debido al arrastre de la pieza se activarán todas las casillas que están entre la posición inicial y la posición final, en caso de no prevenirse el problema esta activación de casillas intermedias podrían contar como más de un turno para el jugador. La solución que planteamos a este problema es dejar un tiempo desde que la casilla inicial pasa a valor cero (la pieza sale de la casilla inicial) hasta que llega a la casilla final en donde la pieza permanecerá quieta, de esta forma podemos ignorar todas las casillas intermedias que fueron activadas en el recorrido. Este tiempo se escogerá de manera arbitraria, se podría realizar una pequeña investigación sobre cuánto tiempo le toma al jugador mover una pieza y de esta forma determinar el tiempo mínimo antes de determinar el movimiento.

Otro método para resolver este problema es ignorar todos los movimientos realizados y aceptar los movimientos de la pieza que pasó mayor tiempo en la posición final, por ejemplo, si arrastramos el peón E2 a E4 se ignorarán todos los movimientos hasta que el peón haya estado cierto tiempo en la posición E4, tiempo que también sería arbitrario. A esta solución se le puede agregar que, si la pieza es movida pero vuelve a la posición inicial antes de la confirmación, este tiempo se resetea hasta que se realice un movimiento efectivo.

  • Captura de piezas: Reconocemos en la captura de piezas dos principales posibilidades:

Que se levante primero la pieza propia. Que se levante primero la pieza enemiga.

Estos dos casos únicamente se diferencian en el primer paso, ya que se podría reconocer el momento final en el que la pieza fue capturada y la posición inicial en el que la pieza que atacaba pasó a valer cero.

Caso 1) Primero pieza propia:

Caso 2) Primero pieza enemiga:

Como podemos ver la posición final es igual en ambos casos, por lo que podríamos reconocer la captura únicamente analizando dicha posición. Un problema que podría surgir es al reconocer los movimientos posibles ya que una captura podría no estar permitida en algunos casos, por lo que se debería analizar los movimientos posibles.

  • Movimientos posibles: Como vimos al analizar cómo realizar las capturas, es necesario un sistema que analice si un movimiento es posible o no, puesto que, por ejemplo en la captura, todas las piezas menos el caballo no tienen permitido sobrepasar a otra pieza si esta le bloquea el camino. Como conocemos cada pieza, su posición y sus movimientos posibles, sería sencillo determinar a qué posiciones pueden moverse legalmente, por ejemplo la torre únicamente podría moverse desde su posición inicial hacia una casilla que comparta el mismo número o la misma letra. (Agregar enroque, captura al paso, movimiento inicial de peón y coronación, jaque y mate).

Software para el guardado de partidas:

  • Guardado de partidas: Al tener las variables de cada pieza con su posición sabemos que movimiento realizó en cada turno, estos movimientos los pondremos en un archivo .txt o un similar, la idea es poder transmitir este archivo a un equipo externo, ya sea una pc, un celular o un servidor en internet, este equipo haría los procesos de transformar los datos “crudos” a un archivo .PGN y almacenarlo definitivamente debido a que el almacenamiento en el microcontrolador es temporal. Con el archivo .PGN se puede encontrar un programa que permita visualizar las partidas en imágenes reconocibles para el ojo humano.

Rep. GIT:

https://git.interior.edu.uy/YojanRojas/tablero-teta