Hacer un tablero de ajedrez electrónico

15

Quiero hacer un tablero de ajedrez de madera en el que puedas jugar con piezas normales (es decir, no piezas modificadas que utilicen códigos RFID, imanes, ...), pero que estén conectados a un software que tome nota de mis movimientos. y actúa como el segundo jugador.

He estado pensando en cómo detectar piezas en la pizarra, y he tomado las decisiones que no necesito reconocer en qué pieza se encuentra: La "verdad" está dentro del software, por lo que si muevo una pieza de De A a B, el software puede averiguar qué pieza se movió.

Entonces, tuve la idea de perforar dos agujeros en cada campo del tablero de ajedrez, uno en el centro y otro en la esquina superior derecha:

  • El que está en el centro se usará para que un sensor de brillo detecte si una pieza está de pie en el campo o no.
  • El que está en la esquina se usará para que un LED muestre qué pieza debe mover el usuario para la computadora, de modo que la situación del mundo real coincida nuevamente con la situación del software.

Quiero usar una Raspberry Pi como base de hardware para ejecutar el software, que se escribirá en Node.js (pero eso no debería ser importante para esta pregunta).

Entonces, lo que acabo de conseguir es con 64 sensores de brillo y 64 LED, que debo abordar de forma individual. En otras palabras: necesito 64 salidas y 64 entradas. Y, por supuesto, esto es algo que una Raspberry Pi no maneja de inmediato, y creo que tiene que haber una mejor manera que tener 128 puertos de E / S.

Dado que creo que detectar el estado de la placa es la tarea más importante, comencé a buscar en la web cómo manejar una matriz de interruptores de 8x8. Encontré la sugerencia de usar un microcontrolador que escanea las columnas de la placa de forma secuencial, y en cada columna detecta si se usa una fila (= un campo) o no.

Esto reduciría la complejidad al tener 8 salidas y 8 entradas (para poder leer el estado de la placa).

Sobre esto, tengo algunas preguntas:

  1. ¿Mis pensamientos son correctos, es decir, es este el enfoque correcto o hay una mejor alternativa que debería tener en cuenta?
  2. Como no tengo experiencia con microcontroladores, ¿qué debo tener en cuenta? ¿Necesito un microcontrolador con 16 pines, que sea programable en un lenguaje que pueda escribir, o ...?
  3. ¿Alguien ha creado una junta de este tipo y tiene algún consejo o sabe de un tutorial que lo guíe en el proceso?
pregunta Golo Roden

5 respuestas

5

Como una imagen vale más que mil palabras, aquí hay un ejemplo de LDM-24488NI : una matriz de 64 led

Parasuaplicación,necesitaráunamatrizdeestetipoparaLED,yotraparasensores,querequierenuntotalde32pinesIO.YaquesuRPinotienetantos,deberáusar demux de 1 a 8 para seleccione filas y columnas individuales:

Para los LED, puede usar demultiplexores para filas y columnas, ya que solo necesita un led a la vez. Para los sensores, recomiendo usar un demux para filas y líneas individuales para columnas, para poder detectar múltiples sensores activos en una fila. Eso hará que el número requerido de pines sea de 17 pines, que un RPi puede manejar.

    
respondido por el Dmitry Grigoryev
12

Sí, la multiplexación como usted describe es una forma común de abordar matrices de cosas.

La parte más complicada será tratar con la naturaleza analógica de los sensores de luz. Las CdS LDR (resistencias dependientes de la luz) son probablemente las mejores en este caso porque son sensibles, baratas y producen una respuesta grande y fácilmente medible en el rango de la luz humana. Eléctricamente, son resistencias, y la resistencia disminuye con una luz más brillante.

Simplificaría la multiplexación si usas un micro que tiene 8 entradas analógicas. Eso significa que la mitad de tu mux está integrada en el micro. Habilita una fila de LDR y lee las señales de 8 columnas directamente con el micro, por ejemplo.

El escaneo de 64 entradas analógicas secuencialmente se puede hacer de manera instantánea en términos humanos con micros ordinarios. Digamos que puede tomar una nueva lectura cada 100 µs. Eso es "largo", incluso para micros pequeños y baratos. Eso significa que se escaneará todo el tablero cada 6,4 ms, lo que es mucho más rápido de lo que puede percibir un retraso.

Multiplexar los LED es aún más fácil, ya que todo se hace con salidas digitales. Muchos micros tienen más de 16 salidas digitales, por lo que esto no es un problema. Hay otras cosas que tendrán que suceder, y usarás los pines más rápido de lo que puedes esperar ahora, pero un micro de 64 pines debería ser lo suficientemente bueno, si no uno de 44 pines.

