Quiero hacer un tablero de ajedrez de madera en el que puedas jugar con piezas normales (es decir, piezas no modificadas que utilicen códigos RFID, imanes,...), pero que esté conectado a un software que tome nota de mis movimientos y actúe como el segundo jugador
He estado pensando en cómo detectar piezas en el tablero y he tomado la decisión de que no necesito reconocer qué pieza está dónde: La "verdad" está dentro del software, así que si muevo una pieza 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:
Quiero usar una Raspberry Pi como base de hardware para que se ejecute el software, que se escribirá en Node.js (pero eso no debería ser importante para esta pregunta).
Entonces, termino con 64 sensores de brillo y 64 LED, que necesito abordar individualmente. En otras palabras: necesito 64 salidas y 64 entradas. Y, por supuesto, esto es algo que una Raspberry Pi no maneja desde el primer momento, y creo que tiene que haber una mejor manera que tener 128 puertos de E/S.
Como 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 del tablero secuencialmente, y en cada columna detecta si se usa una fila (= un campo) o no.
Esto reduciría la complejidad a tener 8 salidas y 8 entradas (para poder leer el estado de la placa).
Sobre esto, tengo algunas preguntas:
Como una imagen vale más que mil palabras, aquí hay un ejemplo de LDM-24488NI : una matriz de 64 leds
Para su aplicación, necesitará una matriz de este tipo para LED y otra para sensores, lo que requiere un total de 32 pines IO. Dado que su RPi no tiene tantos, tendrá que usar demux de 1 a 8 para seleccionar filas y columnas individuales:
Para los LED, puede usar demultiplexores tanto para filas como para columnas, ya que solo necesita un LED a la vez. Para sensores, recomendaría usar un demux para filas y líneas individuales para columnas, para poder detectar múltiples sensores activos en una fila. Eso llevará el número de pines requerido a 17 pines, que un RPi puede manejar.
Sí, la multiplexación como usted describe es una forma común de abordar matrices de cosas.
La parte más complicada será lidiar con la naturaleza analógica de los sensores de luz. Los CdS LDR (resistencias dependientes de la luz) son probablemente los mejores en este caso porque son sensibles, baratos y producen una gran respuesta fácilmente medible en el rango de luminosidad humana. Eléctricamente, son resistencias, y la resistencia disminuye con la luz más brillante.
Simplificaría la multiplexación si usa un micro que tiene 8 entradas analógicas. Eso significa que la mitad de tu mux está integrado en el micro. Habilita una fila de LDR y lee las señales de 8 columnas directamente con el micro, por ejemplo.
El escaneo secuencial de 64 entradas analógicas se puede hacer fácilmente 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 toda la placa se escanearía cada 6,4 ms, 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, así que no hay problema. Hay otras cosas que tendrán que suceder, y usarás pines más rápido de lo que esperas ahora, pero un micro de 64 pines debería ser lo suficientemente bueno, si no uno de 44 pines.
Probablemente 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 cómputo principal a través de UART. El protocolo se vería como "iluminar el cuadrado 3,2" o "pieza quitada del cuadrado 5,4". Esto también permite una interfaz de hardware totalmente diferente en el futuro siempre que mantenga el mismo protocolo.
Para los LED , la forma obvia de hacer esto es tener una salida para cada fila y cada columna del tablero de ajedrez: un total de 8+8=16 pines. Los ánodos estarían conectados a los hilos de fila y los cátodos al hilo de columna. Para el LED que desea encender, debe hacer 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 (para que los LED restantes tengan polarización neutra o inversa).
Estoy asumiendo aquí que el microcontrolador proporciona voltajes suficientemente altos/bajos para que pueda conectar un LED de uno a otro. Si ese no es el caso, necesitará un transistor o un búfer para cada línea. Con un suministro de 5 V es ajustado, considerando que el LED cae alrededor de 2 V y desea una caída de voltaje razonable sobre su resistencia limitadora de corriente (tenga en cuenta que solo necesita instalarlos en las líneas de fila o en las líneas de columna, no en ambos).
Si sus salidas son de tres estados (es decir, además de la lógica 0 y la lógica 1, se pueden configurar en un estado de alta impedancia, tal vez configurándolas temporalmente como entradas), entonces puede ser inteligente y usar una cuadrícula de 4x8, con LED. conectados en pares antiparalelos. Es importante configurar las salidas no utilizadas a alta impedancia en esta configuración, de lo contrario, se encenderán los LED no deseados.
En cualquier caso, tendrá que pensar en el consumo actual y si es aceptable correr el riesgo de que un error de software encienda todos los LED de una fila a la vez (lo que, si no se tiene en cuenta, podría sobrecargar esa línea de fila del microcontrolador). .)
El caso de los sensores es más complicado. Asumiré que usa sensores resistivos, aunque no se garantiza necesariamente que los fototransistores se conduzcan en una sola dirección.
Puede usar las mismas salidas de 8 filas que usa para encender sus LED, pero necesitará entradas de 8 columnas dedicadas a la detección. Sin duda, habrá visto circuitos para teclados como este. Tenga en cuenta que estos solo están diseñados para tener una tecla presionada a la vez . Si el usuario presiona 1, 3, 7 y 9 al mismo tiempo, el teclado no puede detectar si el usuario suelta alguna de estas cuatro teclas porque todavía existe una ruta de corriente 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 la matriz conduciendo 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 abierto (o drenaje abierto si se utilizan circuitos integrados MOSFET) como este: http://www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdf Colector abierto significa que las salidas del IC solo absorberán la corriente, no la generarán. Por lo tanto, puede conectar 16 sensores a 16 salidas del chip y unir los otros extremos con una resistencia pullup (también conectaría su ADC aquí). Trae una salida baja (conductora) y las otras 15 permanecen altas (no conductoras). 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 circuitos integrados es binaria de 4 bits para seleccionar una de las 16 salidas, pero también tienen una entrada adicional para habilitar/deshabilitar el chip. Por lo tanto, podría tener potencialmente una matriz de 64 sumideros de colector abierto, conectados a 64 sensores, con los otros extremos de los sensores todos 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 complicado 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 se puede configurar como un contador octal conectando su novena salida a la línea de reinicio). Estos requieren un pulso 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 circuitos integrados del decodificador. Por lo general, tienen entradas adicionales para restablecer y habilitar. También hay circuitos integrados llamados registros de desplazamiento , que están disponibles en dos tipos: uno para convertir de serie a paralelo, el otro para convertir de paralelo a serie. Finalmente, haybuffers , 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 los circuitos de multiplexación.
La multiplexación es de hecho una práctica común.
Hay un par de formas en las que puedes sacar más provecho de tus pines de frambuesa pi
Una es usar un chip para hacer parte del trabajo pesado por usted. Por ejemplo, si tiene 8 entradas y 8 salidas para leer el estado de la placa, puede usar un contador para aumentar las 8 entradas una a la vez. 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 pines!
Guardar 6 pines puede 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 http://www.instructables.com/id/16-Stage -Decade-Counter-Chain-Using-two-4017-Chi/?ALLSTEPS (ignore la mitad superior, las dos líneas que bajan de arriba hacia abajo son su "restablecimiento", que viene de la parte superior izquierda y el " vaya a la siguiente fila", que se llama CLK, por 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.
Felicitaciones, ahora tiene dos pines de salida (restablecimiento y reloj) y 4 pines de entrada, para un total de 6, ¡eso 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 adicional para eso.
Ahora para los LED. Ya tiene una fuente de alimentación controlada (los dos contadores de décadas), reutilicémoslos. Coloque sus 64 LED de sus 16 pines de suministro, a través de una resistencia (¡cada LED DEBE tener su propia resistencia!), a otros 4 rieles (mismo diseño que el 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"; dado que ambos lados del LED ahora tienen 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), configure uno de los 4 rieles en bajo. La corriente ahora debería fluir desde el "alto" del contador de décadas, al "bajo" en ese riel específico. ¡Oye, presto, la luz se enciende! Dele un poco de retraso, luego apáguelo antes de cambiar el contador de décadas nuevamente.
Si desea más control, puede usar algo como un chip TLC5940 - http://playground.arduino.cc/Learning/TLC5940 - cada chip puede configurar 16 LED (por lo que necesitaría 4 de estos) a un nivel de brillo de 0 (apagado) a 1024 (encendido completo), para que pueda atenuar LED individuales hacia adentro y hacia afuera, con gran control. De memoria, estos necesitan alrededor de 4 pines, y se pueden conectar en cadena, por lo que 4 pines digitales (uno de los cuales debe ser PWM; estos tienen el símbolo "~" al lado del pin) controlarán cualquier número de LED.
¡Buena suerte!
No creo que necesite un LED en la esquina superior derecha. Un sensor en el medio como mencionas sería suficiente. La parte Tricky 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'.
Así que primero necesitas un programa para programar el tipo de pieza en la posición inicial. Posteriormente, cuando muevas tus piezas, el código generará la ubicación inicial de la pieza a la ubicación final. Eso reducirá su entrada a la mitad.
mcmiln
Glacial
golo roden
Transeúnte
mcmiln
golo roden
golo roden
Glacial
Transistor
usuario2813274
tomnexus
usuario13107