Raspberry Pi – Leds pulsadores y Buzzer

En esta ocasión añadiremos un buzzer o zumbador a todos los elementos que tenemos ya en nuestra placa

Existen dos tipos de zumbadores:

  1. Pasivos
  2. Activos

Los pasivos son aquellos que requieren tanto de la señal de voltaje como de la frecuencia de oscilación para producir el sonido. Entonces tenemos que tener en cuenta que nosotros elegimos la frecuencia de la señal para elegir el sonido que queremos que emita.

Los activos, ya incluyen un circuito oscilador, que es un circuito que genera la señal a una frecuencia determinada. Por esto, nosotros solamente tenemos que alimentar la pequeña bocina con el voltaje adecuado y listo, el buzzer ya está listo para emitir un sonido. Está fácil no?, la única cuestión es que el sonido no lo podremos cambiar, ya está definido por el oscilador interno.

Para diferenciarlos tenemos que alimentar al buzzer con el voltaje indicado, normalmente es de 5 Vcc, si emite un sonido es activo, si no emite sonido es pasivo.

Polaridad del zumbador

Usaremos un transistor 2N2222A para atacar al zumbador desde nuestra RPi

Aquí podéis encontrar mas información de la librería iot para dotnet ,

Crearemos un nievo proyecto C# para Net Core 3.1 y pegaremos este código.

Cuando pulsemos el pulsador uno nos generara una serie de tonos que podremos escuchar , no es un sistema Hi-Fi , pero es mas que suficiente para generar alertas sonoras , podremos crear nuevos tonos jugando con la frecuencia y la duración de cada tono.

using System;
using System.Device.Gpio;
using System.Threading;
using Iot.Device.Buzzer;

namespace Test_Buzzer
{
    class RPi
    {
        static void Main(string[] args)
        {


            //Codigo Raspberry pi 
            //Definicion de I/O
            int Led_Rojo = 26;
            int Led_Verde = 6;
            int Led_Amarillo = 5;

            int pulsador_1 = 17;
            int pulsador_2 = 27;
            int pulsador_3 = 22;

            int pin_buzzer = 23;

            GpioController controller = new GpioController();
            Buzzer buzzer;

            //Modo de trabajo I/O
            controller.OpenPin(Led_Verde, PinMode.Output);
            controller.OpenPin(Led_Amarillo, PinMode.Output);
            controller.OpenPin(Led_Rojo, PinMode.Output);

            controller.OpenPin(pulsador_1, PinMode.InputPullUp);
            controller.OpenPin(pulsador_2, PinMode.InputPullUp);
            controller.OpenPin(pulsador_3, PinMode.InputPullUp);

            controller.OpenPin(pin_buzzer, PinMode.Output);
            buzzer = new Buzzer(pin_buzzer);

            controller.RegisterCallbackForPinValueChangedEvent(pulsador_1, PinEventTypes.Rising, evento_pulsar_pulsador_1);
            controller.RegisterCallbackForPinValueChangedEvent(pulsador_1, PinEventTypes.Falling, evento_soltar_pulsador_1);
            controller.RegisterCallbackForPinValueChangedEvent(pulsador_2, PinEventTypes.Rising, evento_pulsar_pulsador_2);
            controller.RegisterCallbackForPinValueChangedEvent(pulsador_2, PinEventTypes.Falling, evento_soltar_pulsador_2);
            controller.RegisterCallbackForPinValueChangedEvent(pulsador_3, PinEventTypes.Rising, evento_pulsar_pulsador_3);
            controller.RegisterCallbackForPinValueChangedEvent(pulsador_3, PinEventTypes.Falling, evento_soltar_pulsador_3);

            controller.Write(Led_Verde, PinValue.Low);
            controller.Write(Led_Amarillo, PinValue.Low);
            controller.Write(Led_Rojo, PinValue.Low);

            while (true)
            {
                Thread.Sleep(250);
                Console.Write(".");
            }


            void evento_pulsar_pulsador_1(object sender, PinValueChangedEventArgs args)
            {

                Console.WriteLine("");
                Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pulsado ...");
                controller.Write(Led_Rojo, PinValue.High);
                //buzzer.PlayTone(440, 1000);

                buzzer.PlayTone(264, 250);
                Thread.Sleep(250);
                buzzer.PlayTone(264, 250);
                Thread.Sleep(250);
                buzzer.PlayTone(297, 1000);
                Thread.Sleep(250);
                buzzer.PlayTone(264, 1000);
                Thread.Sleep(250);
                buzzer.PlayTone(352, 1000);
                Thread.Sleep(250);
                buzzer.PlayTone(330, 2000);
                Thread.Sleep(500);
                buzzer.PlayTone(264, 250);
                Thread.Sleep(500);
                buzzer.PlayTone(264, 250);
                Thread.Sleep(250);
                controller.Write(Led_Rojo, PinValue.Low);

            }

            void evento_soltar_pulsador_1(object sender, PinValueChangedEventArgs args)
            {
                //Console.WriteLine(DateTime.Now + " " + args.PinNumber + " soltado ....");
            }

            void evento_pulsar_pulsador_2(object sender, PinValueChangedEventArgs args)
            {
                Console.WriteLine("");
                Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pulsado ...");
                controller.Write(Led_Amarillo, PinValue.High);

                Thread.Sleep(500);
                controller.Write(Led_Amarillo, PinValue.Low);
            }

            void evento_soltar_pulsador_2(object sender, PinValueChangedEventArgs args)
            {
                //Console.WriteLine(DateTime.Now + " " + args.PinNumber + " soltado ....");
            }

            void evento_pulsar_pulsador_3(object sender, PinValueChangedEventArgs args)
            {
                Console.WriteLine("");
                Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pulsado ...");
                controller.Write(Led_Verde, PinValue.High);

                Thread.Sleep(500);
                controller.Write(Led_Verde, PinValue.Low);
            }

            void evento_soltar_pulsador_3(object sender, PinValueChangedEventArgs args)
            {
                //Console.WriteLine(DateTime.Now + " " + args.PinNumber + " soltado ....");
            }

        }
    }
}

En la raiz del proyecto ejecutar

dotnet tool install --global dotnet-ssh

Y para configurar seguir los pasos que nos va preguntando

dotnet-ssh configure MyRaspberryPi --auth-type UserSecrets --auth usuario:contraseña

Al compilar lo pasara a nuestra RPi

Y lo ejecutaremos con este comando

dotnet /home/antonio/net/test_buzzer/Test\ Buzzer.dll

Este es un video donde podréis escuchar el tono generado al pulsar el pulsador numero uno.

Con esto y un bizcocho ……….