En este tutorial vamos a hacer nuestro propio circuito con Arduino que simule los movimientos de un dado. Este es un proyecto simple y es ideal para conocer más de los fundamentos de Arduino. Este proyecto utiliza una variedad de LEDs y resistencias para hacer el circuito. También usaremos un interruptor para decirle a nuestro Arduino cuándo generar una nueva cara de dados.

Necesitamos:

  • Arduino Uno
    7 LEDs
    7 resistencias de 100 ohmios 
    1 resistencia de 100k ohmio 100k 
    Interruptor / pulsador físico
    Tablero de circuitos o breadboard
    Cable para el tablero

Esquema del circuito

Un interruptor está configurado en un circuito de tipo H, por ejemplo en nuestro diagrama es un lado H. Los cables superior izquierdo y superior derecho están separados de los cables inferiores. Al pulsar el botón se conecta la parte superior y la parte inferior de los cables que forman un circuito activando así nuestros dados. Ejecutamos una conexión 3v3 al interruptor y tenemos una resistencia de 100k a tierra. Entre el resistor de 100k y el interruptor tenemos el cable funcionando hasta el pin 2. Esto detectará cuando el interruptor ha sido presionado.

Cada uno de los LEDs se posicionan para asemejarse a una cara de dado. Estos están un poco más espaciados por lo que es más fácil de ver en el circuito de diagrama de arriba.

Cada uno de los LEDs está conectado al raíl de tierra a través de una resistencia de 100 ohmios. El final positivo de los LEDS se conecta a un pin en el Arduino. Puedes ver qué LED están conectados a qué pin en la tabla de abajo.

El código

En éste proyecto introducimos un dispositivo de entrada (interruptor) y también producimos un número aleatorio utilizando la función randomSeed ().
Este código es bastante largo por lo que lo hemos colocado al final del tutorial. De todas maneras os vamos a explicar partes del código para ver exactamente lo que estamos haciendo para ayudarte a entender mejor lo que estás haciendo.

En el ejemplo siguiente estamos declarando las variables. BottomLeft se refiere a la ubicación del LED, lo que facilita su identificación al editar el script. El número que estamos dando a estas variables son los pines a los que están conectados.
Las variables state y randNumber se utilizarán para almacenar números.

int button = 2;
//LED for DICE
int bottomLeft = 3;
int middleLeft = 4;
int upperLeft = 5;
int middle = 6;
int bottomRight = 7;
int middleRight = 8;
int upperRight = 9;
int state = 0;
long randNumber;

Este siguiente fragmento de código es la configuración y es donde asignamos pines para ser salida o entradas y cualquier otra cosa que necesitamos configurar antes de ejecutar cualquier código adicional. Utilizamos RandomSeed para configurar un generador de números aleatorios.

//Initial setup
void setup(){
  pinMode(bottomLeft, OUTPUT);
  pinMode(middleLeft, OUTPUT);
  pinMode(upperLeft, OUTPUT);
  pinMode(middle, OUTPUT);
  pinMode(bottomRight, OUTPUT);
  pinMode(middleRight, OUTPUT);
  pinMode(upperRight, OUTPUT);
  
  pinMode(button, INPUT);
  Serial.begin(9600);
  randomSeed(analogRead(0));
}

La parte de bucle de nuestro script continúa haciendo bucle hasta que el Arduino se apaga o se carga un nuevo conjunto de código. Al inicio del bucle de dados Arduino verificamos si el interruptor ha sido presionado (alto).

Si se cumplen las condiciones, cambiamos el estado a 1 y obtenemos un número aleatorio entre 1 y 7. Una vez que tengamos el número aleatorio verificamos qué es y ejecutamos la función relevante. Una vez que la función se hace esperamos 4 segundos y luego apagamos los LEDs y volvemos a nuestro estado normal de 0.

void loop(){
  //Read our button if high then run dice
  if (digitalRead(button) == HIGH && state == 0){
    state = 1;
    randNumber = random(1, 7);
    delay(100);
    Serial.println(randNumber);

    if (randNumber == 6){
      six();
    }
    if (randNumber == 5){
      five();
    }
    if (randNumber == 4){
      four();
    }
    if (randNumber == 3){
      three();
    }
    if (randNumber == 2){
      two();
    }
    if (randNumber == 1){
      one();
    }
    delay(4000);
    clearAll();
    state = 0;
  }
}

A continuación se muestra un ejemplo de la función seis. Esto se llama cuando el dado produce el número seis. Como se puede ver claramente, convierte todos los LEDS relevantes a alto. Esto hará que todos los LEDs se enciendan para que obtenga la cara correcta de los dados mostrándose en nuestro circuito.

void six()
{
  digitalWrite(bottomLeft, HIGH);
  digitalWrite(middleLeft, HIGH);
  digitalWrite(upperLeft, HIGH);
  digitalWrite(bottomRight, HIGH);
  digitalWrite(middleRight, HIGH);
  digitalWrite(upperRight, HIGH);
}
https://descubrearduino.com/