Está en la página 1de 7

int pin_zumbador = 6; //Pin PWM a donde va conectado el zumbador

void setup() {

pinMode(pin_zumbador, OUTPUT);

void loop() {

//Se usa la funcion: tone(pin, frecuencia)

//Manda una onda con frecuencia de 400 Hz al zumbador


tone(6, 400);
delay(500);
noTone(pin_zumbador); //Silencia el zumbador
delay(500); //Espera 500 ms antes de volver a sonar

//Manda una onda con frecuencia de 300 Hz al zumbador


tone(6, 300);
delay(500);
noTone(pin_zumbador); //Silencia el zumbador
delay(500); //Espera 500 ms antes de volver a sonar

//Manda una onda con frecuencia de 200 Hz al zumbador


tone(6, 200);
delay(500);
noTone(pin_zumbador); //Silencia el zumbador
delay(500); //Espera 500 ms antes de volver a sonar

OTRO EJEMPLO
int pin_zumbador = 6; //Pin PWM donde va conectado el zumbador

void setup() {

pinMode(pin_zumbador, OUTPUT);

void loop() {

//Se usa la funcion: tone(pin, frecuencia)

//Marcha del Imperio

tone(6, 440); delay(1300);


tone(6, 349); delay(350);
tone(6, 523); delay(150);
tone(6, 440); delay(500);
tone(6, 349); delay(350);
tone(6, 523); delay(150);
tone(6, 440); delay(1000);
tone(6, 659); delay(1300);
tone(6, 698); delay(350);
tone(6, 523); delay(150);
tone(6, 415); delay(500);
tone(6, 349); delay(350);
tone(6, 523); delay(150);
tone(6, 440); delay(1000);
tone(6, 880); delay(500);
tone(6, 440); delay(500);
tone(6, 880); delay(500);
tone(6, 830); delay(250);
tone(6, 784); delay(250);
tone(6, 740); delay(125);
tone(6, 698); delay(125);
tone(6, 740); delay(500);
tone(6, 455); delay(250);
tone(6, 622); delay(500);
tone(6, 587); delay(250);
tone(6, 554); delay(250);
tone(6, 523); delay(125);
tone(6, 466); delay(125);
tone(6, 523); delay(500);
tone(6, 349); delay(125);
tone(6, 415); delay(500);
tone(6, 349); delay(375);
tone(6, 440); delay(125);
tone(6, 523); delay(500);
tone(6, 440); delay(375);
tone(6, 523); delay(125);
tone(6, 659); delay(1000);
tone(6, 880); delay(500);
tone(6, 440); delay(500);
tone(6, 880); delay(500);
tone(6, 830); delay(250);
tone(6, 784); delay(250);
tone(6, 740); delay(125);
tone(6, 698); delay(125);
tone(6, 740); delay(500);
tone(6, 445); delay(250);
tone(6, 622); delay(500);
tone(6, 587); delay(250);
tone(6, 554); delay(250);
tone(6, 523); delay(125);
tone(6, 466); delay(125);
tone(6, 523); delay(500);
tone(6, 349); delay(250);
tone(6, 415); delay(500);
tone(6, 349); delay(375);
tone(6, 523); delay(125);
tone(6, 440); delay(500);
tone(6, 349); delay(375);
tone(6, 261); delay(125);
tone(6, 440); delay(1000);

noTone(pin_zumbador);
delay(3000);

//Tema principal de STAR WARS

tone(6, 147); delay(450);


tone(6, 196); delay(900);
tone(6, 294); delay(900);
tone(6, 262); delay(150);
tone(6, 247); delay(150);
tone(6, 220); delay(150);
tone(6, 392); delay(900);
tone(6, 294); delay(900);
tone(6, 262); delay(150);
tone(6, 247); delay(150);
tone(6, 220); delay(150);
tone(6, 392); delay(900);
tone(6, 294); delay(900);
tone(6, 262); delay(150);
tone(6, 247); delay(150);
tone(6, 262); delay(150);
tone(6, 220); delay(1200);

noTone(pin_zumbador);
delay(3000);
}

Música con Arduino.


Crear música con Arduino o sonidos sueltos es relativamente fácil y suele ser una práctica muy
interesante para hacer con alumnos que están empezando a familiarizarse con la
programación.

En principio únicamente vamos a necesitar un zumbador piezoeléctrico y la placa de Arduino


para poder generar música con Arduino. Una vez se comprende la generación de sonidos se
pueden realizar proyectos más complejos implementando un pequeño instrumento electrónico
donde le podamos indicar notas mediante teclas, sensores capacitivos, sensores de
ultrasonidos, etc.
Un zumbador piezoaeléctrico consigue generar un sonido al vibrar en la frecuencia de la señal
eléctrica que recibe. El valor en frecuencia de la señal determinará el tono en el que suene el
piezoeléctrico. Es un sonido de muy baja calidad pero vamos a poder generar notas y con ello
música.

Si usamos una interfaz de programación basada en Scratch como mBlock seguramente


tengamos bloques disponibles para realizar sonidos, únicamente tendremos que tener en
cuenta la notación anglosajona para «traducir» una partitura. Para familiarizarte con la
programación de música mediante bloques te recomiendo que leas la entrada Música con
mBot que es aplicable igualmente a Arduino.

En esta ocasión vamos a generar música con Arduino mediante código porque va a ser la
manera de poder hacer sonar nuestro proyecto en cualquier nota que aparezca en la partitura
que consultemos, ya que vamos a poder programar también sostenidas, algo que no se puede
hacer por ejemplo con mBlock.

Vamos a hacer uso de la instrucción tone  cuyos argumentos son el pin de salida al cual


tenemos conectado el zumbador, la frecuencia de la señal que vamos a generar y que es la
que variará la nota y la duración en milisegundos (opcional). Con varias
instrucciones tone podremos hacer música con Arduino.

tone(pin,  frecuencia)

tone(pin,   frecuencia, tiempo)

El pin de salida debe ser de tipo PWM ya que debemos poder variar su frecuencia. En Arduino
Uno, Mini y Nano  podrán ser 3, 5, 6, 9, 10 y 11

La frecuencia adecuada para cada nota la tenéis en una tabla al final del tutorial.

El tiempo es la duración de la nota. Cada figura tendrá un tiempo determinado por el tiempo de


la negra (t),de tal manera que una blanca durará doble que una negra y una corchea la mitad.
La relación de los tiempos de las figuras es fija, pero el tempo lo vamos a marcar nosotros. Si
no declaramos el tiempo en la instrucción tone deberemos hacer un delay con la duración y
utilizar la instrución noTone posteriormente.
Por ejemplo si establecemos que una negra sea 1 segundo nos quedaría lo siguiente:

Utilizaremos la instrucción noTone si no indicamos un tiempo en la instrucción tone. Esta


instrucción indica que se deje de emitir la señal por el pin indicado.

noTone(pin)

Con esto ya podemos generar música con Arduino o notas musicales sueltas.

Debemos conectar el zumbador con su patilla marcada como negativa a masa (GND) y la
patilla marcada como positiva a nuestro pin con posibilidad de salida PWM. No te preocupes si
lo conectas al revés, simplemente no funcionará y tendrás que cambiarlo, pero no habrá humo
en tu lugar de trabajo.

Este puede ser un ejemplo para hacer sonar una semicorchea Do de la 4ª octava (según los
timepos de ejemplo de la tabla de arriba) a través del pin 3:

void setup()
{
pinMode(3, OUTPUT);      // Fija el pin 3 como salida.
}
void loop()
{
tone(3, 261.63, 250);      // Lanza señal a 261,63Hz por el pin 3 durante 250ms.
}

Este bucle sería equivalente a poner:

void loop()
{
tone(3, 261.63);      // Lanza señal a 261,63Hz por el pin 3.
delay(250);      // Espera 250ms.
noTone(3);  //  Dejamos de emitir la señal.
}

Si la música con Arduino que queremos crear es una melodía relativamente larga lo mejor es
utilizar arrays para almacenar todas las notas (frecuencias) y todos los tiempos.

Primero definimos los arrays:

long DO=523.25, //definimos las frecuencias de las notas


        DoS=554.37,
        RE=587.33,
        RES=622.25,
        MI=659.26,
        FA=698.46,
        FAS=739.99,
        SOL=783.99,
        SOLS=830.61,
        LA=880,
        LAS=932.33,
        SI=987.77,
        RE2=1174.66,
        FAS2=1479.98,
        PAU=30000; //pausa
int melodia[] = {SI, RE2, SI, RE2, PAU, SI, LA, SI, SI, SI, PAU, RE2, SI, SI, PAU, RE2, PAU,
RE2, RE2, PAU, SI, RE2, SI, RE2, PAU,
SI, LA, SI, SI, SI, PAU, RE2, SI, SI, PAU, RE2, PAU, RE2, RE2, PAU, RE2, PAU, SI, RE2,
PAU, SI, RE2, PAU, SI, RE2,
PAU, SI, PAU, RE2, SI, LA, SI, PAU, RE2,PAU, SI, RE2, PAU, SI, RE2, PAU, SI, RE2, PAU, SI,
PAU, RE2, SI, LA, SI,
PAU, FAS2, PAU, RE2, FAS2, PAU, RE2, FAS2, PAU, RE2 ,FAS2, PAU, RE2, FAS2, PAU,
RE2, LA, SOLS, SI, PAU, FAS2, PAU,
RE2, FAS2, PAU, RE2, FAS2, PAU, RE2, FAS2, PAU, RE2, FAS2, PAU, RE2, LA, SI, SI
};
int d=1000, e=500, m=250, c=125; //definimos los tiempos de doble, entera, media y cuarta
int duracionNota[] = {m, m, m, m, e, c, m, m, c, m, e, m, m, m, e, m, m, m, m, d, m, m, m, m, e,
c, m, m, c, m, e, m, m, m, e, m, m, m, m, d,
m, m, m, m, m, m, m, m, m, m, m, m, c, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m,
m, m, m, m, m,
m, m, m, m, m, m, m, m, m, m, m, m, c, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m,
m, m, m, m, m,
};

En el bucle incluiremos los arrays dentro de la función tone:


for (int notaActual = 0; notaActual < 112; notaActual++) {  //va a repetir las 112 notas
tone(11, melodia[notaActual]); //da el tono a la frecuencia de la nota en ese momento
delay(duracionNota[notaActual]);//se mantiene con la nota el tiempo definido para esa nota
noTone(11); //finaliza la melodía
}

También podría gustarte