Si hay un instrumento musical fascinante para mí, es el theremin.
Se trata de un instrumento que se ejecuta sin contacto físico. Aquí puede verse un video de cómo suena:
Así que yo quise realizar una aproximación a la programación de un instrumento sin contacto, utilizando un sensor de distancia (ultrasónico) y un buzzer. Este fue el resultado:
Tenemos el buzzer conectado al pin 9 (y a gnd), y el sensor ultrasónico HC-SR04 conectado así:
- VCC – a 5v
- TRIG – al pin 12
- ECHO – al pin 13
- GND – a gnd
Y este es el código:
#define PIN_TRIG 12
#define PIN_ECO 13
int buzzer = 9;
int numTones = 10;
int tones[ ] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440,466, 494};
//DO, DO#, RE, RE#, MI, FA, FA#, SOL, SOL#, A, A#, B
void setup() {
Serial.begin (9600);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECO, INPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
//Este fragmento de código es para tomar la información del sensor ultrasónico HC-SR04
long duracion, distancia;
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
duracion=pulseIn(PIN_ECO, HIGH);
distancia=(duracion/2)/29;
//Aquí hacemos que la distancia se muestre en el "Monitor Serial"
Serial.println(distancia);
//En esta parte indicamos qué nota tocar de acuerdo a la distancia
switch (distancia) {
case 0 ... 10:
tone(buzzer, tones[1]);
delay(500);
break;
case 11 ... 20:
tone(buzzer, tones[5]);
delay(500);
break;
case 21 ... 30:
tone(buzzer, tones[8]);
delay(500);
break;
default:
noTone(buzzer);
delay(500);
}
}

Entonces,