Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ARPA
LÁSER
Isabel Rodriguez
Irene Garnica Fernández
Marta Gutiérrez de Agüera
4º ESO
ÍNDICE:
1. Finalidad del proyecto
2. Búsqueda de información
3. Subsistemas
4. Diseño
5. Planificación
6. Hardware
7. Software
8. Funcionamiento
9. Análisis
10. Anexo I
11. Anexo II
1. Finalidad del proyecto:
● Finalidad:
Crear un arpa cuyos lasers se encienden al presionar un botón y se apagan al volverlo a
presionar. Si los LDR no reciben la luz del láser tocar una nota musical.
Objetivo mínimo : cuando la LDR recibe un valor inferior a uno predeterminado (cuando el
láser incide en el), la LDR no recibe la luz del láser y suena una nota.
Ampliaciones : posteriormente llegaremos a tener 6 LDRs con sus láser correspondientes
para llegar a tener 6 notas musicales. Querríamos crear dos escalas, y que se toque una y
si pulsamos el botón pasamos a la otra.
● Esquema de entradas y salidas
2. Búsqueda de información
Acotamos el problema desde lo general a lo particular. Algunas de los puntos que se
tratarán son:
● Principios de funcionamiento:
○ Utilización de entradas y salidas digitales y analógicas.
○ Pulsador con memoria, para que funcione como un interruptor.
○ Uso de las notas musicales mediante la utilización de las frecuencias y del
sistema de notación musical anglosajón.
https://es.wikipedia.org/wiki/Sistema_de_notaci%C3%B3n_musical_anglosaj
%C3%B3n
● Proyectos documentados que nos han servido como referencia y links con
información:
http://amosdelestanio.blogspot.com.es/2013/11/tp3proyectosconarduino.html
http://arparduino.blogspot.com.es/
http://amosdelestanio.blogspot.com.es/2013/11/tp3proyectosconarduino.html
https://es.wikipedia.org/wiki/Sistema_de_notaci%C3%B3n_musical_anglosaj%C3%B3n
https://www.onshape.com/
https://www.youtube.com/watch?v=f5TutKGCvLM
● División del proyecto en subsistemas inicial
● Decisiones técnicas de cómo se van a resolver los subsistemas.
Los subsistemas se van a resolver de izquierda a derecha en el diagrama de flujo,
avanzando paralelamente con el proceso de construcción de la maqueta.
● Conocimientos necesarios y cosas a tener en cuenta:
○ El láser no necesita resistencia si lo conectamos al pin digital 13, pero en
cualquiera de los otros pines digitales sí la necesitaría, ya que arduino podría
resultar dañado.
○ La LDR si necesita resistencia(10K), al igual que los pulsadores (para
prevenir que arduino se queme).
○ Cómo usar el divisor de potencia NPR para incluir una corriente externa y
que los láser tengan suficiente potencia.
3. Subsistemas
Division del proyecto en subsistemas funcionales
4. Diseño
● Perspectiva del conjunto → Plano 3D
● Vistas de conjunto
5. Planificación
Nº Materiales Descripción Cantidad Precio
(€)
5 Termoresistor 1 1,5
NTC
6 Protoboard Protoboard full+ 1 6
6. Hardware
7. Software
Código Explicación
:
Variables
const
int
speaker = 8;
//pin minijack Declaramos los pines de las
const
int
laserPin = 13; //pin laser salidas y entradas y, con un
const
int
pulsPin3 = 3;
//pin pulsador array, los de las 6 analogicas,
const
int
pulsPin2 = 2;
//pin pulsador que seran las de las LDRs.
int
duration = 100;
int
ldrPin []
= {0
,
1
,
2,
3
,
4,
5}; //array con los 6 pines de entrada
analógicas
int
pulsState3 = 0; //estado pulsador pulsador(high o low) Declaramos lo que sería el
int
pulsState2 = 0; //estado del pulsador 2 estado de cada salida (LDR y
boolean laserState; //estado del laser pulsador) y entrada (lasers).
int
ldrValue[6];
//valor ldr normal (la lee en el loop) Por otro lado, usamos la
int
ldrValueSin[6]; //para autocalibración (se lee en el setup autodeterminación para
sin el laser) comparar valores de la LDR.
int
ldrValueLaser[6]; //para autocalibración (se lee en el setup
con el láser)
int
melody
=
1; Esta variable la usamos para
fijar una escala u otra
dependiendo del estado del
pulsador.
:
Notas
//escala 1 Definimos las notas usando
#define NOTE_C4 262
//do sistema de notación musical
#define NOTE_D4 294
//re para arduino.
#define NOTE_E4 330
//mi
#define NOTE_F4 349
//fa
#define NOTE_G4 392 //sol
#define NOTE_A4 440
//la
//escala 2
#define NOTE_C5 523
//do
#define NOTE_D5 587
//re
#define NOTE_E5 659
//mi
#define NOTE_F5 698
//fa
#define NOTE_G5 784 //sol
#define NOTE_A5 880
//la
Void setup
pinMode (laserPin
,
OUTPUT
); Declaramos las salidas.
pinMode (speaker,
OUTPUT
);
Serial
.
begin(9600);
//autocalibración de valores. Aquí hay un intervalo de
//leer valores LDR NORMAL tiempo muy pequeño en el
digitalWrite (laserPin ,
LOW ); que los laser están apagados
for (
int
i
=
0; i
< 6; i
++) { y se leen los valores de cada
ldrValueSin[i] = analogRead (ldrPin[i]); uno de las LDRs y se guardan
Serial.
println(i); en el array ldrValueSin[] que
Serial.
print
(
"ldrValueSin" ); posteriormente usaremos
Serial.
print
(ldrValueSin[i]); para el sonido de las notas.
delay(25);
}
digitalWrite (laserPin ,
HIGH); Aquí leemos los valores que
delay (100); da la LDR con el láser
for (
int
i
=
0; i
< 6; i
++) { encendido en ella
ldrValueLaser[i] =
analogRead (ldrPin[i]);
Serial .
println(i);
Serial .
print
(
"ldrValueLaser" );
Serial .
print
(ldrValueLaser[i]);
delay (25);
}
}
Void loop
//leer valores LDR NORMAL (en todo momento) Leer valores LDR (en todo
for (
int
i
=
0; i
< 6; i
++
) { momento). Para después
ldrValue[i] =
analogRead (ldrPin[i]); definir un intervalo en el que
Serial .
println(i); sonarán las notas.
Serial .
print
(
"ldrValue" );
Serial .
print
(ldrValue[i]);
}
//Pulsador 2 Este pulsador es para
//lectura cambiar de escalas y va al pin
pulsState2 =
digitalRead (pulsPin2); 2 digital.
//cuando el pulsador se pulse cambiar la variable a melody 2
Inicialmente detectamos si
//inicialmente se pone en la escala 1
if
(pulsState2 ==
HIGH) { está pulsado y si la variable
if
(melody == 1) { está en 1. Si esto se cumple
melody =
2; pues se pone la variable
} melody a dos.
else {
En un if más adelante
melody =
1;
enviamos la señal para los
}
dos voids que veremos más
delay (200);
adelante para dos escalas
}
diferentes.
//manda la señal de que void utilizar dependiendo de la variable
melody
if
(melody == 1) {
sonido1();
}
else {
sonido2();
}
//Pulsador 3 Este pulsador con memoria va
pulsState3 =
digitalRead (pulsPin3); al pin 3 digital y es el que
if
(pulsState3 ==
HIGH ) { funciona como un interruptor
if
(laserState ==
LOW ) { para encender y apagar los
digitalWrite (laserPin ,
HIGH ); lásers.
laserState =
HIGH ;
}
else {
digitalWrite (laserPin ,
LOW );
laserState =
LOW ;
}
delay (200);
}
}
Voids sonidos
//escala 1 Sólo suena si está el láser
void
sonido1() { encendido.
//que suene solo si los laser estan encendidos Se establece un valor de
if
(laserState ==
HIGH ) { referencia por el cual si el
//si el valor de la ldr es menor que la media de los valores valor de la LDR en todo
predeterminados no suena
momento es menor que ese
//do
if
(ldrValue[0]
< (ldrValueSin[0] +
ldrValueLaser[0])
/
2) { valor establecido, sonará las
tone (speaker,
NOTE_C4 ,
duration); notas.
Esto se repite a lo largo de los
} dos voids; pero se cambia la
else { nota que se tocará:
noTone ;
}
//re
if <
(ldrValue[1] +
(ldrValueSin[1] /
ldrValueLaser[1]) 2) {
tone ,
(speaker NOTE_D4 ,
duration);
}
else {
noTone ;
}
//mi
if <
(ldrValue[2] +
(ldrValueSin[2] /
ldrValueLaser[2]) 2) {
tone ,
(speaker NOTE_E4 ,
duration);
}
else {
noTone ;
}
//fa
if <
(ldrValue[3] +
(ldrValueSin[3] /
ldrValueLaser[3]) 2) {
tone ,
(speaker NOTE_F4 ,
duration);
}
else {
noTone ;
}
//sol
if <
(ldrValue[4] +
(ldrValueSin[4] /
ldrValueLaser[4]) 2) {
tone ,
(speaker NOTE_G4 ,
duration);
}
else {
noTone ;
}
//la
if <
(ldrValue[5] +
(ldrValueSin[5] /
ldrValueLaser[5]) 2) {
tone ,
(speaker NOTE_A4 ,
duration);
}
else {
noTone ;
}
}
}
//escala 2 Se repite lo anterior pero con
void
sonido2() { la escala aguda.
//que suene solo si los laser estan encendidos
if
(laserState
==HIGH
) {
//si el valor de la ldr es menor que la media de los valores predeterminados no
suena
//do
if <
(ldrValue[0] +
(ldrValueSin[0] /
ldrValueLaser[0]) 2) {
tone ,
(speaker ,
NOTE_C5 duration);
}
else
{
noTone
;
}
//re
if <
(ldrValue[1] +
(ldrValueSin[1] /
ldrValueLaser[1]) 2) {
tone ,
(speaker ,
NOTE_D5 duration);
}
else
{
noTone
;
}
//mi
if <
(ldrValue[2] +
(ldrValueSin[2] /
ldrValueLaser[2]) 2) {
tone ,
(speaker ,
NOTE_E5 duration);
}
else
{
noTone
;
}
//fa
if <
(ldrValue[3] +
(ldrValueSin[3] /
ldrValueLaser[3]) 2) {
tone ,
(speaker ,
NOTE_F5 duration);
}
else
{
noTone
;
}
//sol
if <
(ldrValue[4] +
(ldrValueSin[4] /
ldrValueLaser[4]) 2) {
tone ,
(speaker ,
NOTE_G5 duration);
}
else
{
noTone
;
}
//la
if <
(ldrValue[5] +
(ldrValueSin[5] /
ldrValueLaser[5]) 2) {
tone ,
(speaker ,
NOTE_A5 duration);
}
else
{
noTone
;
}
}
Aquí
se puede ver el código, para futuras modificaciones.
8. Funcionamiento
● quí.
Vídeo explicativo del proyecto ver a
9. Análisis
● El proyecto aparentemente funciona como se esperaba, aunque tiene algún que otro
fallo como la confusión entre notas.
● Las posible ampliación del proyecto es añadirle una tarjeta de sonido, para que éste
sea aún más natural.
ANEXO I: El equipo
● Constitución: Marta, Isa, Irene.
● Normas:
○ Ser trabajador.
○ Esforzarse
○ Tratar al prójimo como a ti mismo.
○ Quejarse lo mínimo.
○ No ignorar ni virtualmente ni a la cara a otros componentes cuando se dirijan
a ti.
● Roles:
○ Documentación: se va hablando según el tiempo disponible de cada una.
Pero más o menos equilibrado entre todos.
○ Programación: Irene e Isa según la función y el reparto de tareas.
○ Maqueta: Marta (diseño).
○ Construcción: Marta.
○ Esquemas de Fritzing: Isa e Irene.
○ Video explicativo:
■ Grabación: nuestros componentes y ayuda de otros.
■ Producción: Irene
● Canales de comunicación:
○ Google drive: carpeta compartida
○ Correos con fuentes de información
○ Grupo de Whatsapp
ANEXO II: El equipo: evaluación del funcionamiento del equipo
● El equipo se ha coordinado bien por lo general, en todos los aspectos, así como en
el reparto de tareas.