lunes, 25 de febrero de 2013

Dado digital usando arduino


En este primer post experimental voy a colgar el primer proyecto que he hecho para arduino. No es más que un
display que muestra un número entre el uno y el seis usando el comando random() (cómo usar) y ya que el azar
generado por la placa arduino no es más que una serie de números guardados en arduino, tenemos que recurrir al
comando  randomseed() (cómo usar) que genera azar, en este caso para generar azar hemos usado el ruido
procedente de la entrada analógica 0 (A0). También usaremos un pulsador para "tirar" el dado.
 
Materiales utilizados: 
- Placa Arduino Mega 2560
- Protoboard
- Display LED de 7 segmentos y ánodo común SA56-11EWA
- Pulsador
- 7 Resistencias de 220 ohmios para el display y una de 10K para el pulsador
- Y por último cables y baterías/trnsformador
 
Esquema:  
Aunque en el cuadro de código esté esto mismo, lo dejo aquí también.
Esquema del display de 7 segmentos con ánodo común (pines 3 y 8), SA56-11EWA. - Datasheet http://www.us.kingbright.com/images/catalog/spec/SA56-11EWA.pdf 


 Por ejemplo, para hacer un uno, iluminamos 6 y 4. Para hacer un cuatro, iluminaríamos 9, 10, 6 y 4. El pin 5 corresponde con el punto del display. Hay que colocar una resistencia de ~200 ohmios por segmento. En este caso no usamos el punto por lo que solo necesitamos 7 resistencias. 
Conexionado ([segmento del display, pin de arduino]): [6,6] [4,4] [2,11] [1,2] [9,9] [10,13] [7,7
También conectamos un pulsador, una patilla a 5V y la otra la conectamos al pin 22 con una resistencia de 10K a GND El ser este módulo anodo común, el comando HIGH apaga los leds y el comando LOW los enciende.

Aquí teneis el archivo para abrirlo directamente con arduino: Dado 1.1.ino 

Código: 


/*
 Esquema del display de 7 segmentos con ánodo común (pines 3 y 8), SA56-11EWA.
- Datasheet http://www.us.kingbright.com/images/catalog/spec/SA56-11EWA.pdf

 + + + + +         7
10 9 8 7 6        ---
               9 | 10| 6
                  --- 
               1 |   | 4
 1 2 3 4 5        ---  . 5
 + + + + +         2
    
Por ejemplo, para hacer un uno, iluminamos 6 y 4.
Para hacer un cuatro, iluminariamos 9, 10, 6 y 4.
El pin 5 corresponde con el punto del display.
Hay que colocar una resistencia de ~200 ohmios 
por segmento.
En este caso no usamos el punto por lo que solo 
necesitamos 7 resistencias.
Conexionado: Ej: [segmento del display, pin de arduino]
[6,6][4,4][2,11][1,2][9,9][10,13][7,7]

También conectamos un pulsador, una patilla a 5V y
la otra la conectamos al pin 22 de arduino y con una
resistencia de 10K a GND.

El ser este módulo anodo común, el comando HIGH apaga
los leds y el comando LOW los enciende.
*/
int led[7]={2,4,6,7,9,11,13};
int i,val;
int cont=0, boton=22,numero=0;


void setup ()
{
  for(;cont<=6;cont++)
  pinMode(led[cont], OUTPUT); 
  pinMode(boton, INPUT);
  pinMode(A0,INPUT);
  Serial.begin(9600);
}
void loop()
{
   val=digitalRead(boton);
   if(val==HIGH)
   {
     delay(50);
     digitalWrite(7,HIGH);digitalWrite(9,HIGH);digitalWrite(11,HIGH);
     digitalWrite(2,HIGH);digitalWrite(4,HIGH);digitalWrite(13,HIGH);
     digitalWrite(6,HIGH);
     randomSeed(millis()/A0);
     numero=random(1,7);
     imprimir(numero);
   }
   else
   {
     imprimir(numero);
   }
Serial.println(numero);
}

void imprimir (int numero)
{
  if(numero==0)
  {   //Solo dejamos encendido el segmento central para indicar que se ha 
      //encendido el dado
    digitalWrite(7,HIGH);digitalWrite(9,HIGH);digitalWrite(11,HIGH);
    digitalWrite(2,HIGH);digitalWrite(4,HIGH);digitalWrite(6,HIGH);
    digitalWrite(13,LOW); 
  }
  else
  {
  if(numero==1)
  {
       digitalWrite(6,LOW);digitalWrite(4,LOW);
  }
  else
  {
       if(numero==2)
       {
           digitalWrite(7,LOW);digitalWrite(6,LOW);digitalWrite(13,LOW);
           digitalWrite(2,LOW);digitalWrite(11,LOW);
       }
       else
       {
           if(numero==3)
           {
               digitalWrite(7,LOW);digitalWrite(6,LOW);digitalWrite(4,LOW);
               digitalWrite(11,LOW);digitalWrite(13,LOW);
           }
           else
           {
              if(numero==4)
              {
                 digitalWrite(9,LOW);digitalWrite(13,LOW);digitalWrite(6,LOW);
                 digitalWrite(4,LOW);
              }
              else
              {
                 if(numero==5)
                 {
                     digitalWrite(7,LOW);digitalWrite(9,LOW);digitalWrite(13,LOW);
                     digitalWrite(4,LOW);digitalWrite(11,LOW);
                 }
                 else
                 {
                     digitalWrite(7,LOW);digitalWrite(9,LOW);digitalWrite(2,LOW);
                     digitalWrite(11,LOW);digitalWrite(4,LOW);digitalWrite(13,LOW);
                 }
             }
           }
       }
     }
   }
 }
  
 Imagenes:  

Detalle del display y el pulsador

Placa ya montada
 
Vídeo: 
 

No hay comentarios:

Publicar un comentario