Diferència entre revisions de la pàgina «Theremin»
(6 revisions intermèdies per 2 usuaris que no es mostren) | |||
Línia 27: | Línia 27: | ||
conectamos el extremo Vcc del sensor al pin de 5V del Arduino, el extremo Trig al pin 9, el extremo Echo al pin 8 y por ultimo el extremo GND del sensor al GND del Arduino. | conectamos el extremo Vcc del sensor al pin de 5V del Arduino, el extremo Trig al pin 9, el extremo Echo al pin 8 y por ultimo el extremo GND del sensor al GND del Arduino. | ||
− | + | [[Fitxer:Theremin esquema.jpg|theremin esquema]] | |
− | [[ | + | [[Fitxer:Theremin completo.jpg|theremin completo]] |
− | [[ | + | [[Fitxer:Theremin sensor.jpg|theremin sensor]] |
− | [[ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Código == | == Código == | ||
<pre lang="c"> | <pre lang="c"> | ||
+ | /* En las sigueinets linias, creamos las variables que determinaran la distancia, tiempo, el lugar donde conectamos el pincho, numero de notas y sus frequencias*/ | ||
long distancia; | long distancia; | ||
long tiempo; | long tiempo; | ||
− | int | + | int posiciondelpincho = 12; |
− | int | + | int tonos = 8; |
− | int | + | int notasmusicales[] = {261, 294, 329, 349, 392, 440, 493, 523}; |
− | // | + | // mid C D E F G A B C |
void setup(){ | void setup(){ | ||
Serial.begin(9600); | Serial.begin(9600); | ||
− | pinMode(9, OUTPUT); /* | + | pinMode(9, OUTPUT); /*Indicamos que el pin numero 9 es de salida*/ |
− | pinMode(8, INPUT); /* | + | pinMode(8, INPUT); /*Indicamos que el pin 8 es de entrada*/ |
+ | } | ||
void loop(){ | void loop(){ | ||
Línia 59: | Línia 52: | ||
digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/ | digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/ | ||
delayMicroseconds(10); | delayMicroseconds(10); | ||
− | tiempo=pulseIn(8, HIGH); /* | + | tiempo=pulseIn(8, HIGH); /* Mide el tiempo que tarda el sensor a recibir el el sonido enviado anteriormente, segun ese tiempo se le aplicara una nota musical o |
− | + | la otra*/ | |
− | + | distancia= int(0.017*tiempo); /*Calculos la distancia respecto el tiempo, cogiendo la valocidad del sonido*/ | |
− | distancia= int(0.017*tiempo); /* | ||
− | |||
Serial.print("Distancia "); | Serial.print("Distancia "); | ||
Serial.print(distancia); | Serial.print(distancia); | ||
Serial.println(" cm"); | Serial.println(" cm"); | ||
delay(100); | delay(100); | ||
+ | /*segun la distancia el buzzer reproduce una nota*/ | ||
if (distancia>5 && distancia<10) | if (distancia>5 && distancia<10) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[0]); | |
delay(500); | delay(500); | ||
} | } | ||
if (distancia>10 && distancia<15) | if (distancia>10 && distancia<15) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[1]); | |
delay(500); | delay(500); | ||
} | } | ||
if (distancia>15 && distancia<20) | if (distancia>15 && distancia<20) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[2]); | |
delay(500); | delay(500); | ||
} | } | ||
if (distancia>20 && distancia<25) | if (distancia>20 && distancia<25) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[3]); | |
delay(500); | delay(500); | ||
} | } | ||
if (distancia>25 && distancia<30) | if (distancia>25 && distancia<30) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[4]); | |
delay(500); | delay(500); | ||
} | } | ||
if (distancia>30 && distancia<35) | if (distancia>30 && distancia<35) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[5]); | |
delay(500); | delay(500); | ||
} | } | ||
if (distancia>35 && distancia<40) | if (distancia>35 && distancia<40) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[6]); | |
delay(500); | delay(500); | ||
} | } | ||
if (distancia>40 && distancia<50) | if (distancia>40 && distancia<50) | ||
{ | { | ||
− | + | notasmusicales(posiciondelpincho, notasmusicales[7]); | |
delay(500); | delay(500); | ||
} | } |
Revisió de 11:43, 26 maig 2016
Introducción
Consiste en conectar a [[1]Arduino] un [[2]sensor de proximidad] que transmite un ultrasonido, con objetivo de conseguir diferentes notas musicales que conseguimos por el tiempo que transcurre entre el envío y la recepción del ultrasonido.
Material Necesario
Para elaborar el proyecto, necesitamos:
- [[3]placa de Arduino]
- Placa Protoboard (opcional)
- [4]Sensor de proximidad] (modelo HC-SR04)
- [[5]Zumbador o Buzzer]
Objetivos del proyecto
Aprovechando que la velocidad del ultrasonido del sensor de proximidad en el aire es de valor 340 m/s, o 0,034 cm/microseg. Para calcular la distancia, resolveremos v=d/t despejamos d=v·t, siendo v la constante anteriormente citada y t el valor devuelto por el sensor a la placa Arduino. También habrá que dividir el resultado entre 2 dado que el tiempo recibido es el tiempo de ida y vuelta.
Conexion
Conectamos el zumbador a la placa protoboard de forma vertical. Después conectamos dos cables al lado de cada pata del zumbador (tienen que estar a la derecha o izquierda, no arriba o abajo), un extremo al Arduino en el pin del tierra (gnd) y otro en uno de los pins digitales de salida o entrada (pin 12 en nuestro caso).
Por otro lado Conectamos el sensor de proximidad al Arduino de la siguiente manera:
conectamos el extremo Vcc del sensor al pin de 5V del Arduino, el extremo Trig al pin 9, el extremo Echo al pin 8 y por ultimo el extremo GND del sensor al GND del Arduino.
Código
/* En las sigueinets linias, creamos las variables que determinaran la distancia, tiempo, el lugar donde conectamos el pincho, numero de notas y sus frequencias*/
long distancia;
long tiempo;
int posiciondelpincho = 12;
int tonos = 8;
int notasmusicales[] = {261, 294, 329, 349, 392, 440, 493, 523};
// mid C D E F G A B C
void setup(){
Serial.begin(9600);
pinMode(9, OUTPUT); /*Indicamos que el pin numero 9 es de salida*/
pinMode(8, INPUT); /*Indicamos que el pin 8 es de entrada*/
}
void loop(){
digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
delayMicroseconds(5);
digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
delayMicroseconds(10);
tiempo=pulseIn(8, HIGH); /* Mide el tiempo que tarda el sensor a recibir el el sonido enviado anteriormente, segun ese tiempo se le aplicara una nota musical o
la otra*/
distancia= int(0.017*tiempo); /*Calculos la distancia respecto el tiempo, cogiendo la valocidad del sonido*/
Serial.print("Distancia ");
Serial.print(distancia);
Serial.println(" cm");
delay(100);
/*segun la distancia el buzzer reproduce una nota*/
if (distancia>5 && distancia<10)
{
notasmusicales(posiciondelpincho, notasmusicales[0]);
delay(500);
}
if (distancia>10 && distancia<15)
{
notasmusicales(posiciondelpincho, notasmusicales[1]);
delay(500);
}
if (distancia>15 && distancia<20)
{
notasmusicales(posiciondelpincho, notasmusicales[2]);
delay(500);
}
if (distancia>20 && distancia<25)
{
notasmusicales(posiciondelpincho, notasmusicales[3]);
delay(500);
}
if (distancia>25 && distancia<30)
{
notasmusicales(posiciondelpincho, notasmusicales[4]);
delay(500);
}
if (distancia>30 && distancia<35)
{
notasmusicales(posiciondelpincho, notasmusicales[5]);
delay(500);
}
if (distancia>35 && distancia<40)
{
notasmusicales(posiciondelpincho, notasmusicales[6]);
delay(500);
}
if (distancia>40 && distancia<50)
{
notasmusicales(posiciondelpincho, notasmusicales[7]);
delay(500);
}
}