Dado electrónico con Arduino y TinkerCAD – Cano electrónica

Dado electrónico con Arduino y TinkerCAD

En este proyecto aprenderemos a crear un dado electrónico con la ayuda de arduino y 6 LED’s.

Al presionar el interruptor, se ejecutará el programa y los LED’s se encenderán de forma consecutiva de izquierda a derecha y de derecha a izquierda y dejará encendido, de forma aleatoria cierto número de LED’s. En el monitor serie también podremos ver este resultado de forma numérica.

Material.

1 xArduino UNO
6 x LED 5mm
6 xResistencia 220 Ohm
1 x Resistencia 10k Ohm
1 x Micro interruptor
1 x Protoboard
cables varios

Circuito

El esquema anterior lo realizamos utilizando la aplicación en línea TinKerCAD. ahí mismo puedes hacer la simulación antes de realizar el montaje del circuito.

PinOUT:

LED1 -> PIN2
LED2 -> PIN3
LED3 -> PIN4
LED5 -> PIN6
LED6 -> PIN7
Interruptor -> PIN9

/*
  www.ProveedoraCano.com
  Dadoelectrónico con arduino
  Presiona el micro interruptor para que se enciendan los LED's y
  despues de un corto tiempo algunos LED's se quedarán encendidos y otros 
  se apagaran de forma aleatoria.
En el monitor serie se verá el número arrojado y coincidirá con el 
número de led encendidos
  PIN OUT
  Interruptor -> PIN9
  LED -> 2-7
  */


// configurar 1 si estamos depurando
#define DEBUG 0

// 6 pines digitales consecutivos para los LED
int first = 2;
int second = 3;
int third = 4;
int fourth = 5;
int fifth = 6;
int sixth = 7;

// pin para el interruptor de botón
int button = 9;
// valor para comprobar el estado del interruptor de botón
int pressed = 0;

void setup() {
  // set all LED pins to OUTPUT
  for (int i=first; i<=sixth; i++) {
    pinMode(i, OUTPUT);
  }
// establece el pin del botón en INPUT
  pinMode(button, INPUT);
  
// inicializar la semilla aleatoria por ruido del pin analógico 0 (debe estar desconectado)
  randomSeed(analogRead(0));

// si estamos depurando, conéctese al serial
  #ifdef DEBUG
    Serial.begin(9600);
  #endif

}

void buildUpTension() {
// ilumina los LED de izquierda a derecha y hacia atrás para aumentar la tensión
   // mientras espera que se lancen los dados
   // de izquierda a derecha

  for (int i=first; i<=sixth; i++) {
    if (i!=first) {
      digitalWrite(i-1, LOW);
    }
    digitalWrite(i, HIGH);
    delay(100);
  }
  // right to left
  for (int i=sixth; i>=first; i--) {
    if (i!=sixth) {
      digitalWrite(i+1, LOW);
    }
    digitalWrite(i, HIGH);
    delay(100);
  }
}

void showNumber(int number) {
  digitalWrite(first, HIGH);
  if (number >= 2) {
    digitalWrite(second, HIGH);
  }
  if (number >= 3) {
    digitalWrite(third, HIGH);    
  }
  if (number >= 4) {
    digitalWrite(fourth, HIGH);    
  }
  if (number >= 5) {
    digitalWrite(fifth, HIGH);    
  }
  if (number == 6) {
    digitalWrite(sixth, HIGH);    
  }
}

int throwDice() {
  // get a random number in the range [1,6]
  int randNumber = random(1,7);
  
  #ifdef DEBUG
    Serial.println(randNumber);
  #endif
  
  return randNumber;
}

void setAllLEDs(int value) {
  for (int i=first; i<=sixth; i++) {
    digitalWrite(i, value);
  }
}

void loop() {
// si se presiona el botón - tira los dados
  pressed = digitalRead(button);

  if (pressed == HIGH) {
    // remove previous number
    setAllLEDs(LOW);
    
    buildUpTension();
    int thrownNumber = throwDice();
    showNumber(thrownNumber);
  } 

}

TinkerCAD

Te dejamos el proyecto en Tinkercad para que lo puedas examinar, si quieres ejecutarlo, da click en "Iniciar simulación", para ver el código da click en "Código".

Esperamos te sea de utilidad y que te diviertas construyéndolo.

Video

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *