Como usar un zumbador con un ESP8266,ESP32 o un Arduino


Vamos a hablar de la librería Easybuzeer que nos va a ayudar a gestionar cualquier zumbador pasivo con casi todas las variantes de Arduino ,pues de hecho esta biblioteca se ha probado en los siguientes dispositivos: Arduino UNO,Arduino MEGA 2560 ,ESP32 y ESP8266

Como mejoras a esperar en las próximas actualizaciones su creador promete soporte para múltiples instancias de EasyBuzzerClass, lo que hace posible tener más de un Buzzer asi como funciones de acceso directo a sonidos predefinidos como; éxito, error y advertencia.

Para empezar a usar esta librería, necesitaremos incluir la biblioteca en el boceto mediante la opción Herramientas->Administrar Bibliotecas->Buscar «EasyBuzzer»


Empezando

Incluir la biblioteca en el skectch

#include <EasyBuzzer.h>

Establecer el pin donde está conectado el zumbador

De forma predeterminada, la biblioteca está configurada para utilizar el número de pin 4. Puede cambiar el número de pin predeterminado, modificando el valor de DEFAULT_PIN en el archivo Config.h . Para establecer el número de pin en el boceto, llame a la función EasyBuzzer.setPin(pin)en la configuración.

int pin = 2 ;
configuración vacía  () {
  EasyBuzzer. setPin (pin);
};  

Ejecutar la biblioteca

void  loop () {
   / * Llame siempre a esta función en el ciclo para que EasyBuzzer funcione. * / 
  EasyBuzzer. actualizar ();
};

Usos

Bip regular

Bip continuamente a una frecuencia determinada.

/ * Bip continuamente a una frecuencia determinada. * /
EasyBuzzer.beep (
  frecuencia	 // Frecuencia en Hertz (HZ). 
);

Emite un pitido a una frecuencia determinada un número específico de veces.

/ * 
 	Emite un pitido a una frecuencia determinada un número específico de veces. 
	Los valores predeterminados onDuration y offDuration se establecen en el archivo Config.h. 
* /
EasyBuzzer.beep (
  frecuencia,	 // Frecuencia en Hertz (HZ). 
  pitidos		 // El número de pitidos. 
);

Emite un pitido a una frecuencia determinada un número específico de veces, con función de devolución de llamada.

/ * 
 	Emite un pitido a una frecuencia determinada un número específico de veces, con funcionalidad de devolución de llamada. 
	Los valores predeterminados onDuration y offDuration se establecen en el archivo Config.h. 
* /
EasyBuzzer.beep (
  frecuencia,	 // Frecuencia en Hertz (HZ). 
  pitidos,	 // El número de pitidos. 
  callback	 // [Opcional] Función para llamar cuando termine. 
);

Secuencia de pitidos

Cree una secuencia de pitidos con una frecuencia determinada.

/ * Crea una secuencia de pitidos con una frecuencia determinada. * /
EasyBuzzer.beep (
  frecuencia,		 // Frecuencia en hercios (HZ). 
  onDuration, 		 // On Duración en milisegundos (ms). 
  offDuration, 		 // Off Duración en milisegundos (ms). 
  pitidos, 		 // El número de pitidos por ciclo. 
  pauseDuration, 	 // Duración de la pausa. 
  ciclos, 		 // El número de ciclo. 
  callback		 // [Opcional] Función para llamar cuando termine. 
);	

Bip único para una duración

Bip único a una frecuencia determinada, durante un período específico.

/ * Un solo pitido. * /
EasyBuzzer.singleBeep (
  frecuencia,	 // Frecuencia en hercios (HZ). 
  duración	 // Duración del pitido en milisegundos (ms). 
);

Bip único a una frecuencia determinada, durante un período específico, con función de devolución de llamada.

/ * Un solo pitido a una frecuencia determinada, durante un período específico, con funcionalidad de devolución de llamada. * /
EasyBuzzer.singleBeep (
  frecuencia, 	 // Frecuencia en hercios (HZ). 
  duración, 	 // Duración del pitido en milisegundos (ms). 
  callback	 // [Opcional] Función para llamar cuando termine. 
);

Dejar de pitar

Utilice esta función para detener el pitido. Puede llamar a esta función en todo momento, en cualquier lugar del código.

EasyBuzzer.stopBeep ();

Modificar los valores de duración predeterminados

Los valores de duración predeterminados se definen en el archivo Config.h . Puede cambiar esos valores en el archivo Config.h o usar la función provista para cambiarlos.

EasyBuzzer.setOnDuration (duración);	// Establecer en duración. 
EasyBuzzer.setOffDuration (duración);	// Establecer la duración de Off. 
EasyBuzzer.setPauseDuration (duración);	// Establecer la duración de la pausa.

Ejemplo

A continuación vamos a usar un sensor de sonido para Arduino mediante su salida digital D0 que conectaremos al pin D6 del ESP8266 que correspondel al GPIO16

El circuito se alimentara con 5V DC desde Vin y GND del ESP8266

Finalmente conectaremos un zumbador piezoelectrico pasivo entre D1(GPIO 5) y GND

Este es el código de ejemplo para probar el circuito comentado anteriormente del sensor de sonido para Arduino mediante su salida digital D0 que conectaremos al pin D6(GPIO16) del ESP8266 ,alimentado con 5V DC desde Vin y GND del ESP8266 y conectando un zumbador piezoeléctrico pasivo entre D1(GPIO 5) y GND .

#include <EasyBuzzer.h>


int sensor = 16 ;
bool estado = false ;


void sonidoTerminado(){
  Serial.println("Sonido terminado");
}


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  
  pinMode(5, OUTPUT);
   // Configuración del pin
  EasyBuzzer.setPin(5);
  
  Serial.begin(2000000);    // Iniciamos la puerta serie
 

  pinMode( sensor , INPUT_PULLUP) ;
 // digitalWrite(LED_BUILTIN , LOW) ; // Apagamos el LED al empezar
 
  // Configuración del beep
 // EasyBuzzer.beep(
 //   2000,          // Frecuencia en herzios
 //   100,           // Duración beep en ms
//    100,           // Duración silencio en ms
//    2,             // Números de beeps por ciclos
//    300,           // Duración de la pausa
//    1,             // Número de ciclos
 //   sonidoTerminado// Función callback que es llamada cuando termina
//  );
  
  
  int init=0;
  Serial.println("Empezamos");
//pausa
for (int n=0 ;n<200 ; n++)
        {     
        delay (100);
        }
}


void loop() {
//EasyBuzzer.update();

 bool  valor ;
for (int n=0 ;n<10 ; n++)
{ valor=  digitalRead(sensor) *digitalRead(sensor ); //leemos el estado del sensor
 }

 if ( valor == true ) //Si está activada la salida D0
 

  {    estado = ! estado ;                       // cambiamos el estado del LED
    digitalWrite(LED_BUILTIN, false) ;            // escribimos el nuevo valor
    digitalWrite(5, 1) ;            // escribimos el nuevo valor
    Serial.println("TRUE");
    for (int n=0 ;n<10 ; n++)
        {   EasyBuzzer.beep(3000, 100,100, 2, 300, 3, sonidoTerminado);   
        delay (100);
        }
  }
  else
  {
   // Serial.println( "FALSE");
      delay (10);
      digitalWrite(LED_BUILTIN, true) ;
      digitalWrite(5, 0) ;            // escribimos el nuevo valor
  ;
  }

  
}

Como fácilmente se puede ver estamos leyendo el puerto al que esta conectado el sensor de sonido, circunstancia que se detectara con la condición valor=true , lo que provocara que se active el zumbador

Para minimizar los rebotes, por cierto, ejecutamos un pequeño ciclo de 10 lecturas

Además, para evitar disparos involuntarios al inicio también un bucle de 200x100ms