14 votos

Hacer un tablero de ajedrez electrónico

Quiero hacer un ajedrez de madera de la junta de que se puede jugar con trozos regulares (es decir, no se modifican las piezas que hacen uso de la RFID, códigos, imanes, ...), pero que está conectado a un software que toma nota de mis movimientos y actos como el segundo jugador.

He estado pensando acerca de cómo detectar piezas en el tablero, y he tomado las decisiones que no debo reconocer que la pieza es donde: La "verdad" es en el software, así que si puedo mover una pieza de a a B, el software es capaz de averiguar que la pieza se movió.

Entonces, yo tenía la idea de perforar dos agujeros en cada campo del tablero de ajedrez, uno en el centro, y uno en la esquina superior derecha:

  • La una en el centro será utilizado para un sensor de luminosidad para detectar si una pieza está de pie en el campo o no.
  • El de la esquina va a ser utilizado para un LED para mostrar que la pieza que el usuario tiene que mover para el equipo, por lo que la situación real coincide con el software de la situación de nuevo.

Quiero usar una Raspberry Pi como el hardware de la fundación para el software para que se ejecute, que será escrito en Node.js (pero que no debe ser importante para esta pregunta).

Así que, lo que es de 64 brillo de los sensores, y 64 LEDs, que necesito para abordar de forma individual. En otras palabras: necesito 64 salidas, y 64 entradas. Y, por supuesto, esto es algo que una Raspberry Pi no manejar fuera de la caja - y creo que tiene que haber una mejor manera que tiene de 128 puertos de e/S.

Pues creo que la detección de la junta del estado es la tarea más importante, empecé a buscar en la web cómo manejar un 8x8 de la matriz de interruptores. Me encontré con la sugerencia de utilizar un micro controlador que escanea las columnas de la junta de forma secuencial, y en cada una de las columnas que detecta si una fila (= un campo) se utiliza o no.

Esto podría reducir la complejidad a tener 8 salidas y 8 entradas (para ser capaz de leer la junta del estado).

En esto, tengo un par de preguntas:

  1. Son mis pensamientos derecho, es decir, este es el enfoque correcto, o hay una mejor alternativa que debo estar atento?
  2. Como yo no tengo experiencia con micro controladores, ¿qué debo tener en cuenta? ¿Necesito un micro controlador con 16 pines, que es programable en un idioma que yo soy capaz de escribir, o ...?
  3. Alguien ha construido una junta directiva, y tiene algunos consejos o sabe de un tutorial que le guiará en el proceso?

12voto

RelaXNow Puntos 1164

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

La parte más difícil será tratar con el análogo de la naturaleza de los sensores de luz. CdS LDRs (dependiente de la luz resistencias) son probablemente los mejores en este caso debido a que son sensibles, barato, y no producir una gran fácilmente medible respuesta en los humanos, la ligereza de la gama. Eléctricamente, que son las resistencias, la resistencia de la disminución en la luz más brillante.

Sería simplificar la multiplexación si utiliza un micro que tiene 8 entradas analógicas. Eso significa que la mitad de su mux está integrado en el micro. Habilitar una fila de LDR, y leer la columna de 8 señales directamente con el micro, por ejemplo.

Escaneo de 64 entradas analógicas de forma secuencial se puede hacer fácilmente, de forma instantánea, en términos humanos, con las micros. Digamos que usted puede tomar una nueva lectura de cada 100 µs. Que es "largo", incluso para las pequeñas y hoteles de micros. Eso significa que toda la junta se escanea cada 6,4 ms, que es el camino más rápido de lo que puede percibir un retraso.

La multiplexación de los LEDs es incluso más fácil, ya que todo se hace con salidas digitales. Un montón de micros tienen más de 16 salidas digitales, así que esto no es ningún problema. Hay otras cosas que tienen que suceder, y que utilizará los pines más rápido de lo que usted puede esperar ahora, pero una de 64 pines micro realmente debería ser lo suficientemente bueno, si no un 44 pin.

Probablemente me dedique un micro solo para el manejo de la pensión de I/O. Esto está optimizado para tener la cantidad suficiente de terminales de e/S, entradas a/D, y el como. Entonces interfaces para el principal motor del cómputo a través de UART. El protocolo sería como "la luz hasta la plaza de 3,2" o "pieza eliminado de la plaza de 5,4". Esto también permite una totalmente diferente interfaz de hardware en el futuro siempre y cuando mantenga el protocolo de la misma.

7voto

steveverrill Puntos 338

Para el LED, la forma más 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 pueden ser conectadas a la fila de los cables y los cátodos a la columna de alambre. Para que el LED se desea a la luz que haría su ánodo cable positivo (lógica 1) y el cátodo cable negativo (lógica 0), mientras que el mantenimiento de los otros en el reverso del estado (para el resto de los LED tienen neutral o polarización inversa.)

Yo estoy haciendo una suposición aquí que el microcontoller da suffciently de alta/baja tensión para que usted será capaz de salvar un LED de uno a otro. Si ese no es el caso, usted tendrá un transistor o buffer para cada línea. Con 5V de alimentación está apretado, teniendo en cuenta que el LED deje caer sobre 2V y desea una razonable caída de voltaje a través de la actual de la resistencia limitadora (nota: sólo tiene que instalar estos en cualquiera de las líneas o la columna de las líneas, no tanto.)

Si las salidas están tri estado (que es, además de la lógica 0 y 1 lógico, se puede ajustar a un estado de alta impedancia, tal vez por el temporal de configurar como entradas), a continuación, usted puede conseguir inteligente y el uso de un 4x8 cuadrícula, con los LED conectados en antiparalelo pares. Es importante establecer salidas no utilizadas de alta impedancia en esta configuración, de lo contrario no deseados LED se iluminará.

En cualquier caso, usted tendrá que pensar sobre el consumo de corriente, y si es aceptable el riesgo de la posibilidad de un error de software de iluminación LED en una fila a la vez (que si no se explica, podría sobrecorriente que la fila de la línea de la microcontrolador.)


El caso de los sensores es más complicado. Voy a suponer que el uso de sensores resistivos, aunque fototransistores no son necesariamente garantizado para llevar a cabo en una sola dirección.

Usted puede utilizar el mismo 8 de la fila de las salidas que se utiliza para iluminar el LED, pero vas a necesitar columna de 8 entradas dedicadas a la detección. Usted, sin duda, han visto circuitos para teclados como este. Tenga en cuenta que estas son sólo diseñado para tener una tecla en un momento. Si el usuario presiona 1,3,7 y 9, el teclado es incapaz de detectar si el usuario libera a una de estas cuatro claves porque todavía existe una ruta de acceso actual a través de los otros tres interruptores.

Una solución utilizada en teclados musicales (que son diseñados para tener más de un elemento de la matriz de realizar en un tiempo) es tener un diodo en serie con cada interruptor.

Otra solución sería la de comprar cuatro de 4 a 16 decodificador de ICs con salidas de colector abierto (o drenaje abierto si el uso de MOSFET IC)como este: http://www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdf colector Abierto significa que los resultados de la IC sólo fregadero de la actual, no la fuente. Así que usted puede conectar 16 sensores de 16 salidas del chip, y el común de los otros extremos juntos con una resistencia pull-up (que podría conectar su ADC). Usted trae una salida baja (la realización) y los otros 15 siguen siendo altos (no conductor.) Esto está en contraste con la lógica estándar de salida, donde los otros 15 salidas sería vertido de corriente en el punto común.

La entrada a estos ci es de 4 bits binarios para seleccionar uno de los 16 salidas, pero también tienen una entrada extra para habilitar/deshabilitar el chip. Por lo tanto usted podría tener una matriz de 64 colector abierto fregaderos, conectado a 64 sensores, con los otros extremos de los sensores de todos los commoned a una sola resistencia pull-up y convertidor análogo-digital. Se necesitaría un total de 8 salidas del microcontrolador para esto: de cuatro a tomar de 4 a 16 señales de selección (común a todos los cuatro chips) y cuatro para tomar el habilitar las señales (uno para cada chip.)

EDIT: de 3 a 8 decodificadores (también llamado 1 de 8 = 1 salida de línea de 8) parecen ser más disponibles de 4 a 16, pero 8 IC es mucho más desordenado de 4. Otro tipo de IC que podría ser útil es el contador octal (y su más comunes primo de la década de contador, que puede ser configurado como un contador octal mediante la conexión de su novena salida a la linea de reset.) Estos requieren de una serie de pulso para el avance de una salida a la siguiente, por lo que el necesita menos de e/S de pines en el microcontrolador de la decodificador de IC. Por lo general, tienen entradas adicionales para restablecer y activar. También hay IC llamados registros de desplazamiento, los cuales están disponibles en dos tipos: uno para la conversión de serie a paralelo, el otro para la conversión de paralelo a serie. Por último, hay buffers, que se puede poner entre su Raspberry Pi y su tablero de ajedrez, por lo que el Pi no se destruyen en caso de sobrecorriente. Todos estos pueden ser útiles en la multiplexación de los circuitos.

5voto

