Está en la página 1de 11

20/4/2012

UNIVERSIDAD REY JUAN CARLOS

PROYECTO ARDUINO: SIMON SAYS

Carlos Lucas Snchez Roco Prez Carretero Laura Pizarro Casas

NDICE
DESCRIPCIN DEL PROYECTO ............................................................................................................ 3 HISTORIA SIMON SAYS ................................................................................................................ 3 DESCRIPCIN ................................................................................................................................. 3 MATERIAL UTILIZADO ........................................................................................................................ 4 PRESUPUESTO FINAL .......................................................................................................................... 4 DIAGRAMAS ....................................................................................................................................... 5 CDIGO .............................................................................................................................................. 6 HOJA DE CARACTERSTICAS ............................................................................................................. 10 PROBLEMAS ENCONTRADOS ........................................................................................................... 10 TIEMPO DEDICADO .......................................................................................................................... 10 OPININ PERSONAL ......................................................................................................................... 11

DESCRIPCIN DEL PROYECTO


HISTORIA SIMON SAYS

Este juego fue creado por Ralph H.Baer y Howard J.Morrison quienes lo introdujeron por primera vez en la consola Atari. Inicialmente, el nombre del juego era Touch Me. Baer cre los tonos del juego basados en sonidos de clarn. Su nombre actual se impuso al lanzarse una versin parcial a Milton Bradley Company. El juego consta de cuatro botones(en nuestro caso, cuatro sensores y cuatro matrices) que se van encendiendo en funcin de la secuencia que se reproduce. El jugador debe memorizar la secuencia de sonidos y colores que se ejecuta y repetirla entera sin fallar.

DESCRIPCIN
El proyecto de Arduino se basa en el clsico juego de Simon says en el que mediante una secuencia de sonidos y colores, el jugador debe memorizar y repetir dicha secuencia. En este proyecto, se utilizan secuencias aleatorias que encienden distintas matrices de LED, cada una con un sensor. El jugador deber repetir la secuencia situando la mano encima del sensor de ultrasonidos durante unos segundos. Si el jugador no se equivoca, la secuencia ir aumentando el nmero de tonos. Cuando el jugador se equivoca al repetir la secuencia, se encienden todas las matrices en seal de error. La cancin elegida es la cancin de Super Mario por ser sencilla a la hora de separar las notas de las que se compone.

MATERIAL UTILIZADO
Finalmente se han utilizado los siguientes materiales para la construccin del proyecto: Placa de Insercin (x4) Cable Matrices LED RGB(x4) Piezoelctrico Sensor Ultrasonido (x4) Arduino UNO Resistencias (falta)

PRESUPUESTO FINAL
Los precios que aparecen a continuacin seran los que se pagaran por los componentes utilizados. Nosotros no hemos necesitado comprar todo esto ya que la universidad nos ha proporcionado un maletn con diversos materiales. El presupuesto final real del proyecto sera el siguiente: Componente Placa de insercin Grande Protoboard Matrices LED RGB 8x8 Piezoelctrico Sensor Ultrasonido HC-SR04 Arduino UNO Resistencias(470K) Nmero 2 2 4 1 4 1 2 Precio/Unidad() 5 3 11.33 1.27 7.48 25.96 0.20 Precio () 10 6 45.32 1.27 29.92 25.96 0.40

Presupuesto total : 10 + 6 + 45.32 + 1.27 + 29.92 + 25.96 + 0.40 = 118. 87 Presupuesto del grupo: 45.32 + 29.92 + 10 + 6 = 91.24

DIAGRAMA

CDIGO

#include <Ultrasonic.h> #include <Tone.h> Tone tone1; int led1 = 10; int led2 = 11; int led3 = 12; int led4 = 15; int* array = (int *)malloc(24*sizeof(int)); const int MAX = 24; int punt [3]; float d = 1.40; Ultrasonic ultrasonic1(2, 3); Ultrasonic ultrasonic2(4, 5); Ultrasonic ultrasonic3(6, 7); Ultrasonic ultrasonic4(8, 9); void setup() { Serial.begin(9600); tone1.begin(13); pinMode (led1,OUTPUT); pinMode (led2,OUTPUT); pinMode (led3,OUTPUT); pinMode (led4,OUTPUT); randomSeed(analogRead(14)); } void inicializarSecuencia(int array[]) { for (int i=0;i<=23;i++) array[i] = random(1,5); } //dependiendo de la posicion en el array toca una nota u otra void nota(int i){ switch (i) { case 1: tone1.play(660,100); break; case 2: delay(d*75);tone1.play(660,100); break; case 3: delay(d*150);tone1.play(660,100); break; case 4: delay(d*150);tone1.play(510,100); break; case 5: delay(d*50);tone1.play(660,100); break; case 6: delay(d*150);tone1.play(770,100); break; case 7: delay(d*275);tone1.play(380,100); break; case 8: delay(d*287);tone1.play(510,100); break; case 9: delay(d*225);tone1.play(380,100); break; case 10: delay(d*200);tone1.play(320,100);

break; case 11: delay(d*250);tone1.play(440,100); break; case 12: delay(d*150);tone1.play(480,80); break; case 13: delay(d*165);tone1.play(450,100); break; case 14: delay(d*75);tone1.play(430,100); break; case 15: delay(d*150);tone1.play(380,100); break; case 16: delay(d*100);tone1.play(660,80); break; case 17: delay(d*100);tone1.play(760,50); break; case 18: delay(d*75);tone1.play(860,100); break; case 19: delay(d*150);tone1.play(700,80); break; case 20: delay(d*75);tone1.play(760,50); break; case 21: delay(d*175);tone1.play(660,80); break; case 22: delay(d*150);tone1.play(520,80); break; case 23: delay(d*75);tone1.play(580,80); break; case 24: delay(d*75);tone1.play(480,80); break; } } //devuelve que sensor estas usando (solo cuando la distancia es menor que 7cm) int sensor(void){ if (ultrasonic1.Ranging(CM)<7) return 1; else if(ultrasonic2.Ranging(CM)<7) return 2; else if(ultrasonic3.Ranging(CM)<7) return 3; else if(ultrasonic4.Ranging(CM)<7) return 4; else return 0; } /*dependiendo del numero del 1 al 4 que halla en la posicion del array que se le pase enciende una matriz u otra*/ void matriz(int r, int l){ if (r==1) { digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led1, HIGH); delay(20*l); } else if (r==2) { digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW);

digitalWrite(led2, HIGH); delay(20*l); }else if (r==3) { digitalWrite(led2, LOW); digitalWrite(led1, LOW); digitalWrite(led4, LOW); digitalWrite(led3, HIGH); delay(20*l); }else if (r==4) { digitalWrite(led2, LOW); digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led4, HIGH); delay(20*l); } digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led1, LOW); } /*Permite elegir el numero de jugadores (maximo 4) a traves de los sensores, encendiendose la matriz correspondiente al sensor activado*/ int elegirJugadores(){ int j = 0; while (j<4){ delay(1500); int r = sensor(); if (r==1) { digitalWrite(led1, HIGH); }else if (r==2) { digitalWrite(led2, HIGH); }else if (r==3) { digitalWrite(led3, HIGH); }else if (r==4) { digitalWrite(led4, HIGH); }else if (r==0) { return j; } delay(1500); j++; } return j; } void loop() { int l = 25; int j = 1; delay(2000); Serial.println("Elegir numero de jugadores 1-4"); int e = elegirJugadores(); if (e==0){ //Comprueba que halla minimo un jugador Serial.println("Debe haber al menos un jugador. Por favor, vuelva a intentarlo."); }else{ Serial.print("Sois "); Serial.print(e); Serial.println(" jugadores"); for (int aux=1;aux<=e;aux++){ Serial.print("Jugador: ");

Serial.println(aux); delay(1500); inicializarSecuencia(array); boolean correcto=true; int l = 25; int j = 1; int p = 0; while (correcto==true){ for (int i=1;i<=j;i++) { nota(i); matriz(array[i],l); l--; } for(int n=1;n<=j;n++) { delay(1500); if (array[n]==sensor()){ nota(n); matriz(array[n],l); p++; }else{ digitalWrite(led2, HIGH); digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); Serial.print("Puntuacion: "); Serial.println(p); Serial.println("GAME OVER!!!"); Serial.println(""); punt[aux-1] = p; correcto=false; n=j; } } l=25; delay(2000); if (j<=24){ j++; } } } } digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led1, LOW); for (int i=0;i<e;i++){ Serial.print("Puntuacion jugador "); Serial.print(i+1); Serial.print(" : "); Serial.println(punt[i]); } delay(2000); Serial.println(""); Serial.println("Cargando el juego..."); Serial.println(""); }

CDIGO IMPLEMENTADO

HOJA DE CARACTERSTICAS
Arduino UNO http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf Matrices LED RGB 8x8 http://iteadstudio.com/store/images/produce/LED/LED%20matrix/8x8_LED_Matrix/2088RGBMat rix.pdf Sensores Ultrasonido HC-SR04 http://iteadstudio.com/store/images/produce/Sensor/HCSR04/HC-SR04.pdf

PROBLEMAS ENCONTRADOS
El problema principal con el que nos hemos encontrado es el tiempo que se ha tardado en recibir los componentes ya que tard casi un mes en llegar el material por lo que no hemos dispuesto de tres semanas en las que se poda haber avanzado el proyecto y realizar un trabajo ms amplio. Por ello, proponemos que para futuros estudiantes de esta asignatura, se adelante esta teora y as se encarguen los materiales antes. En cuanto al proyecto, hemos encontrado problemas con el cdigo y los sensores HC-SR04 ya que en el cdigo, se utiliza la generacin de nmeros aleatorios y esta instruccin influan en la distancia definida que los sensores deben detectar.

TIEMPO DEDICADO
El tiempo dedicado comienza con la planificacin y decisin del tipo de proyecto a realizar. Esta parte nos llev un periodo de una semana hasta que se finaliz la decisin. La segunda fase del proyecto comenz con la bsqueda de la cancin que se iba a reproducir en la secuencia del juego. En esta parte, se defini la cancin de Super Mario y se dividi la cancin en distintos tonos con la librera Tone. Dichos tonos irn sonando secuencialmente y aumentarn gradualmente en el juego a medida que el jugador vaya avanzando. Tras la recepcin del material la segunda semana de marzo, se procedi a la construccin del circuito final y a colocar y programar las matrices LED. En esta fase, se programaron las matrices para que comenzar a encenderse la secuencia con el primer tono aleatoriamente en cualquiera de las cuatro matrices, lo que nos dara problemas despus con los sensores.

Finalmente para la programacin de los sensores, se colocarn los cuatro segn la matriz a la que corresponda. El rango de distancia est definido para que reciba la seal a los 3mm. A continuacin se muestra un diagrama de Gantt que se ha seguido en la planificacin:

OPININ PERSONAL
En nuestra opinin, este proyecto final de grupo es ideal para aprender a manejar Arduino y dems componentes adems de mejorar nuestra creatividad e ilusin por la asignatura. La programacin de Arduino no nos ha parecido extremadamente dficl, al revs, una programacin bastante intuitiva y sencilla. Nos hubiera gustado disponer de ms tiempo para aprender ms cosas y realizar un proyecto ms largo y complejo, por ello creemos que para futuros cursos este es un aspecto que se debera mejorar. En lneas generales, la asignatura nos ha parecido interesante ya que es una asignatura bastante prctica y divertida. El nico problema que hemos tenido ha sido a la hora de encargar los componentes ya que tardaron ms de lo debido. En conclusin, acabamos este curso con grandes expectativas y contentos con las asignatura de Sistemas Empotrados y en Tiempo Real.

También podría gustarte