InicioTarjetas de DesarrolloArduinoHaz que el Zumbador Buzzer Pasivo Módulo KY-006, cante “Feliz Cumpleaños”...

Haz que el Zumbador Buzzer Pasivo Módulo KY-006, cante “Feliz Cumpleaños” por ti.

El siguiente tutorial, tiene como finalidad que se comprenda el uso del Zumbador Buzzer Pasivo Módulo KY-006, ya que a diferencia del Buzzer Activo KY-012 , se tiene que indicar por medio de código a que frecuencia son los tonos que requerimos reproducir.

Para realizar el proyecto necesitaremos:

Diagrama de conexiones

Uso del Buzzer Pasivo en Arduino

Para poder utilizar cualquier tono en nuestro KY-006 en IDE Arduino utilizaremos la función tone(). Esta función genera una onda cuadrada a un ciclo de trabajo del 50%. Las variables que se configuraran es la frecuencia, duración y el pin de salida.

Para trabajar con esta función usaremos las salidas PWM del nuestro Arduino, en nuestro caso para Arduino UNO los pines PWM son: 3,5,6,9-11.

Parte de la sintaxis de la función tone() son:

  • tone(pin, frecuencia)
  • tone(pin, frecuencia, duración)

Código de Arduino para reproducir tonos aleatorios

Ahora que ya tenemos en cuenta cual es la función que necesitamos para la reproducción de tonos de nuestro Zumbador Buzzer Pasivo, programaremos la reproducción de tonos de frecuencias aleatorias descritas en la variable de entrada tonos[].

intbuzzer = 9;                            //pin de salida hacia el KY-006
int tonos[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014,956, 834, 765, 593, 468, 346, 224,622 , 715 }; //variedad de tonos de diferentes frecuencias
int frec= 16;                               //cantidad de tonos con frecuencias(son 16 frecuencias)

void setup() {
  pinMode(buzzer,OUTPUT);          // El pin 9 anteriormente declarado se configura como salida
}

void loop() {
for (int i = 0; i < frec; i++) { //es un conteo y barrido por las 16 frecuencias registradas de modo aleatorio
   tone(buzzer,tonos[i],1000);   //se reproducirá el tono de la frecuencia en la salida Buzzer=pin9 a una velocidad de 1000 ms
}
noTone(buzzer);                  //dejara de emitir el tono de las frecuencias
}

Como podemos escuchar la salida, solo son tonos que definimos a frecuencias “aleatorias”, pero ¿Qué pasaría si las mismas frecuencias les diéramos estructura de un tempo y se les asignara notas para la reproducción de alguna melodía?

Código en Arduino para reproducción de “Feliz Cumpleaños”

Con el siguiente programa podremos escuchar tonos que anteriormente escuchamos de forma aleatoria ahora reproduciendo la melodía de “Feliz Cumpleaños”

int int buzzer = 9;                            //pin de salida hacia el KY-006
int length = 28;                               // cantidad de notas
char notas[] = "GGAGcB GGAGdc GGxecBA yyecdc"; //Las notas de la canción a replicar
int beats[] = { 2, 2, 8, 8, 8, 16, 1, 2, 2, 8, 8, 8, 16, 1, 2, 2, 8, 8, 8, 8, 16, 1, 2, 2, 8, 8, 8, 16 };
int tempo = 110;                               //velocidad de reproducción entre mas bajo es el valor mas rápido será 

void repTono(int tone, int duracion) {                  //función para reproducir tono, declarando la variable de entrada tono y duración 
for (long i = 0; i < duracion * 1000L; i += tone * 2) { // el tono tendrá una duración de muy larga (L), por esa razón la duración será
                                                         // hasta 1000L, donde i=tono x 2 
digitalWrite(buzzer, HIGH);                              //el Buzzer cambiara de estado HIGH a LOW dependiendo la... 
delayMicroseconds(tone);                                 //duración de cada tono
digitalWrite(buzzer, LOW);
delayMicroseconds(tone);
  }
}
void repNota(char nota, int duracion) {                  //función para reproducir toda la canción, 
char notas[] = {'C', 'D', 'E', 'F', 'G', 'A', 'B',       //declarando variables de entrada nota, duración
'c', 'd', 'e', 'f', 'g', 'a', 'b', 'x', 'y' };
int tonos[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014,956, 834, 765, 593, 468, 346, 224,622 , 715 }; //frecuencia de los tonos
int SPEE = 5;

for (int i = 0; i < 17; i++) { // tocar el tono correspondiente
if (notas[i] == nota) {
int nuevaduracion = duracion/SPEE;
repTono(tonos[i], nuevaduracion);
   }
  }
}

void setup() {

  pinMode(buzzer,OUTPUT);    // El pin 9 anteriormente declarado se configura como salida
}
void loop() {
for (int i = 0; i < length; i++) {
   if (notas[i] == ' ') {
   delay(beats[i] * tempo); // reinicio
   } else {
     repNota(notas[i], beats[i] * tempo);
}
delay(tempo); // pausa entre notas
}
}

Como podemos observar, el Buzzer Pasivo reproduce los tonos que se programaron desde Arduino.

También te recomendamos el tutorial: Uso del sensor de vibración ky-002 como alarma para reproducir una alerta con el Zumbador Buzzer Pasivo.

TUTORIALES RELACIONADOS