Lotería de Led (T2)

     Este proyecto consiste en jugar un poco con el azar. Para esto ocuparemos 3 leds tricolores (azul, verde y rojo), después de presionar un pulsador se encienden y apagan en forma aleatoria durante algunos segundos y luego se detienen cada uno con un color al azar, se supone que lo ideal es que el mismo color quede encendido en cada led, lo que supondría un premio. A pesar de ser solamente 3 colores no es fácil lograrlo.

nota: Al final de la página encontrarán todas las explicaciones en video.


Los materiales que se necesitan son los siguientes:
1.- Arduino Nano
2.- Leds tricolores (3)
3.- Resistencias 330 ohms 1/4 w (9)
4.- Resistencias 1k 1/4 w (9)
5.- Resistencia 220 ohms (1)
6.- Transistores TIP122 (9)
nota: En caso de no tener leds tricolores, se pueden usar 3 leds de colores azul, verde y rojo, o cualquier otro color a mano.

Circuito Esquemático de Conexiones

Diferentes vistas del proyecto

     Este proyecto puede ser armado de una manera más simple, yo traté de darle una forma mas entretenida y cómoda para usarlo.


Los leds los puse en un soporte aparte y al circuito le di una base sólida. Para la unión de circuito y luces ocupé un cable plano.



    El uso de los transistores se debe a que estos leds tienen un consumo de corriente bastante  elevado comparado con los led normales, por lo tanto dañarían los pines de salida de Arduino. La solución es usar, por ejemplo, el transistor TIP122, que soporta bastante corriente sin problemas y además son baratos y fáciles de encontrar..


Caminos Circuito Impreso

     En el primer dibujo vemos las líneas de conexión para los diversos componentes y más abajo el conexionado para los leds tricolores. Los dos dibujos vectoriales lo pueden solicitar sin costo alguno a robot@tongas.cl 

Software Arduino

     Uno de los tantos problemas en los lenguajes Basic de los antiguos PC es que la generación de números aleatorios, en realidad es pseudo aleatorio, si comparamos las secuencias generadas, nos damos cuenta que son iguales. Arduino no está ajeno a ello, pero hay una gran solución, exite un comando randomSeed(0) que inicializa el generador de números pseudo aleatorios, haciendo que comienze en un punto arbitrario en su secuencia aleatoria, el problema es que cada vez que iniciamos debemos cambiar el número de la semilla, pero si cambiamos el número por la lectura de un puerto analógico;  randomSeed(analogRead(A1)); en este caso al puerto analógico A1 que como no está conectado está inestable generando números realmente al azar, así solucionamos totalmente el problema.  

// designamos variables con números enteros
int lampara_1; int lampara_2; int lampara_3;
int ampolleta_1; int ampolleta_2; int ampolleta_3;

// designamos variables para giro tómbola y presión botón partida
int giro;
int boton = 0;

void setup()
{
  //abrimos puerta serial e imprimimos mensajes
  Serial.begin(9600);
  Serial.println("--------------------- Sistema Listo");
  Serial.println("");
  Serial.println("--------------------- Presione Botón");
  Serial.println("");

  // Pines 2 al 10 como salida
  //---------------------------------------------
  pinMode(10, OUTPUT);//----- azul  lámpara 1
  pinMode(9, OUTPUT);//------ verde lámpara 1
  pinMode(8, OUTPUT);//------ rojo  lámpara 1
  //---------------------------------------------
  pinMode(7, OUTPUT);//------ azul  lámpara 2
  pinMode(6, OUTPUT);//------ verde lámpara 2
  pinMode(5, OUTPUT);//------ rojo  lámpara 2
  //---------------------------------------------
  pinMode(4, OUTPUT);//------ azul  lámpara 3
  pinMode(3, OUTPUT);//------ verde lámpara 3
  pinMode(2, OUTPUT);//------ rojo  lámpara 3
  //---------------------------------------------

  // Pin 10 como entrada - aquí va conectado el push button
  pinMode(11, INPUT);

  // generamos número semilla leyendo compuerta inestable A1
  randomSeed(analogRead(A1));
}

void loop() {
  boton = digitalRead(11);

  if (boton == HIGH) { // apaga lámparas
    digitalWrite(lampara_1, LOW);
    digitalWrite(lampara_2, LOW);
    digitalWrite(lampara_3, LOW);
    tombola();// a subrutina tombola()
  }
  else {
  }
}

void tombola() {
  for (giro = 0; giro <= 9; giro++) {// 10 giros de la tómbola
    // cada lámpara tiene 3 luces; roja, verde y azul
    lampara_1 = random(8, 11);// se elije que ampolleta prende
    lampara_2 = random(5, 8); // verde, azul o roja
    lampara_3 = random(2, 5);
    // se apagan y prenden rápidamente las lámparas
    digitalWrite(lampara_1, HIGH); delay(10);
    digitalWrite(lampara_2, HIGH); delay(10);
    digitalWrite(lampara_3, HIGH); delay(10);
    digitalWrite(lampara_1, LOW); delay(10);
    digitalWrite(lampara_2, LOW); delay(10);
    digitalWrite(lampara_3, LOW); delay(10);
    delay(5);
  }
  //------------------------ detectamos los colores de cada lámpara
  //-------------------------------lámpara 1
  if (lampara_1 == 8) {
    ampolleta_1 = 1;
    Serial.print ("     lampara_1: " ); Serial.println ("ROJO");
  }
  if (lampara_1 == 9) {
    ampolleta_1 = 2;
    Serial.print ("     lampara_1: " ); Serial.println ("VERDE");
  }
  if (lampara_1 == 10) {
    ampolleta_1 = 3;
    Serial.print ("     lampara_1: " ); Serial.println ("AZUL");
  }
  //-------------------------------lámpara 2
  if (lampara_2 == 5) {
    ampolleta_2 = 1;
    Serial.print ("     lampara_2: " ); Serial.println ("ROJO");
  }
  if (lampara_2 == 6) {
    ampolleta_2 = 2;
    Serial.print ("     lampara_2: " ); Serial.println ("VERDE");
  }
  if (lampara_2 == 7) {
    ampolleta_2 = 3;
    Serial.print ("     lampara_2: " ); Serial.println ("AZUL");
  }
  //-------------------------------lámpara 3
  if (lampara_3 == 2) {
    ampolleta_3 = 1;
    Serial.print ("     lampara_3: " ); Serial.println ("ROJO");
  }
  if (lampara_3 == 3) {
    ampolleta_3 = 2;
    Serial.print ("     lampara_3: " ); Serial.println ("VERDE");
  }
  if (lampara_3 == 4) {
    ampolleta_3 = 3;
    Serial.print ("     lampara_3: " ); Serial.println ("AZUL");
  }
  digitalWrite(lampara_1, HIGH);
  digitalWrite(lampara_2, HIGH);
  digitalWrite(lampara_3, HIGH);

  Serial.println("........................................ Intente de Nuevo");
  //--------------------- comparamos los colores de las lámparas
  if (ampolleta_1 == ampolleta_2 and ampolleta_2 == ampolleta_3) {
    Serial.println ("      Felicitaciones... ¡¡¡TRIPLE ACIERTO!!!" );
  }
}

El siguiente video es una explicación del software desarrollada para este proyecto.


A continuación el proyecto en funcionamiento.