Probablemente me dedicaría un micro solo para manejar la E / S de la placa. Esto está optimizado para tener suficientes pines de E / S, entradas A / D y similares. Luego se conecta al motor de computación principal a través de UART. El protocolo se vería como "ilumina el cuadrado 3,2" o "pieza extraída del cuadrado 5,4". Esto también permite una interfaz de hardware totalmente diferente en el futuro, siempre y cuando se mantenga el protocolo igual.

    
respondido por el Olin Lathrop
7

Para los LEDs , la manera obvia de hacerlo es tener una salida para cada fila y cada columna del tablero de ajedrez: un total de 8 + 8 = 16 pines. Los ánodos se conectarán a los cables de la fila y los cátodos al cable de la columna. Para el LED que desea encender, haría que su cable de ánodo sea positivo (lógica 1) y su cable de cátodo negativo (lógica 0), mientras mantiene los otros en el estado inverso (por lo tanto, los LED restantes tienen polarización inversa o neutral).

Supongo que el microcontrolador proporciona un voltaje suficientemente alto / bajo para que pueda conectar un LED de uno a otro. Si ese no es el caso, necesitará un Transistor o buffer para cada línea. Con el suministro de 5 V está apretado, considerando que el LED cae aproximadamente 2 V y desea una caída de voltaje razonable sobre su resistencia limitadora actual (tenga en cuenta que solo necesita instalarlos en las filas o en las líneas de la columna, no en ambas).

Si sus salidas son tri estado (es decir, además de la lógica 0 y la lógica 1, se pueden configurar en un estado de alta impedancia, quizás configurándolas temporalmente como entradas). póngase listo y use una cuadrícula de 4x8, con los LED conectados en pares antiparalelos. Es importante configurar las salidas no utilizadas a alta impedancia en esta configuración, de lo contrario los LED no deseados se encenderán.

En cualquier caso, tendrá que pensar en el dibujo actual , y si es aceptable arriesgar la posibilidad de que un error del software encienda todos los LED seguidos al mismo tiempo (que si no se tiene en cuenta, podría sobrecorriente esa línea de fila del microcontrolador.)

El caso de los sensores es más complicado. Supondré que usas sensores resistivos, aunque no se garantiza necesariamente que los fototransistores conduzcan en una sola dirección.

Puede usar las mismas salidas de 8 filas que utiliza para encender sus LED, pero necesitará 8 entradas de columna dedicadas a la detección. Sin duda, habrá visto circuitos para teclados de esta manera. Tenga en cuenta que están solo diseñados para tener una tecla presionada a la vez . Si el usuario presiona 1,3,7 y 9 juntos, el teclado no puede detectar si el usuario libera una de estas cuatro teclas porque todavía existe una ruta actual a través de los otros tres interruptores.

Una solución utilizada en los teclados musicales (que están diseñados para tener más de un elemento de conducción de la matriz a la vez) es tener un diodo en serie con todos y cada uno de los interruptores.

Otra solución sería comprar cuatro circuitos integrados decodificadores de 4 a 16 con salidas de colector abiertas (o abrir drenaje si se usan circuitos integrados MOSFET) como este: enlace Colector abierto significa que las salidas del IC solo tomarán corriente, no la fuente. De este modo, puede conectar 16 sensores a 16 salidas del chip y los otros extremos en común con una resistencia de extracción (también conectaría su ADC aquí). Si baja una salida (conductora) y las otras 15 permanecen altas (no conductora). Esto contrasta con la salida lógica estándar, donde las otras 15 salidas estarían vertiendo corriente en el punto común.

La entrada a estos IC es de 4 bits binarios para seleccionar una de las 16 salidas, pero también tiene una entrada adicional para habilitar / deshabilitar el chip. Por lo tanto, es posible que tenga un conjunto de 64 lavamanos abiertos, conectados a 64 sensores, con los otros extremos de los sensores en común a una sola resistencia pullup y un convertidor analógico a digital. Necesitaría un total de 8 salidas en su microcontrolador para esto: cuatro para tomar las señales de selección de 4 a 16 (comunes a los cuatro chips) y cuatro para tomar las señales de habilitación (una para cada chip).