Mark0978 Puntos 495

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

enter image description here

Para su aplicación es necesario tener uno de esos de la matriz de LEDs, y otra para los sensores, requiriendo un total de 32 pines. Desde su RPi no tiene que muchos de ellos, usted tendrá que usar de 1 a 8 demux para seleccionar las filas y columnas:

enter image description here

Para los Led, se puede utilizar demultiplexers para ambas filas y columnas, ya que sólo necesita un led a la vez. Para los sensores, me gustaría recomendar el uso de un demux para las filas y las líneas individuales para las columnas, para ser capaz de detectar múltiples sensores activos en una fila. Que traerá el pin requerido contar hasta 17 pines, que un RPi puede manejar.

4voto

Omer Eldan Puntos 106

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

Hay un par de maneras que usted puede obtener más de tu raspberry pi pines

Uno es el uso de un chip para hacer parte del trabajo pesado para usted. Por ejemplo, si usted tiene 8 entradas y 8 salidas para leer el consejo de estado, puede utilizar un contador, para elevar el 8 entradas de una en una. Se necesitan 2 pines del Arduino para esto - uno para regresar a la primera pin, y uno para "ir a la siguiente fila". Usted acaba de guardar 6 pines!

Ahorro de 6 pines podría no ser suficiente - vamos a ver donde podemos ir de aquí: Si re-organizar su cuadrícula de 8x8 en un 16x4 de cuadrícula, puede usar algo como http://www.instructables.com/id/16-Stage-Decade-Counter-Chain-Using-two-4017-Chi/?ALLSTEPS (ignore la mitad superior, las dos líneas rectas hacia abajo desde la parte superior a la parte inferior son sus "reset", que viene de la parte superior izquierda, y el "ir a la siguiente fila", el cual es llamado el CLK, para el reloj, aquí). Ahora usted puede contar el 8 en la izquierda la mitad de la junta directiva, seguido por el 8 en la mitad derecha de la junta directiva; conectar la columna a y E, B y F, C y G, y D y H juntos.

Felicitaciones, ahora tiene dos pines de salida (reset y reloj), y 4 pines de entrada, para un total de 6 - que ahorra 10 pines! Tenga en cuenta que la raspberry pi no tiene convertidores de analógico a digital, por lo que necesitará un poco de trabajo extra para que.

Ahora para los LEDs. Usted ya tiene una fuente de alimentación controlada (los dos década de los contadores) - permite la reutilización de aquellos. Pon tu 64 LEDs desde el 16 de suministro de pins, a través de una resistencia (cada LED DEBE tener su propia resistencia!), 4 otros rieles (mismo diseño que los de arriba: AE, BF, CG y DH). Conecte estos 4 rieles a través de 4 transistores de 4 pines, y poner todos los pines a "high" desde ambos lados del LED está ahora en 5 voltios, el Led estará apagado. Entonces, cuando usted quiere a la luz de un LED, asegúrese de que sus dos décadas están en la posición correcta (como si estuviera leyendo el sensor en esa plaza), uno de los 4 carriles de baja. Actual ahora debe fluir desde el "alto" a partir de la década de contador, a la "baja" en el ferrocarril. Hey presto, se enciende la luz! Dar un poco de retraso, a continuación, vuelva apagado antes de cambiar la década contador. Usted puede fácilmente parpadear varias luces, en tanto que sólo uno está encendida la luz en un momento.

Si desea más control, puedes usar algo como un TLC5940 chip http://playground.arduino.cc/Learning/TLC5940 - cada chip puede ajustar de 16 LEDs (así que vas a necesitar 4 de estos) para un nivel de brillo de 0 (off) a 1024 (completa), por lo que usted puede apagar los LEDs individuales dentro y fuera, con un gran control. De la memoria, estos necesitan alrededor de 4 pines, y pueden ser conectados en cadena, de modo que 4 pines digitales (uno de los cuales debe ser PWM - " ~ " símbolo al lado del pin) controlar cualquier número de LEDs.

Buena suerte!

0voto

Brandon Lok Puntos 6

Yo no creo que se necesite un LED en la esquina superior derecha. Un sensor en el medio, como usted menciona, sería suficiente. La parte Difícil será el código para el tablero de ajedrez. Imagine que usted tiene un tablero de ajedrez. La fila se indica como 'abecedario' y la columna se indica como 'número'.

Así que lo primero que necesita un programa para programar el tipo de pieza a la posición inicial. Más tarde, cuando usted mueve sus piezas, el código se genera la pieza inicial de la ubicación a la ubicación final. Que va a reducir su entrada por la mitad.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X