Bricolaje

Cómo hacer un juego de la vida de Conway con matriz de LED con Arduino bricolaje

Cómo hacer un juego de la vida de Conway con matriz de LED con Arduino bricolaje

Bytes cortos: Cada pasatiempo tiene sus propios proyectos importantes, como la introducción de Hello World en la programación. A la comunidad de Arduino le gusta que la gente comience con la luz LED parpadeante. Pero, ¿qué podríamos hacer con 64 luces LED en una matriz? Podemos mostrar todo tipo de cosas como números, letras e incluso imágenes simples. En este artículo, veremos cómo hacer eso, así como el Juego de la vida de Conway..

El Arduino ha tenido una popularidad explosiva durante la última década. Hay miles de bibliotecas disponibles para ello. Es una plataforma muy bien documentada y sorprendente para aprender a programar y diseñar componentes electrónicos..

En este artículo, cubriremos ligeramente el uso de los controladores LED MAX7219 y MAX7221 con la biblioteca LedControl, que está disponible para descargar e instalar en Arduino IDE, así como en Github, e implementaremos Game of Life de Conway. Las dos partes importantes que necesitará para esto son uno de los controladores de LED mencionados anteriormente y una matriz de LED compatible (además del Arduino y algunos componentes electrónicos estándar, por supuesto). Puede encontrar muchos por muy baratos (menos de $ 3 USD) en diferentes tiendas en línea como eBay, Banggood y AliExpress. Sin embargo, es muy importante leer la descripción de lo que está comprando, porque muchos de estos vienen como kits que deben ensamblarse y soldarse. Dependiendo de dónde viva, el tiempo de envío puede ser de algunas semanas, así que asegúrese de verificar la hora estimada de llegada a su área..

Seguí adelante y compartí la fuente de este proyecto en mi (barón) Página de Github, así que siéntete libre de descargarla, modificarla, volver a publicarla o lo que quieras. Será necesario seguir adelante y hay muchos comentarios en el código de Github que no se incluyen en este artículo simplemente porque sería un artículo extenso y son mucho más efectivos en el código real que intentar apretarlos. en este artículo.

Después del archivo de encabezado y las definiciones de pin, encontrará una línea que podría no tener sentido.

LedControl lc = LedControl (DIN, CLK, CS, 0);

Esto crea el objeto LedControl que se utiliza para interactuar con nuestro controlador LED al proporcionar la entrada digital, el reloj y los pines de señal del chip, así como especificar la cantidad de dispositivos (se pueden conectar en cadena para una pantalla grande). El protocolo de control entre el controlador LED y el Arduino es SPI (Serial Peripheral Interface), pero no tenemos que entrar en eso porque tenemos un objeto de la clase LedControl para hacer nuestras ofertas por nosotros..

La siguiente parte, en el configuración() función, es en su mayoría autoexplicativo, pero lo cubriremos para mayor claridad.

lc.shutdown (0, falso); lc.setIntensity (0, 8); lc.clearDisplay (0);

El controlador LED estará en un estado de apagado cuando se encienda por primera vez, por lo que debemos decirle que se active, que es lo que hace la primera línea. El segundo establece el brillo, ya que solo estamos usando una sola pantalla, el primer parámetro, la dirección de la matriz, es 0, y la intensidad debe ser la que prefieras, siendo el valor máximo válido 15. Por último, borramos la pantalla de los posibles valores anteriores. Por lo general, esto no es un problema, pero si su Arduino se reinicia por alguna razón, podría dejar los LED no deseados iluminados..

Antes de entrar en la programación, es importante comprender qué es el Juego de la vida de Conway y cuáles son las reglas. El juego es un juego de "jugador cero". Todo lo que eso significa es que el jugador elige el estado inicial, lo que haremos al azar, y luego sigue las reglas. El Juego de la Vida es muy simple y solo tiene cuatro reglas:

  1. Cualquier célula viva con menos de dos vecinos vivos muere, como causada por la subpoblación..
  2. Cualquier célula viva con dos o tres vecinos vivos vive para la próxima generación.
  3. Cualquier célula viva con más de tres vecinos vivos muere, como por superpoblación.
  4. Cualquier célula muerta con exactamente tres vecinos vivos se convierte en una célula viva, como por reproducción..

- Wikipedia

Obtenga su propia placa Arduino y comience a hacer bricolaje hoy

Para representar la cuadrícula utilizamos dos matrices bidimensionales. Como estamos trabajando con matrices de 8 × 8, esas son las dimensiones que aplicamos a nuestras matrices. Si bien las matrices de bytes serían mucho más eficientes en la memoria (y de hecho se usan con frecuencia en aplicaciones como esta), los booleanos son mucho más fáciles de modificar en una matriz que los bits en un byte. La modificación de bits dentro de un byte requeriría el uso de bit a bit operaciones que complicarían un poco las cosas en comparación con las matrices booleanas simples. La segunda matriz se debe a que tenemos que calcular el siguiente estado a partir del estado actual, pero si alteramos el estado actual, no obtendremos el estado sucesivo deseado..

Los siguientes dos bucles for son para inicializar el cgrid matriz con valores aleatorios y el ngrid matriz con falso valores. Hay una posibilidad entre cuatro de que la celda esté 'viva', esto se hace generando un número aleatorio entre 0 y 3, si el número es mayor que 2, entonces la celda está viva.

El resto del código es lo suficientemente simple como para no necesitar más explicaciones o tiene una explicación en el código. Pero el displayGeneration () la función es más interesante. Esta función, con pocas modificaciones, es capaz de tomar matrices de bytes y enviarlas directamente a la matriz. El lc.setColumn () La llamada al método en realidad toma un byte ya que es el último argumento, siendo el primero la dirección y la columna que se está configurando. Al usar esto y configurarlo como se muestra a continuación, puede crear fácilmente una función que mostrará una matriz de bytes de ocho elementos, como una letra o una imagen, en la matriz.

void printByte (byte ba [8]) para (int i = 0; i < 8; i++) lc.setRow(0,0,ba[i]); 

Puede ver que el método utilizado es el setRow () método en oposición al setColumn () método. Lo que hace es simplemente aplicar el byte horizontalmente en lugar de verticalmente, una simple rotación de 90 grados. Este es un punto importante dado que la orientación de su proyecto no será necesariamente la misma que la mía. Además, puede invertir el orden en que se colocan los bytes utilizando (7 - i) como segundo argumento, reflejando efectivamente el resultado. Esta es una forma muy fácil de orientar correctamente la salida de su proyecto..

Si tiene la intención de mostrar texto en su matriz, puede encontrar fuentes de matriz de 8 × 8 en línea. Sin embargo, es muy importante tener en cuenta la cantidad total de RAM que tiene su microcontrolador. Usé Uno para este proyecto y una de las fuentes incluía definiciones para las configuraciones de 128 bits más allá del estándar ASCII de 7 bits. Esto fue demasiado para mi Uno (eso es 8 bytes x 256 = 2048 bytes, todo el Uno capacidad) y necesitaba la mitad del conjunto a las 128 definiciones ASCII originales para que esa fuente funcionara. Por lo tanto, tenga en cuenta que su kilometraje puede variar según su microcontrolador..

Después de una pequeña cantidad de trabajo, puede sentarse y ver el fascinante efecto del Juego de la vida en su propia pequeña pantalla de matriz LED..

¿Hay otros proyectos de Arduino que le gustaría ver cubiertos en Fossbytes? Háganos saber en los comentarios a continuación..

Nuestras selecciones para los mejores sintonizadores de TV digital para teléfonos inteligentes o tabletas Android
Usar un teléfono inteligente o tableta Android para ver TV por aire es una buena opción para canales gratuitos. Las antenas de TV se utilizan ampliam...
Análisis de la tableta Dragon Touch MAX10 Plus de 10 pulgadas con pantalla Full HD QLED
La Dragon Touch MAX 10 Plus es una tableta de gama media con un procesador de 8 núcleos a 1,6 GHz, 3 GB de RAM y 32 GB de espacio de almacenamiento in...
Revisión MECOOL KM6 Android TV Box Deluxe Edition
El MECOOL KM6 es una nueva caja de TV Android para 2021 con muy buen hardware.Incluye un procesador 2GHZ S905X4 junto con 4GB de RAM y 64GB de almac...