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

De Wiket
Salta a la navegació Salta a la cerca
 
(3 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|Esquema]]
+
[[Fitxer:Theremin esquema.jpg|theremin esquema]]
[[Fitxer:Theremin completo.jpg|montaje]]
+
[[Fitxer:Theremin completo.jpg|theremin completo]]
[[Fitxer:Theremin buzzer.jpg|Buzzer]]
+
[[Fitxer:Theremin sensor.jpg|theremin sensor]]
[[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 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); /* 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 62:
 
   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ó 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.

theremin esquema theremin completo theremin sensor

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