LD-BZPN-1705
Dimensiones (mm):
Un zumbador es un dispositivo electroacústico que convierte la corriente eléctrica en sonido. Existen dos tipos de zumbadores: activos y pasivos.
Para conectar este zumbador solo es necesario conectar una de sus patas a FND y la otra, con una resistencia de 100 ohmios, a un pin de salida digital.
El montaje con una placa Compluino UNO resulta especialmente sencillo al disponer esta placa de pines de alimentación (+5V y GND) asociados a todas las entradas y salidas de la placa.
Utilizando arrays para programar secuencias largas de datos podemos reproducir canciones con el zumbador.
// Una canción completa
#define ZUMBADOR 8
//Frecuencias de las notas musicales usadas
#define NOTA_E6 1319
#define NOTA_G6 1568
#define NOTA_A6 1760
#define NOTA_AS6 1865
#define NOTA_B6 1976
#define NOTA_C7 2093
#define NOTA_D7 2349
#define NOTA_E7 2637
#define NOTA_F7 2794
#define NOTA_G7 3136
#define NOTA_A7 3520
// Melodía principal de Mario Bros
int melodia[] = {
NOTA_E7, NOTA_E7, 0, NOTA_E7, 0, NOTA_C7, NOTA_E7, 0,
NOTA_G7, 0, 0, 0, NOTA_G6, 0, 0, 0,
NOTA_C7, 0, 0, NOTA_G6, 0, 0, NOTA_E6, 0,
0, NOTA_A6, 0, NOTA_B6, 0, NOTA_AS6, NOTA_A6, 0,
NOTA_G6, NOTA_E7, NOTA_G7, NOTA_A7, 0, NOTA_F7, NOTA_G7,
0, NOTA_E7, 0, NOTA_C7, NOTA_D7, NOTA_B6, 0, 0,
NOTA_C7, 0, 0, NOTA_G6, 0, 0, NOTA_E6, 0,
0, NOTA_A6, 0, NOTA_B6, 0, NOTA_AS6, NOTA_A6, 0,
NOTA_G6, NOTA_E7, NOTA_G7, NOTA_A7, 0, NOTA_F7, NOTA_G7,
0, NOTA_E7, 0, NOTA_C7, NOTA_D7, NOTA_B6, 0, 0
};
// Duración de cada nota de la melodía
int tiempo[] = {
12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12,
9, 9, 9, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12,
9, 9, 9, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12
};
//Declaración de variables
int nota;
int duracion_nota;
int pausa_entre_notas;
void setup()
{
pinMode(ZUMBADOR, OUTPUT);
}
void loop()
{
for (nota = 0; nota < 78; nota++)
{
duracion_nota = 1000 / tiempo[nota];
tone(ZUMBADOR, melodia[nota], duracion_nota);
pausa_entre_notas = duracion_nota * 1.60;
delay(pausa_entre_notas);
}
}
Para mostrar lo sencillo que es programar el zumbador programaremos un pequeño sonido inicial. Solo ocurrirá una vez cuando encendamos la placa controladora.
Recuerda que en la función "tone" debes introducir la frecuencia de la nota que quieres reproducir.
// Pitido inicial
#define ZUMBADOR 8
void setup()
{
pinMode(ZUMBADOR, OUTPUT);
tone(ZUMBADOR, 293); //Nota RE
delay(200);
tone(ZUMBADOR, 440); //Nota LA
delay(200);
noTone(ZUMBADOR);
}
void loop()
{
}
Podemos ampliar el programa anterior añadiendo un pulsador. programaremos que el zumbado pite al comenzar el programa y cada vez que presionemos el pulsador.
Este es el programa necesario.
// Pitido inicial y cada vez que pulso
#define PULSADOR 2
#define ZUMBADOR 8
void setup()
{
pinMode(PULSADOR, INPUT_PULLUP);
pinMode(ZUMBADOR, OUTPUT);
tone(ZUMBADOR, 293); //Nota RE
delay(200);
tone(ZUMBADOR, 440); //Nota LA
delay(200);
noTone(ZUMBADOR);
}
void loop()
{
if (digitalRead(PULSADOR) == LOW)
{
tone(ZUMBADOR, 659); //Nota MI
}
else
{
noTone(ZUMBADOR);
}
}
Con dos pulsadores más y algunas modificaciones en el programa anterior podemos contruir nuestro propio teclado eléctrico. La combinación de unos pulsadores u otros dará lugar a una octava completa.
Este es el programa necesario.
// piano eléctrico
#define PULSADOR1 2
#define PULSADOR2 4
#define PULSADOR3 6
#define ZUMBADOR 8
void setup()
{
pinMode(PULSADOR1, INPUT_PULLUP);
pinMode(PULSADOR2, INPUT_PULLUP);
pinMode(PULSADOR3, INPUT_PULLUP);
pinMode(ZUMBADOR, OUTPUT);
}
void loop()
{
if ((digitalRead(PULSADOR1) == HIGH) & (digitalRead(PULSADOR2) == HIGH) & (digitalRead(PULSADOR3) == HIGH)) //Sin pulsar, silencio
{
noTone(ZUMBADOR);
}
else if ((digitalRead(PULSADOR1) == HIGH) & (digitalRead(PULSADOR2) == HIGH) & (digitalRead(PULSADOR3) == LOW)) //001 - Do
{
tone(ZUMBADOR, 523); //Do
}
else if ((digitalRead(PULSADOR1) == HIGH) & (digitalRead(PULSADOR2) == LOW) & (digitalRead(PULSADOR3) == HIGH)) //010 - Re
{
tone(ZUMBADOR, 587); // Re
}
else if ((digitalRead(PULSADOR1) == HIGH) & (digitalRead(PULSADOR2) == LOW) & (digitalRead(PULSADOR3) == LOW)) //011 - Mi
{
tone(ZUMBADOR, 659); //Mi
}
else if ((digitalRead(PULSADOR1) == LOW) & (digitalRead(PULSADOR2) == HIGH) & (digitalRead(PULSADOR3) == HIGH)) //100 - Fa
{
tone(ZUMBADOR, 698); //Fa
}
else if ((digitalRead(PULSADOR1) == LOW) & (digitalRead(PULSADOR2) == HIGH) & (digitalRead(PULSADOR3) == LOW)) //101 - Sol
{
tone(ZUMBADOR, 783); //Sol
}
else if ((digitalRead(PULSADOR1) == LOW) & (digitalRead(PULSADOR2) == LOW) & (digitalRead(PULSADOR3) == HIGH)) //110 - La
{
tone(ZUMBADOR, 880); //La
}
else if ((digitalRead(PULSADOR1) == LOW) & (digitalRead(PULSADOR2) == LOW) & (digitalRead(PULSADOR3) == LOW)) //111 - Si
{
tone(ZUMBADOR, 987); //Si
}
}