Si quieres usar buzzers con tu Raspberry Pi Pico tienes dos opciones: buzzers pasivos o activos. Los buzzer pasivos son como bocinas, requieren de una señal que cambie a través del tiempo para funcionar. Los buzzers activos son más sencillos de usar, solo necesitan una señal digital y tienen un pitido agudo que no puede cambiar de frecuencia. En esta entrada te mostramos dos ejemplos para usar ambos buzzers con tu Raspberry Pi Pico y el IDE de Arduino.
Nota previa
Recientemente han surgido algunos problemas para cargar los programas en la tarjeta, esto debido a la compatibilidad de las librerías del microcontrolador RP2040. Para asegurarte de que no surjan inconvenientes con tu código, te recomendamos seguir estos pasos:
1.- Actualizar las librerías de la tarjeta
2.- Borrar la memoria flash
3.- Actualizar el bootloader
Ejemplo para el buzzer activo
Para utilizar el buzzer activo solo se necesita una señal digital. Al igual que un programa blink, podemos encender y apagar el buzzer cada 500 ms. Carga este código y conecta tu buzzer al pin 20 de tu tarjeta, el extremo negativo del buzzer irá a tierra.
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 15 as an output.
pinMode(15, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(15, HIGH);
delay(500);
digitalWrite(15, LOW);
delay(500);
}
Ejemplo buzzer pasivo
El buzzer pasivo necesita una señal variable en el tiempo para funcionar. El IDE de Arduino maneja una función llamada tone con la que podemos configurar el pin de salida y la frecuencia. En este caso vamos a mandar 11 señales cada segundo al GPIO 15 (pin 20 de la tarjeta).
const int pinBuzzer = 15; //Constante que contiene el numero del pin de Arduino al cual conectamos un buzzer pasivo
const int frecuencias[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494, 1000};//Arreglo que contiene las frecuencias que queremos escuchar en nuestro buzzer
const int numFrecuencias = 11;
void setup()
{
}
void loop()
{
for (int i = 0; i < numFrecuencias; i++)
{
tone(pinBuzzer, frecuencias[i]);
delay(1000);
}
noTone(pinBuzzer);
}
Diagrama de conexiones

Referencias: