Está en la página 1de 5

Música con Arduino

POR JUAN FERNANDO ROLDAN

Crear música con Arduino es sencillo, solo es cuestión de generar tonos a partir de ciertas
frecuencias y emitirlas a través de un buzzer o bocina. Tenemos un artículo, donde te
explicamos qué es un buzzer y cómo conectarlo,
Antes de iniciar, debemos conocer algunos conceptos musicales básicos . Cómo aclaración,
no somos músicos, la teoría que exponemos en este artículo la hemos obtenido buscando
información.

Las notas en un piano o teclado, están distribuidas de las siguiente manera:

Las teclas blancas corresponden a las notas (o notas naturales) y las teclas negras
corresponden a los bemoles o sostenidos.

Para reproducir estas notas en Arduino, debemos conocer la frecuencia de estas, a


continuación, te dejamos las frecuencias para las principales notas:

DO=523.25
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

NOTA: para generar diferentes frecuencias de salida, el PIN donde debe estar conectado
el PIN positivo de buzzer o zumbador debe ser un PIN PWM del Arduino, marcado en la
placa con una tilde (~).
Así mismo, en música, en una partitura, dependiendo de la duración de cada nota se puede
leer con diferentes figuras:
Por ejemplo si establecemos que una negra sea 1 segundo nos quedaría lo siguiente:

Figura Tiempo(ms)
Redonda 4000
Blanca 2000
Negra 1000
Corchea 500
Semicorchea 250
Fusa 125
Semifusa 62

Especificaciones del código para Arduino.


PARA hacer uso de la instrucción tone cuyos argumentos son el pin de salida al cual
tenemos conectado el buzzer o 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)
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.
noTone(pin)
Por ejemplo, si queremos generar la Nota Do (de los valores dados anteriormente) y que el
buzzer esté conectado al PIN3, el código quedaría:

/*
* Conectar un Buzzer al PIN9
* el buzer sonar´500mseg se apagara otros
* 50mseg y el ciclo se repetirá
*/
void setup()
{
pinMode(3, OUTPUT); // Fija el pin 3 como salida.
}

void loop()
{
tone(3, 523.25, 250); // Lanza señal a 523.25Hz por el pin 3 durante 250ms.
}
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.
Como ejemplo, te dejamos un fragmento del tema principal de la pelpicula de Star Wars
así como el de la Marca del Imperio de la misma película.

Conexión:
Buzzer -> PIN9
LED -> PIN6

/*
/*
* www.ProveedoraCano.com
* Conectar un buzzer al PIN9
* se ejecutará de forma inmediata
* la melodía de Star Wars Marcha imperial
* y tema principal de la película
*/
#define c3 7634
#define d3 6803
#define e3 6061
#define f3 5714
#define g3 5102
#define a3 4545
#define b3 4049
#define c4 3816 // 261 Hz
#define d4 3401 // 294 Hz
#define e4 3030 // 329 Hz
#define f4 2865 // 349 Hz
#define g4 2551 // 392 Hz
#define a4 2272 // 440 Hz
#define a4s 2146
#define b4 2028 // 493 Hz
#define c5 1912 // 523 Hz
#define d5 1706
#define d5s 1608
#define e5 1517 // 659 Hz
#define f5 1433 // 698 Hz
#define g5 1276
#define a5 1136
#define a5s 1073
#define b5 1012
#define c6 955

#define R 0 // Define a special note, ‘R’, to represent a rest

// Melodía 1: Star Wars Imperial March (Marcha Imperial).

int melody1[] = { a4, R, a4, R, a4, R, f4, R, c5, R, a4, R, f4, R, c5, R, a4, R, e5, R, e5, R,
e5, R, f5, R, c5, R, g5, R, f5, R, c5, R, a4, R};
int beats1[] = { 50, 20, 50, 20, 50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 80, 50, 20, 50, 20,
50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 40};

// Melodía 2: Star Wars Theme (tema princilpal Star Wars)


int melody2[] = { f4, f4, f4, a4s, f5, d5s, d5, c5, a5s, f5, d5s, d5, c5, a5s, f5, d5s, d5,
d5s, c5};
int beats2[] = { 21, 21, 21, 128, 128, 21, 21, 21, 128, 64, 21, 21, 21, 128, 64, 21, 21,
21, 128 };

int MAX_COUNT = sizeof(melody1) / 2;


long tempo = 10000;
int pause = 1000;
int rest_count = 50;
int toneM = 0;
int beat = 0;
long duration = 0;
int potVal = 0;
int speakerOut = 9;
int led = 6;

void setup() {

pinMode(speakerOut, OUTPUT);

pinMode(led, OUTPUT);
Serial.begin(9600);

void loop() {

// Melodía1
for (int i=0; i<="" max_count;="" void="" playtone()="" long=""
elapsed_time="0;" if="" (tonem="" style="box-sizing: border-
box;"> 0) {

digitalWrite(led,HIGH);

while (elapsed_time < duration) {


digitalWrite(speakerOut,HIGH);
delayMicroseconds(toneM / 2);
digitalWrite(speakerOut, LOW);
delayMicroseconds(toneM / 2);
elapsed_time += (toneM);

digitalWrite(led,LOW);

}
else {
for (int j = 0; j < rest_count; j++) {
delayMicroseconds(duration);
}

También podría gustarte