EDITAR: 3 a 8 decodificadores (también llamados 1 de 8 = 1 línea de 8) parecen estar más disponibles que 4 a 16, pero 8 IC es mucho más desordenado que 4. Otro tipo de IC que podría ser útil es el contador octal (y su primo más común, el contador de décadas , que puede configurarse como un contador octal al conectar su novena salida a la línea de reinicio.) Estos requieren un impulso en serie para avanzar de una salida a la siguiente, por lo que necesitarían menos pines de E / S en el microcontrolador que los IC del decodificador. Por lo general, tienen entradas adicionales para restablecer y habilitar. También hay IC llamados registros de desplazamiento , que están disponibles en dos tipos: uno para convertir series en paralelo, y el otro para convertir en paralelo a series. Finalmente, hay buffers , que puede colocar entre su Rasberry Pi y su tablero de ajedrez para que el Pi no se destruya en caso de sobrecorriente. Todos estos pueden ser útiles en circuitos de multiplexación.

    
respondido por el Level River St
4

La multiplexación es de hecho una práctica común.

Hay un par de maneras en que puede sacar más provecho de sus pines de frambuesa pi

Uno es usar un chip para hacer parte del trabajo pesado por ti. Por ejemplo, si tiene 8 entradas y 8 salidas para leer el estado de la placa, puede usar un contador para elevar las 8 entradas de una en una. Necesitará 2 pines en el Arduino para esto: uno para restablecer el primer pin, y otro para "ir a la siguiente fila". ¡Acabas de guardar 6 pins!

Guardar 6 pines podría no ser suficiente - veamos a dónde podemos ir desde aquí: si reorganiza su cuadrícula de 8x8 en una cuadrícula de 16x4, puede usar algo como enlace (ignora la mitad superior, las dos líneas que bajan de arriba a abajo son su "reinicio", que viene de la parte superior izquierda, y el "ir a la siguiente fila", que se llama CLK, para el reloj, aquí). Ahora puede contar el 8 en la mitad izquierda del tablero, seguido del 8 en la mitad derecha del tablero; conecte las columnas A y E, B y F, C y G, y D y H juntas.

Enhorabuena, ahora tiene dos pines de salida (restablecer y reloj) y 4 pines de entrada, para un total de 6, ¡eso ahorra 10 pines! Tenga en cuenta que la pi de frambuesa no tiene convertidores de analógico a digital, por lo que necesitará algún trabajo adicional para eso.

Ahora para los LEDs. Ya tiene una fuente de alimentación controlada (los contadores de las dos décadas), reutilicemos esos. Coloque sus 64 LED de sus 16 pines de suministro, a través de una resistencia (¡cada LED DEBE tener su propia resistencia!), En 4 otros rieles (el mismo diseño anterior: AE, BF, CG y DH). Conecte estos 4 rieles a través de 4 transistores a 4 pines, y coloque todos los pines en "alto", ya que ambos lados del LED ahora están a 5 voltios, los LED estarán apagados. Luego, cuando desee encender un LED, asegúrese de que sus dos décadas estén en la posición correcta (como si estuviera leyendo el sensor en ese cuadrado), coloque uno de los 4 rieles en bajo. La corriente ahora debería fluir desde el "alto" desde el contador de décadas hasta el "bajo" en ese carril específico. Hey presto, la luz se enciende! Dale un poco de retraso, luego apágalo antes de volver a cambiar el contador de décadas. Puede parpadear fácilmente varias luces, siempre que solo una luz esté encendida a la vez.

Si desea más control, puede usar algo como un chip TLC5940 - enlace : cada chip puede establecer 16 Los LED (por lo que necesitarías 4 de estos) a un nivel de brillo de 0 (apagado) a 1024 (encendido total), para que puedas encender y apagar los LED individuales con gran control. Desde la memoria, necesitan aproximadamente 4 pines, y pueden conectarse en cadena, por lo que 4 pines digitales (uno de los cuales debe ser PWM, tienen el símbolo "~" junto al pin) controlarán cualquier número de LED.

¡Buena suerte!

    
respondido por el AMADANON Inc.
0

No creo que necesites un LED en la esquina superior derecha. Un sensor en el medio como mencionas sería suficiente. La parte difícil será el código para el tablero de ajedrez. Imagina que tienes un tablero de ajedrez. La fila se indicará como "alfabeto" y la columna se indicará como "número".

Entonces, primero necesitas un programa para programar el tipo de pieza en la posición inicial. Más adelante, cuando mueva sus piezas, el código generará la ubicación inicial de la pieza en la ubicación final. Eso reducirá su entrada a la mitad.

    
respondido por el Brandon Lok

Lea otras preguntas en las etiquetas