Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MEXICO
FACULTAD DE INGENIERIA
INGENIERIA ELECTRONICA
Acstica
ELABORADO POR:
REPORTE DE PROYECTO:
JUEGO SIMON SAY CON ARDUINO
DICIEMBRE DE 2014
Introduccin
En este proyecto, se mostrara cmo hacer el juego de Simon Dice, consiste en
memorizar una secuencia aleatoria de colores que genera el programa, e intentar
reproducirla sin equivocarse. La secuencia se va complicando en cada paso.
Se ha puesto alguna funcin especfica, tales como que para reiniciar el Simon se
tiene que pulsar a la vez los tres pulsadores, o que cuando se equivoquen en la
secuencia de colores, parpadean los tres leds a la vez tres veces.
Materiales
3 leds
3 pulsadores
1 bocina (optativo, ya que solo es para dar sonido al juego)
1 Arduino uno
Jumper
Protoboard
Desarrollo
Se tendr que armar el circuito como se muestra.Se pondrn los botones y estos
se conectaran directamente a los 5V. El otro lado de los botones se conectara a
los pines del arduino de las salidas digitales 12,10 y 8.
Se pondrn los leds de modo que estn conectados con una resistencia de 220 ,
se conectara de la salida de la tierra una resistencia que valla al led en la parte del
ctodo y en el nodo se conectaran las salidas 13,11 y 9 del arduino.
Finalmente conectamos el altavoz el cable negro se conectara a tierra y el cable
rojo en el pin 7
El programa a ejecutar con Arduino se muestra a continuacin. Se edit el programa para que
despus de cada ronda se notara el cambio de nivel del juego. Cada vez que se gana el nivel de
dificultad va aumentando.
#define LEVELS 3
#define COLORS 3
#define TIME_INTERVAL 1500
#define TONO_1 1700
#define TONO_2 1432
#define TONO_3 956
#define TONO_ERROR 600
//-------------------------------------------------// Variables SIMON
//-------------------------------------------------doublestatus_simon = 0;
intnivel = 0;
double secuencia = 0;
intcolores_pulsados = 0;
//-------------------------------------------------// Puertos
//-------------------------------------------------// LEDS
doubleled_Rojo = 13; //Declarar Pin LED
Rojo
doubleled_Verde = 11; //Declarar Pin LED
Verde
doubleled_Amarillo = 9; //Declarar Pin LED
Amarillo
// PULSADORES
doublepulsador_Rojo = 12;
doublepulsador_Verde = 10;
doublepulsador_Amarillo = 8;
//ZUMBADOR
double zumbador = 7;
}
else
{
nivel++;
randomSeed(analogRead(0));
doubledouble_rand = random(1,COLORS+1);
doubledouble_exp = (double)pow(10,nivel-1
);
//double value = double_rand *
double_exp;
//secuencia = secuencia + value;
secuencia = (secuencia * 10) + double_rand;
}
Serial.print("\nlvl: ");
Serial.print(nivel);
Serial.print("\n");
Serial.print("Secu.: ");
Serial.print(secuencia);
Serial.print("\n");
imprimir_secuencia();
status_simon = 1;
colores_pulsados = 0;
}
// Secuencia del usuario - Registro de los
pulsadores
else if(status_simon == 1){
if(digitalRead(pulsador_Rojo) == HIGH){
Serial.println("Rojo pulsado");
pulsar_elemento('1');
colores_pulsados++;
verificar_secuencia('1');
}
elseif(digitalRead(pulsador_Verde) == HIGH){
Serial.println("Verde pulsado");
pulsar_elemento('2');
colores_pulsados++;
verificar_secuencia('2');
}
elseif(digitalRead(pulsador_Amarillo) ==
HIGH){
Serial.println("Amarillo pulsado");
pulsar_elemento('3');
colores_pulsados++;
verificar_secuencia('3');
}
}
}
//-----------------------------------//Funcion Verificar secencia
//------------------------------------
voidverificar_secuencia(char color)
{
String string = String(round(secuencia) );
Serial.print("\nColorusuario:");
Serial.print(color);
Serial.print(" Seq. Valor:");
Serial.print(string[colores_pulsados-1]);
if(string[colores_pulsados-1] == color){
if(nivel == colores_pulsados){
Serial.print("\nFin del lvl: ");
Serial.print(nivel);
status_simon = 0;
}
else{
// CONTINUA MODO USUARIO
Serial.print("\nContinuar modo usuario");
}
}
else{
// ERROR DE USUARIO
Serial.print("\nERROR DE USUARIO");
status_simon = 4;
error_usuario();
}
}
sonarTono(TONO_1,TIME_INTERVAL*0.5);
digitalWrite(led_Rojo,LOW);
Serial.println("PulsadorRojo OFF");
break;
case '2':
Serial.println("\nPulsador Verde ON");
digitalWrite(led_Verde,HIGH);
sonarTono(TONO_2,TIME_INTERVAL*0.5);
digitalWrite(led_Verde,LOW);
Serial.println("Pulsador Verde OFF");
break;
case '3':
Serial.println("\nPulsador Amarillo ON");
digitalWrite(led_Amarillo,HIGH);
sonarTono(TONO_3,TIME_INTERVAL*0.5);
digitalWrite(led_Amarillo,LOW);
Serial.println("Pulsador Amarillo OFF");
break;
}
}
sonarTono(TONO_ERROR,TIME_INTERVAL
);
digitalWrite(zumbador,LOW);
digitalWrite(led_Rojo, LOW); // turn the LED
off by making the voltage LOW
digitalWrite(led_Verde, LOW); // turn the
LED off by making the voltage LOW
digitalWrite(led_Amarillo, LOW); // turn the
LED off by making the voltage LOW
}
}
{
tone(zumbador,tono,duracion);
delay(duracion);
}
El nivel lo va mostrando en la pantalla. Cada vez que se introduzcan mal el orden de los colores se
regresa al primer nivel.
Conclusiones
En este proyecto se obtuvieron los resultados esperados, ya que el programa solo se modific un
poco para que tardara en cambiar de colores y as poner ms difcil el juego en poder recordar el
orden de los colores.Es un juego entretenido que se puede construir con arduino uno y es muy
sencillo de armar y de conseguir fcilmente el material.