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.
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
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!!!" );
}
}
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.