arpa lÁser - tecnología, programación y robótica … · const int laserpin = 13; //pin laser...

15
ARPA LÁSER Isabel Rodriguez Irene Garnica Fernández Marta Gutiérrez de Agüera 4º ESO

Upload: hoangdang

Post on 17-Sep-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

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 NTC

1 1,5

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 const int laserPin = 13; //pin laser const int pulsPin3 = 3; //pin pulsador const int pulsPin2 = 2; //pin pulsador int duration = 100; int ldrPin [] = 0, 1, 2, 3, 4, 5; //array con los 6 pines de entrada analógicas

Declaramos los pines de las salidas y entradas y, con un array, los de las 6 analogicas, que seran las de las LDRs.

int pulsState3 = 0; //estado pulsador pulsador(high o low) int pulsState2 = 0; //estado del pulsador 2 boolean laserState; //estado del laser int ldrValue[6]; //valor ldr normal (la lee en el loop) int ldrValueSin[6]; //para autocalibración (se lee en el setup sin el laser) int ldrValueLaser[6]; //para autocalibración (se lee en el setup con el láser)

Declaramos lo que sería el estado de cada salida (LDR y pulsador) y entrada (lasers). Por otro lado, usamos la autodeterminación para comparar valores de la LDR.

int melody = 1; Esta variable la usamos para fijar una escala u otra dependiendo del estado del pulsador.

Notas:

//escala 1 #define NOTE_C4 262 //do #define NOTE_D4 294 //re #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

Definimos las notas usando sistema de notación musical para arduino.

Void setup

pinMode(laserPin, OUTPUT); pinMode(speaker, OUTPUT); Serial.begin(9600);

Declaramos las salidas.

//autocalibración de valores. //leer valores LDR NORMAL digitalWrite(laserPin, LOW); for (int i = 0; i < 6; i++) ldrValueSin[i] = analogRead(ldrPin[i]); Serial.println(i); Serial.print("ldrValueSin"); Serial.print(ldrValueSin[i]); delay(25);

Aquí hay un intervalo de tiempo muy pequeño en el que los laser están apagados y se leen los valores de cada uno de las LDRs y se guardan en el array ldrValueSin[] que posteriormente usaremos para el sonido de las notas.

digitalWrite(laserPin, HIGH); delay(100); for (int i = 0; i < 6; i++) ldrValueLaser[i] = analogRead(ldrPin[i]); Serial.println(i); Serial.print("ldrValueLaser"); Serial.print(ldrValueLaser[i]); delay(25);

Aquí leemos los valores que da la LDR con el láser encendido en ella

Void loop

//leer valores LDR NORMAL (en todo momento) for (int i = 0; i < 6; i++) ldrValue[i] = analogRead(ldrPin[i]); Serial.println(i); Serial.print("ldrValue"); Serial.print(ldrValue[i]);

Leer valores LDR (en todo momento). Para después definir un intervalo en el que sonarán las notas.

//Pulsador 2 //lectura pulsState2 = digitalRead(pulsPin2); //cuando el pulsador se pulse cambiar la variable a melody 2 //inicialmente se pone en la escala 1 if (pulsState2 == HIGH) if (melody == 1) melody = 2; else melody = 1; delay (200); //manda la señal de que void utilizar dependiendo de la variable melody if (melody == 1) sonido1(); else

Este pulsador es para cambiar de escalas y va al pin 2 digital. Inicialmente detectamos si está pulsado y si la variable está en 1. Si esto se cumple pues se pone la variable melody a dos. En un if más adelante enviamos la señal para los dos voids que veremos más adelante para dos escalas diferentes.

sonido2();

//Pulsador 3 pulsState3 = digitalRead(pulsPin3); if (pulsState3 == HIGH) if (laserState == LOW) digitalWrite(laserPin, HIGH); laserState = HIGH; else digitalWrite(laserPin, LOW); laserState = LOW; delay (200);

Este pulsador con memoria va al pin 3 digital y es el que funciona como un interruptor para encender y apagar los lásers.

Voids sonidos

//escala 1

void sonido1() //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_C4, duration); else 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;

Sólo suena si está el láser encendido. Se establece un valor de referencia por el cual si el valor de la LDR en todo momento es menor que ese valor establecido, sonará las notas. Esto se repite a lo largo de los dos voids; pero se cambia la nota que se tocará:

//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 void sonido2() //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);

Se repite lo anterior pero con la escala aguda.

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

Vídeo explicativo del proyecto ver aquí. 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.