Diferència entre revisions de la pàgina «Theremin»

De Wiket
Salta a la navegació Salta a la cerca
Línia 19: Línia 19:
  
 
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.
 
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).<br />
 
 
Por otro lado Conectamos el sensor de proximidad al Arduino de la siguiente manera:<br />
 
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|Esquema]]
 
[[Fitxer:Theremin completo.jpg|montaje]]
 
[[Fitxer:Theremin buzzer.jpg|Buzzer]]
 
[[Fitxer:Theremin sensor.jpg|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 speakerPin = 12;
+
int posiciondelpincho = 12;
int numTones = 8;
+
int tonos = 8;
int tones[] = {261, 294, 329, 349, 392, 440, 493, 523};
+
int notasmusicales[] = {261, 294, 329, 349, 392, 440, 493, 523};
//           mid C  D  E    F    G    A    B    C
+
//                   mid C  D  E    F    G    A    B    C
  
 
void setup(){  
 
void setup(){  
 
   Serial.begin(9600);
 
   Serial.begin(9600);
   pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
+
   pinMode(9, OUTPUT); /*Indicamos que el pin numero 9 es de salida*/
   pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/}
+
   pinMode(8, INPUT); /*Indicamos que el pin 8 es de entrada*/
 +
}
  
 
void loop(){
 
void loop(){
Línia 51: Línia 41:
 
   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); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
+
   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
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
+
  la otra*/
  deja de hacerlo, LOW, la longitud del pulso entrante*/
+
   distancia= int(0.017*tiempo); /*Calculos la distancia respecto el tiempo, cogiendo la valocidad del sonido*/
   distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
 
  /*Monitorización en centímetros por el monitor serial*/
 
 
   Serial.print("Distancia ");
 
   Serial.print("Distancia ");
 
   Serial.print(distancia);
 
   Serial.print(distancia);
Línia 63: Línia 51:
 
   if (distancia>5 && distancia<10)
 
   if (distancia>5 && distancia<10)
 
   {
 
   {
     tone(speakerPin, tones[0]);
+
     notasmusicales(posiciondelpincho, notasmusicales[0]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }
 
   if (distancia>10 && distancia<15)
 
   if (distancia>10 && distancia<15)
 
   {
 
   {
     tone(speakerPin, tones[1]);
+
     notasmusicales(posiciondelpincho, notasmusicales[1]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }
 
   if (distancia>15 && distancia<20)
 
   if (distancia>15 && distancia<20)
 
   {
 
   {
     tone(speakerPin, tones[2]);
+
     notasmusicales(posiciondelpincho, notasmusicales[2]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }
 
   if (distancia>20 && distancia<25)
 
   if (distancia>20 && distancia<25)
 
   {
 
   {
     tone(speakerPin, tones[3]);
+
     notasmusicales(posiciondelpincho, notasmusicales[3]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }
 
   if (distancia>25 && distancia<30)
 
   if (distancia>25 && distancia<30)
 
   {
 
   {
     tone(speakerPin, tones[4]);
+
     notasmusicales(posiciondelpincho, notasmusicales[4]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }
 
   if (distancia>30 && distancia<35)
 
   if (distancia>30 && distancia<35)
 
   {
 
   {
     tone(speakerPin, tones[5]);
+
     notasmusicales(posiciondelpincho, notasmusicales[5]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }
 
   if (distancia>35 && distancia<40)
 
   if (distancia>35 && distancia<40)
 
   {
 
   {
     tone(speakerPin, tones[6]);
+
     notasmusicales(posiciondelpincho, notasmusicales[6]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }
 
   if (distancia>40 && distancia<50)
 
   if (distancia>40 && distancia<50)
 
   {
 
   {
     tone(speakerPin, tones[7]);
+
     notasmusicales(posiciondelpincho, notasmusicales[7]);
 
     delay(500);
 
     delay(500);
 
   }
 
   }

Revisió del 07:53, 19 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.

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);
  }
}

Enlace a video

Video Theremin

Webgrafia

Sensor ultrasonidos Arduino Sensor