Theremin con Arduino, Buzzer y Sensor de distancia
En clase de tecnología se nos pidió realizar un instrumento musical utilizando:
Placa Arduino
Buzzer
Sensor de distancia
Descripción
Para empezar con el programa, declaramos las diferentes variables o pines, que
son el Trigger y el Echo del S.Proximidad; el Buzzer; y las diferentes notas de la
escala con su frecuencia.
son el Trigger y el Echo del S.Proximidad; el Buzzer; y las diferentes notas de la
escala con su frecuencia.
En el setup establecemos si las variables que hemos introducido anteriormente
son de entrada o salida (INPUT o OUTPUT), junto al tiempo o “delay” que tarda
en iniciar el programa.
son de entrada o salida (INPUT o OUTPUT), junto al tiempo o “delay” que tarda
en iniciar el programa.
Si la distancia es mayor que 0 pero menor que 10, sonará un DO y así
sucesivamente con todas las notas de la escala, sin alteraciones. Para identificar
la distancia a la que se encuentra el objeto (la mano en este caso), el sensor de
distancia lanzará un pulso con el Pin del Trigger, sabiendo la velocidad a la que se
desplaza el sonido y midiendo el tiempo que el pulso tarda en regresar al Pin Echo
podremos realizar una transformación: (duration(tiempo respuesta) * 10 / 292/ 2),
la cual nos permitirá saber la distancia en centímetros. Sabiendo ya la distancia
en centímetros, podemos hacer sonar cada nota de la escala moviendo la mano
hacia arriba y hacia abajo (dependiendo de los intervalos de distancias que hemos
establecido anteriormente). Cada nota tardará en cambiar 300 milisegundos y
durará hasta que se retire la mano.
sucesivamente con todas las notas de la escala, sin alteraciones. Para identificar
la distancia a la que se encuentra el objeto (la mano en este caso), el sensor de
distancia lanzará un pulso con el Pin del Trigger, sabiendo la velocidad a la que se
desplaza el sonido y midiendo el tiempo que el pulso tarda en regresar al Pin Echo
podremos realizar una transformación: (duration(tiempo respuesta) * 10 / 292/ 2),
la cual nos permitirá saber la distancia en centímetros. Sabiendo ya la distancia
en centímetros, podemos hacer sonar cada nota de la escala moviendo la mano
hacia arriba y hacia abajo (dependiendo de los intervalos de distancias que hemos
establecido anteriormente). Cada nota tardará en cambiar 300 milisegundos y
durará hasta que se retire la mano.
Montaje
Empezaremos con el montaje de todos los elementos. En primer lugar, acoplamos
el Buzzer y el sensor de ultrasonidos a la protoboard, y mediante cables los conectaremos a
los diferentes pines de la placa. El Trigger del sensor de ultrasonidos irá conectado al PIN 10;
el Echo al PIN 9; la pata positiva del Buzzer se conectará al PIN 11. Conectaremos un cable
desde la corriente de 5v de la placa a una línea de la protoboard representada con un “+” y
color rojo, y haremos lo mismo con el GND pero en la línea azul con un “-”. En cualquier
agujero de la línea azul con el GND conectado pasaremos un cable hasta la pata del sensor
de ultrasonidos donde está escrito GND y haremos lo mismo en la pata negativa del Buzzer.
A continuación, conectaremos un cable a la línea roja de 5v que vaya hasta la pata del sensor
que esté indicada con un “5v”.
El programa que hemos utilizado es el siguiente:
int EchoPin = 9;
int TriggerPin = 10;
int Buzzer = 11;
int Do = 523;
int Re = 587;
int Mi = 659;
int Fa = 698;
int Sol = 784;
int La = 880;
int Si = 988;
int Dos = 1046;
void setup() {
Serial.begin(9600);
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(Buzzer, OUTPUT);
}
void loop() {
int cm = ping(TriggerPin, EchoPin);
Serial.print("Distancia: ");
Serial.println(cm);
delay(300);
if (cm > 0 && cm<10)
tone(Buzzer, Do);
if (cm > 10 && cm<20)
tone(Buzzer, Re);
if (cm > 20 && cm<30)
tone(Buzzer, Mi);
if (cm > 30 && cm<40)
tone(Buzzer, Fa);
if (cm > 40 && cm<50)
tone(Buzzer, Sol);
if (cm > 50 && cm<60)
tone(Buzzer, La);
if (cm > 60 && cm<70)
tone(Buzzer, Si);
if (cm > 70 && cm<80)
tone(Buzzer, Dos);
if (cm>80)
noTone(Buzzer);
}
int ping(int TriggerPin, int EchoPin) {
long duration, distanceCm;
digitalWrite(TriggerPin, LOW);
delayMicroseconds(4);
digitalWrite(TriggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
duration = pulseIn(EchoPin, HIGH);
distanceCm = duration * 10 / 292/ 2;
return distanceCm;
}