Está en la página 1de 15

 

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/tp3­proyectos­con­arduino.html 
http://arparduino.blogspot.com.es/ 
http://amosdelestanio.blogspot.com.es/2013/11/tp3­proyectos­con­arduino.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 
(€) 

1  Láser  Láser adaptado con dos cables  6  6 x 2 

2  LDR  LDR adaptada para arduino  6  6 x 1,5 

3  Pulsador  Pulsador arduino  2  2 x 2 

4  Minijack  Minijack con dos cables  1  1 x 0,5 

5  Termoresistor    1  1,5 
NTC 

6  Protoboard  Protoboard full+ ​ 1  6 

7  Madera  Panel de madera contrachapado (7mm)  2 m2 ​ 18 

8  Cables  Bobina de cables  10 m  5 

9  Estaño  Bobina de estaño  0,5 m  1 

10  Arduino UNO  Placa de arduino  1  30 


 
 
● Proceso de fabricación 
 
1. Encargar las piezas con las medidas  del diseño. 
2. Recortar el hueco de las 2 maderas grandes con sierra y segueta. 
3. Limar lo que hemos recortado para que quede recto. 
4. Medir y hacer el agujero para meter los lásers y las LDR. 
5. Unir los cuatro lados del marco que iría en medio. 
6. Colocar los lásers y las LDR. 
7. Soldar los 5v a los lásers. 
8. Pegar las piezas restantes con pegamento y silicona. 
9. Dejar que se sequen las piezas. 
10. Y finalmente poner silicona para aislar y evitar que se junten los cables de los láser y 
para ajustar las LDR y que coincidan con los láser 
 
 
 
 
 
 

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. 
 
 
 
 
 
 
 
 
 

También podría gustarte