Arduino: Zumbador e instrumento musical Theremin (Ejercicios 06 y 07)

En esta entrada, aprenderemos cómo tocar notas musicales y sonidos con Arduino:

  • Primero haremos que toque una escala musical,
  • y luego lo combinaremos  con una fotocélula, para hacer un instrumento similar a Theremin que cambie el tono tocado mientras mueves tu mano sobre la fotocélula cambiando el nivel de iluminación que recibe.

Reproduciendo una escala

Usaremos el zumbador piezoeléctrico. Un pin de la sonda piezoeléctrica va a la conexión GND y el otro al pin digital 12.

La función tone(speakerPin, tones[i]); permite programar directamente en Hertzios la frecuencia correspondiente a la nota que se quiere reproducir.

URL en el repositorio IoT-Arduino

/*
Simple Sounds
*/

int speakerPin = 12;

int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//            mid C  C#   D    D#   E    F    F#   G    G#   A

void setup()
{
  for (int i = 0; i < numTones; i++)
  {
    tone(speakerPin, tones[i]);
    delay(500);
  }
  noTone(speakerPin);
}

void loop()
{
  /* Put the code in the loop() if you want the scale to be repeated forever
  for (int i = 0; i < numTones; i++)
  {
    tone(speakerPin, tones[i]);
    delay(500);
  }
  noTone(speakerPin);
  delay(1000);
     *
   */

}

 

para tocar una nota de un tono particular, especificamos la frecuencia. Las diferentes frecuencias para cada nota se mantienen en un vector (lista de tonos).

Cuando se han reproducido todas las notas, el comando 'noTone' detiene ese pin tocando cualquier tono.

Hemos puesto el código de reproducción de tonos en 'setup' en lugar de en 'loop'  para que se reproduzca una sola vez. Para reproducir la melodía de nuevo, basta con presionar el botón RESET de Arduino

Sonidos y frecuencias

Las ondas sonoras son variaciones en la presión del aire. La velocidad de las vibraciones (ciclos por segundo o Hertzios) es lo que define el tono del sonido. Cuanto mayor sea la frecuencia de la vibración, mayor será el tono (más agudo).

Las sondas piezoeléctricas usan un cristal especial que se expande y contrae a medida que una señal eléctrica pasa a través de él. Esto generará un tono que podemos escuchar.

Pseudo-Theremin

El Theremin es un instrumento musical que produce sonidos sintetizados al mover las manos hacia delante. Fue utilizado en el tema musical para la serie original de Star Trek.

Vamos a hacer un instrumento similar que cambiará el tono de la nota al mover la mano hacia adelante. Podemos dejar la sonda piezoeléctrica donde está, unida directamente al Arduino, y añadimos el circuito de fotocélula y resistencia del circuito del ejemplo anterior.

URL en el repositorio IoT-Arduino

/*
Pseudo Thermin
*/

int speakerPin = 12;
int photocellPin = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int photocellReading = analogRead(photocellPin);
  int pitch = 200 + photocellReading*2 ;
  tone(speakerPin, pitch);

  Serial.print("Analog reading = ");
  Serial.print(photocellReading);     // the raw analog reading
  Serial.print("\tPitch = ");
  Serial.println(pitch);
  //delay(10);
  //noTone(speakerPin);
  //delay(1000);
}