Simon Dice

by Alfredo-01 in Circuits > Arduino

95 Views, 0 Favorites, 0 Comments

Simon Dice

WhatsApp Image 2024-06-17 at 9.05.10 PM.jpeg

Es te proyecto es un trabajo de la materia de Programación que trata de un juego controlado por Ardu ino hecho por los Alumnos de 2° Semestre de la carrera de ingeniería mecatrónica, este es un juego de destreza mental para las personas para el mejoramiento de memoria ya que el objetivo del proyect o es recordar cada color y la secuencia en la cual se enciende cada uno de los leds, entre más hacert e la secuencia mas va incrementada la secuencia con diferentes patrones, todo esto es programado c on una aplicación llamada “Arduino IDE” al principio del proyecto hubo pequeños percance en el dise ño del programa ya que le código tenía que ser un código que identificara cada led y botón y que tuvi era una secuencia de menor a mayor dificulta para que fuera entretenido y en cuestión del circuito hubo problemas con el armado pero todo se solucionó, además del código y los resultados esperados fu eron exitosos ya que el programa esta bien y al ejecutarlo en el circuito con ayuda del Arduino funcion o sin ningún problema y cumplió con el objetivo deseado 

Supplies

WhatsApp Image 2024-06-17 at 5.26.47 PM (2).jpeg
WhatsApp Image 2024-06-17 at 5.26.47 PM (3).jpeg
WhatsApp Image 2024-06-17 at 5.26.47 PM (4).jpeg
WhatsApp Image 2024-06-17 at 5.26.47 PM (1).jpeg
WhatsApp Image 2024-06-17 at 5.26.47 PM.jpeg

1.Arduino Uno

2. Protoboard

3. Puente de cables

4. Resistencias de 220 y 330 Ω

5. Leds y Botones

6. Carcasa de control 

1. Diseñar el programa con” Arduino IDE” y una vez terminado verifica que programa este bien, si, no volver a revisar

Este es el codigo utiliazdo:

//Juego Simon dice

#define   BUZZER   7
#define ENTRADA_A 13
#define ENTRADA_B 12
#define ENTRADA_C 11
#define ENTRADA_D 10
#define SALIDA_A 2
#define SALIDA_B 3
#define SALIDA_C 4
#define SALIDA_D 5
int melodia[ ] = {262, 196, 196, 220, 196, 0, 247, 262};
int duracionNotas[] = {4, 8, 8, 4, 4, 4, 4, 4};
int nivelActual = 1;
int velocidad = 500;
const int NIVEL_MAX = 100;
int secuencia[NIVEL_MAX];
int secuenciaUsuario[NIVEL_MAX];

void setup(){
pinMode(ENTRADA_D, INPUT);
pinMode(ENTRADA_C, INPUT);
pinMode(ENTRADA_B, INPUT);
pinMode(ENTRADA_A, INPUT);
pinMode(SALIDA_A, OUTPUT);
pinMode(SALIDA_B, OUTPUT);
pinMode(SALIDA_C, OUTPUT);
pinMode(SALIDA_D, OUTPUT);
digitalWrite(SALIDA_A, LOW);
digitalWrite(SALIDA_B, LOW);
digitalWrite(SALIDA_C, LOW);
digitalWrite(SALIDA_D, LOW);
}

void loop(){
if(nivelActual == 1){
generaSecuencia();
muestraSecuencia();
leeSecuencia();
}
if(nivelActual != 1){
muestraSecuencia();
leeSecuencia();
}
}

void muestraSecuencia(){
digitalWrite(SALIDA_A, LOW);
digitalWrite(SALIDA_B, LOW);
digitalWrite(SALIDA_C, LOW);
digitalWrite(SALIDA_D, LOW);
for(int i = 0; i < nivelActual; i++){
if( secuencia[i] == SALIDA_A ){
tone(BUZZER, 200);
delay(200);
noTone(BUZZER);
}
if( secuencia[i] == SALIDA_B ){
tone(BUZZER, 300);
delay(200);
noTone(BUZZER);
}
if( secuencia[i] == SALIDA_C ){
tone(BUZZER, 400);
delay(200);
noTone(BUZZER);
}
if( secuencia[i] == SALIDA_D ){
tone(BUZZER, 500);
delay(200);
noTone(BUZZER);
}
digitalWrite(secuencia[i], HIGH);
delay(velocidad);
digitalWrite(secuencia[i], LOW);
delay(200);
}
}

void leeSecuencia(){
int flag = 0;
for(int i = 0; i < nivelActual; i++){
flag = 0;
while(flag == 0){
if(digitalRead(ENTRADA_D) == LOW){
digitalWrite(SALIDA_D, HIGH);
tone(BUZZER, 500);
delay(300);
noTone(BUZZER);
secuenciaUsuario[i] = SALIDA_D;
flag = 1;
delay(200);
if(secuenciaUsuario[i] != secuencia[i]){
secuenciaError();
return;
}
digitalWrite(SALIDA_D, LOW);
}
if(digitalRead(ENTRADA_C) == LOW){
digitalWrite(SALIDA_C, HIGH);
tone(BUZZER, 400);
delay(300);
noTone(BUZZER);
secuenciaUsuario[i] = SALIDA_C;
flag = 1;
delay(200);
if(secuenciaUsuario[i] != secuencia[i]){
secuenciaError();
return;
}
digitalWrite(SALIDA_C, LOW);
}
if(digitalRead(ENTRADA_B) == LOW){
digitalWrite(SALIDA_B, HIGH);
tone(BUZZER, 300);
delay(300);
noTone(BUZZER);
secuenciaUsuario[i] = SALIDA_B;
flag = 1;
delay(200);
if(secuenciaUsuario[i] != secuencia[i]){
secuenciaError();
return;
}
digitalWrite(SALIDA_B, LOW);
}
if(digitalRead(ENTRADA_A) == LOW){
digitalWrite(SALIDA_A, HIGH);
tone(BUZZER, 200);
delay(300);
noTone(BUZZER);
secuenciaUsuario[i] = SALIDA_A;
flag = 1;
delay(200);
if(secuenciaUsuario[i] != secuencia[i]){
secuenciaError();
return;
}
digitalWrite(SALIDA_A, LOW);
}
}
}
secuenciaCorrecta();
}

void generaSecuencia(){
randomSeed(millis());
for(int i = 0; i < NIVEL_MAX; i++){
secuencia[i] = random(2,6);
}
}

void melodiaError(){
for(int i = 0; i < 8; i++){
int duracionNota = 1000/duracionNotas[i];
tone(BUZZER, melodia[i], duracionNota); // Corrección aquí
int pausaEntreNotas = duracionNota * 1.30;
delay(pausaEntreNotas);
noTone(BUZZER);
}
}

void secuenciaError(){
digitalWrite(SALIDA_A, HIGH);
digitalWrite(SALIDA_B, HIGH);
digitalWrite(SALIDA_C, HIGH);
digitalWrite(SALIDA_D, HIGH);
delay(250);
digitalWrite(SALIDA_A, LOW);
digitalWrite(SALIDA_B, LOW);
digitalWrite(SALIDA_C, LOW);
digitalWrite(SALIDA_D, LOW);
delay(250);
melodiaError();
nivelActual = 1;
velocidad = 500;
}

void secuenciaCorrecta(){
if(nivelActual < NIVEL_MAX)
nivelActual++;
velocidad -= 50;
delay(200);
}


2. Seleccione los materiales a utilizar ya mencionados y revise que estén en buenas condiciones. 


Captura de pantalla 2024-06-18 090125.png

3. Hacer el diseño del circuito (Fritzing) para una mejor organización en las conexiones como se muestra:

4. Armar el circuito en físico guiándose con el diagrama anterior

5. Colocar los botones a la Protoboard junto con sus conexiones respectivas en la cual ocuparemos r esistencias de 220 la cual serán las conexiones de negativo y positivo junto con los botones como lo muestra la imagen anterior

6. Ocuparemos para este proyecto leds de colores como son azul, verde, rojo y blanco, si estos color es no son de tu preferencia los puedes cambiar sin ningún problema y además se le tiene que agrega r una protección los leds ya que pude llegar a lastimar la vista, su conexión será enfrente de los boton es y les colocaremos resistencias de 330, los conectaremos a la placa de Arduino 

7. Colocar el buzzer a un lado de donde colocaste los leds 

8. Hacer las conexiones de los botones a los pines 10, 11, 12, 13, los leds a los pines 2, 3, 4, 5 y el bu zzer se conectara al pin 7 al Arduino Uno como se muestra 

WhatsApp Image 2024-06-17 at 5.26.48 PM.jpeg

9. Se podría hacer la prueba del armado del circuito primero para verificar que todo este bien antes d e ensamblar un ejemplo de como quedaría seria la siguiente imagen

10. Cargar el código en Arduino y ejecutarlo con el circuito terminado para prueba de que todo va bien En caso de un error, revise el código, las conexiones o los materiales. Seleccionar el diseño de la carcasa de control y hacer el armado 

Una vez todo ensamblado ya estará terminado y listo para poder ser usado para entretenerte