Tutorial para aprender a construir un sencillo lanzador de dados

Construye un dado electrónico con Arduino Uno

Este tutorial no pertenece al libro de John Boxall. 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.

Componentes

El equipo que necesitarás en este proyecto de dados Arduino se enumeran a continuación:

Esquema del circuito

Este circuito como he dicho antes es relativamente fácil y puede ser rápidamente realizado. En el siguiente diagrama de circuitos de abajo servirá para ayudarte a ser capaz de colocar todo en el lugar correcto. Debajo del diagrama continua la explicación.

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);
}



Esperamos que disfrutes de este proyecto de dados Arduino y que te haya ayudado a enseñar más sobre los fundamentos del Arduino, a continuación te dejamos el código completo.
//Code by Gus @ pimylifeup.com

//Pin to to turn dice on & off
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; 

//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));
}

 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(5000);
		clearAll();
		state = 0;
	}
}

//Create a function for each of our "sides" of the die
 void six()
{
  digitalWrite(bottomLeft, HIGH);
  digitalWrite(middleLeft, HIGH);
  digitalWrite(upperLeft, HIGH);
  digitalWrite(bottomRight, HIGH);
  digitalWrite(middleRight, HIGH);
  digitalWrite(upperRight, HIGH);
}

void five()
{
	digitalWrite(upperLeft, HIGH);
	digitalWrite(bottomLeft, HIGH);
	digitalWrite(middle, HIGH);
	digitalWrite(upperRight, HIGH);
	digitalWrite(bottomRight, HIGH);
}

void four()
{
	digitalWrite(upperLeft, HIGH);
	digitalWrite(bottomLeft, HIGH);
	digitalWrite(upperRight, HIGH);
	digitalWrite(bottomRight, HIGH);
}

void three()
{
	digitalWrite(upperLeft, HIGH);
	digitalWrite(middle, HIGH);
	digitalWrite(bottomRight, HIGH);
}

void two()
{
	digitalWrite(bottomRight, HIGH);
	digitalWrite(upperLeft, HIGH);
}

void one(){
	digitalWrite(middle, HIGH);
}

void clearAll(){
	digitalWrite(bottomLeft, LOW);
	digitalWrite(middleLeft, LOW);
	digitalWrite(upperLeft, LOW);
	digitalWrite(middle,LOW);
	digitalWrite(bottomRight, LOW);
	digitalWrite(middleRight, LOW);
	digitalWrite(upperRight, LOW);
}

Pin It on Pinterest

Shares