Dado electrónico con Arduino UNO R4

En este artículo hago una remake de un proyecto de un “dado electrónico” que ya tiene varios años, pero actualizado usando la matriz de leds del Arduino UNO R4.

Introducción

Hace ya algunos años publiqué un proyecto para construir un “dado electrónico” con un Arduino UNO (Rev3 en esa época) que fue muy popular (y lo sigue siendo). Y así como a veces hacen “remakes” de películas exitosas algunos años después del estreno de la original, yo también les presento una remake de ese proyecto pero actualizado a la versión R4 del Arduino UNO y aprovechando la matriz de leds de la version Wifi de esa placa.

El objetivo principal de este proyecto es aplicar algunos de los conceptos que he desarrollado en artículos anteriores sobre el uso de la matriz de LEDs. Si te perdiste esos artículos, puedes leerlos en los siguientes enlaces:

Programa

A diferencia del proyecto original, este no incluye un zumbador (buzzer) ni pulsador que se deba presionar para generar los números, ya que he preferido no añadir componentes externos a la placa.

El principio de funcionamiento es básico: al arrancar, la placa genera un número al azar, lo muestra en la matriz de leds y finaliza. Para generar un nuevo número hay que pulsar el botón de RESET para que la placa se reinicie y el programa vuelva a arrancar.

El código de programa es sencillo y corto y lo puedes ver a continuación:

//Dado electrónico con Arduino UNO R4

//Incluir librería
#include "Arduino_LED_Matrix.h"

//Crear objeto para la matriz
ArduinoLEDMatrix Pantalla;

//Definir los patrones de los 6 dados
uint8_t numeros [6][8][12] = {

  {   //Uno
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,0,0,1,0,0,0,0,0,0},
      {0,0,0,0,1,1,1,0,0,0,0,0},
      {0,0,0,0,0,1,0,0,0,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
  },

  {   //Dos
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,1,0,0,0,0,1,0,0,0},
      {0,0,1,1,1,0,0,1,1,1,0,0},
      {0,0,0,1,0,0,0,0,1,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
  },

  {   //Tres
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,1,0,0,0,0,0,0,0,0,0},
      {0,1,1,1,0,0,0,0,0,0,0,0},
      {0,0,1,0,0,1,0,0,0,0,0,0},
      {0,0,0,0,1,1,1,0,0,0,0,0},
      {0,0,0,0,0,1,0,0,1,0,0,0},
      {0,0,0,0,0,0,0,1,1,1,0,0},
      {0,0,0,0,0,0,0,0,1,0,0,0},
  },

  {  //Cuatro
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,1,0,0,0,0,0,1,0,0,0},
      {0,1,1,1,0,0,0,1,1,1,0,0},
      {0,0,1,0,0,0,0,0,1,0,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,1,0,0,0,0,0,1,0,0,0},
      {0,1,1,1,0,0,0,1,1,1,0,0},
      {0,0,1,0,0,0,0,0,1,0,0,0},
  },

  {   //Cinco
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,0,1,0,0,0,0,0,1,0,0,0},
      {0,1,1,1,0,0,0,1,1,1,0,0},
      {0,0,1,0,0,1,0,0,1,0,0,0},
      {0,0,0,0,1,1,1,0,0,0,0,0},
      {0,0,1,0,0,1,0,0,1,0,0,0},
      {0,1,1,1,0,0,0,1,1,1,0,0},
      {0,0,1,0,0,0,0,0,1,0,0,0},
  },

  {   //Seis
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,1,0,0,0,1,0,0,0,1,0,0},
      {1,1,1,0,1,1,1,0,1,1,1,0},
      {0,1,0,0,0,1,0,0,0,1,0,0},
      {0,0,0,0,0,0,0,0,0,0,0,0},
      {0,1,0,0,0,1,0,0,0,1,0,0},
      {1,1,1,0,1,1,1,0,1,1,1,0},
      {0,1,0,0,0,1,0,0,0,1,0,0},
  }
};

void setup() {
  
  //Inicializa pantalla
  Pantalla.begin ();

  //Inicializa generador de numeros aleatorios
  randomSeed (analogRead(0));

  //Genera un numero al azar entre 0 y 5
  int dado = random (0,6);
  
  //Muestra el dado
  Pantalla.renderBitmap (numeros[dado], 8, 12);
}

void loop() {
  
}

En la línea 4 incluyo la librería “Arduino_LED_Matrix.h” que tiene los objetos y métodos que nos hacen falta para la matriz de LEDs y en la línea 7 creo un objeto asociado con la matriz.

A continuación defino un arreglo de tres dimensiones: 6 x 8 x 12. La primera dimensión (6) es por la cantidad de números que puede tener el dado (1 a 6). Las otras dos (8 x 12) son para acomodar los valores de los leds en el patrón correspondiente a cada número.

La ventaja de esta definición es que se tienen todos los patrones en una sola variable (numeros) que se puede recorrer con un índice para acceder al patrón de cada número del dado. De esta forma numeros[0] contiene el patrón del número “1”, numeros[1] contiene el patrón del “2” y así con los seis patrones.

En este caso he preferido definir cada pantalla como bitmap y no como enteros de 32 bits para hacerlo mas visual, pero recuerda que así se utiliza mas memoria RAM. Las definiciones las hice con la ayuda de este editor online.

Luego todo el código está en la función setup, porque corre una sola vez hasta que se reinicia la placa con el RESET.

En la línea 82 se inicializa el objeto asociado con la matriz de leds.

En la línea 85 se inicializa también el generador de números aleatorios, para que cada vez que el programa arranque el numero generado “al azar” sea diferente.

En la línea 88 la variable dado se hace igual a un número al azar entre 0 y 5 y finalmente en la 91 se usa este valor como índice para recuperar el patrón del número correspondiente y mostrarlo en pantalla. (Recuerda que los numeros varían entre 1 y 6 pero en el arreglo el primer elemento es el 0).

Conclusiones

En este artículo, he presentado una versión actualizada del proyecto de “dado electrónico” original, utilizando el Arduino UNO R4 y su matriz de LEDs integrada. A diferencia de la versión anterior, esta no requiere componentes externos como zumbador o pulsador, ya que se utiliza el botón de RESET para generar nuevos números aleatorios.

El código aprovecha la librería “Arduino_LED_Matrix.h” para manejar la matriz de LEDs y muestra los patrones de los números del dado en la pantalla. Este proyecto es una excelente manera de poner en práctica conceptos sobre el uso de la matriz de LEDs y de programación del Arduino.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias