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
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.