Simon con Arduino

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.

4

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.

2

 

¿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

12 23

 

 

 

 

 

 

 

 

 

by Pedro Miguel Garre Navarro

[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.

Scroll al inicio