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.