O por el contrario, ¿te gustaría volver a los años 80?
Si dispones de un Arduino Uno te presentamos este proyecto de código libre. Un simón dice de “bolsillo”, porque con unos pocos componentes te puedes fabricar tu propio Simón dice, y llevártelo a cualquier parte.
Aquí tenéis el material necesario para crear vuestro propio Simón “casero”.
- Arduino Uno
- 3 leds de distinto color
- 6 resistencias de 1K Ohm
- 3 pulsadores
- 1 Buzzer
Os dejamos también cómo conectarlo todo para hacer la prueba, usando una placa de pruebas.
Por supuesto no puede faltar el código para Arduino, que recordemos es libre.
[fusion_builder_container hundred_percent=»yes» overflow=»visible»][fusion_builder_row][fusion_builder_column type=»1_1″ background_position=»left top» background_color=»» border_size=»» border_color=»» border_style=»solid» spacing=»yes» background_image=»» background_repeat=»no-repeat» padding=»» margin_top=»0px» margin_bottom=»0px» class=»» id=»» animation_type=»» animation_speed=»0.3″ animation_direction=»left» hide_on_mobile=»no» center_content=»no» min_height=»none»][spoiler]#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
//————————————————–
double status_simon = 0;
int nivel = 0;
double secuencia = 0;
int colores_pulsados = 0;
//————————————————–
// Puertos
//————————————————–
// LEDS
double led_Rojo = 13; //Declarar Pin LED Rojo
double led_Verde = 11; //Declarar Pin LED Verde
double led_Amarillo = 9; //Declarar Pin LED Amarillo
// PULSADORES
double pulsador_Rojo = 12;
double pulsador_Verde = 10;
double pulsador_Amarillo = 8;
//ZUMBADOR
double zumbador = 7;
//————————————
// Funcion principal
//————————————
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
Serial.begin(9600);
randomSeed(analogRead(0));
pinMode(pulsador_Rojo,INPUT); // Pulsador 1 como entrada
pinMode(led_Rojo,OUTPUT); //El LED 1 Rojo como salida
pinMode(pulsador_Verde,INPUT); // Pulsador 2 como entrada
pinMode(led_Verde,OUTPUT); //El LED Verde como salida
pinMode(pulsador_Amarillo,INPUT); // Pulsador 3 como entrada
pinMode(led_Amarillo,OUTPUT); //El LED Rojo como salida
pinMode(zumbador,OUTPUT); // El zumbador como salida
}
//————————————
//Funcion ciclicla
//————————————
void loop() // Esta funcion se mantiene ejecutando
{ // cuando se da energia al Arduino
if(digitalRead(pulsador_Rojo) == HIGH && digitalRead(pulsador_Verde) == HIGH && digitalRead(pulsador_Amarillo) == HIGH)
{
nivel = 0;
status_simon = 0;
delay(TIME_INTERVAL*2);
return;
}
// Reproducir secuencia
if(status_simon == 0){
Serial.println(«\n\n————————–\nMODO IMPRESION SEC.»);
if( nivel == 0 )
{
nivel = 1;
randomSeed(analogRead(0));
secuencia = random(1,COLORS+1);
}
else
{
nivel++;
randomSeed(analogRead(0));
double double_rand = random(1,COLORS+1);
double double_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’);
}
else if(digitalRead(pulsador_Verde) == HIGH){
Serial.println(«Verde pulsado»);
pulsar_elemento(‘2’);
colores_pulsados++;
verificar_secuencia(‘2’);
}
else if(digitalRead(pulsador_Amarillo) == HIGH){
Serial.println(«Amarillo pulsado»);
pulsar_elemento(‘3’);
colores_pulsados++;
verificar_secuencia(‘3’);
}
}
}
//————————————
//Funcion Verificar secüencia
//————————————
void verificar_secuencia(char color)
{
String string = String(round(secuencia) );
Serial.print(«\nColor usuario:»);
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();
}
}
//————————————
//Funcion Imprimir secuencia
//————————————
void imprimir_secuencia()
{
String string = String(round(secuencia) );
Serial.print(«\nIMPRIMIR SERIE: «);
Serial.print(string);
for(int i = 0 ; i < nivel ;i++)
{
delay(TIME_INTERVAL*0.5);
pulsar_elemento(string[i]);
}
}
//————————————
// PULSAR ELEMENTO
// Luce el led del indicador pasádo por parámetro
//————————————
void pulsar_elemento(char num_color)
{
switch(num_color){
case ‘1’:
Serial.println(«\nPulsador Rojo ON»);
digitalWrite(led_Rojo,HIGH);
sonarTono(TONO_1,TIME_INTERVAL*0.5);
digitalWrite(led_Rojo,LOW);
Serial.println(«Pulsador Rojo 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;
}
}
//————————————
// ERROR USUARIO
// Realiza una secuencia de luz y sonido diez veces seguidas para indicar que
// el usuario ha errado al introducir la
// secuencia
//——————————————
void error_usuario()
{
for(int i=0; i<3; i++)
{
delay(TIME_INTERVAL*0.3);
digitalWrite(led_Rojo, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(led_Verde, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(led_Amarillo, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(zumbador,HIGH);
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
}
}
//————————————
// SONAR TONO
//————————————
void sonarTono(int tono, int duracion)
{
tone(zumbador,tono,duracion);
delay(duracion);
}
//FIN DEL PROGRAMA[/spoiler]
DESGARGA —> AQUI <—– el código para ARDUINO
Por si aún queda alguna duda, otra foto del montaje tomada por nosotros.
Con Arduino conectado al usb de nuestro ordenador para poder alimentar el circuito.
¿Pero no decías que era portable y me lo podía llevar a casa de mi primo para jugar con él?
Por supuesto, para ello necesitarás un cargador de 5V o una batería externa o incluso una pila de 9V, las de petaca de toda la vida.

¿Fácil no?
Cuando conectemos el Arduino al puerto Usb del ordenador o a una batería externa, debemos pulsar el botón Reset del Arduino, y el juego comenzará, tan solo debemos pulsar el pulsador correspondiente al led que se encienda. Cada vez se irá complicando más así que estad atentos!!
Nosotros hemos aprovechado un “Simón dice” de un conocido y lo hemos adaptado para usarlo con Arduino, anímate haz lo mismo y entrena tu memoria!!!
También tenéis la opción de comprar un kit en nuestra tienda online listo para montar:
https://createc3d.com/es/kits-educativos/161-comprar-simon-dice-precio-oferta.html
by Pedro Miguel Garre Navarro
[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]



