Dificultad: intermedia

¿Cómo reproduce sonidos Arduino?

Como sabemos el sonido no es más que vibraciones que viajan por un medio, estas generan el sonido, pero como hace Arduino para transformar señales eléctricas a señales sonoras? lo logra con la ayuda de transductores como los buzzer o altavoces, estas transforman una energía a otra en este caso a energía acústica, pero estos transductores requieren recibir una determinada cantidad de energía eléctrica por un determinado tiempo produciendo una vibración en el transductor, esto Arduino lo hace mediante señales PWM señalando la frecuencia de la nota musical, como sabemos gracias a esto podemos crear resultados análogos con señales digitales.

En este proyecto haremos un circuito que simulara el sonido hecho por una sirena de policía.

Materiales necesarios:

  • Arduino UNO o equivalente
  • Resistor de 10k
  • Led, color a eleccion
  • Buzzer
  • pulsador
  • protoboard
  • cables de conexión





  • PASO 1: conexión de componentes:
    Aquí se muestra la conexión de los componentes.
    En lugar del parlante usaremos el buzzer incluido en el kit de Arduino hellbot, el mismo se puede conectar directamente en la protoboard.


    Paso 2 programación:

    Función tone() de Arduino

    Para generar tonos y reproducir música con Arduino mediante un buzzer o algún altavoz, Arduino en su documentación nos presenta una función llamada Tone() que nos ayuda a generar una frecuencia para luego ser transmitida al transductor y generar el sonido que queramos.

    Esta función es muy simple que trabaja con dos o tres parámetros, el primer parámetro nos permite indicar el pin que vamos a usar para generar el tono musical con Arduino, el segundo parámetro es usada para indicar la frecuencia del tono que deseamos reproducir y el tercer parámetro lo usamos para determinar la duración del tono, debemos indicarlo en milisegundos, este último parámetro es opcional.

    tone(pin ,frecuencia)
    tone(pin ,frecuencia)

    Función noTone() de Arduino

    Esta función tiene un parámetro donde debemos indicar el pin que es usado para generar los tonos, es usada para detener la onda cuadrada generada por la función tone().


    A continuación se muestra el código utilizado para hacer la sirena de policía:

    int btn = 2;
    int tiempo = 10;
    int sonido = 9;

    void setup() {

    pinMode(btn, INPUT); // Pulsador para accionar la alarma
    pinMode(sonido, OUTPUT); // Pin para reproducir la frecuencia del tono

    }

    void loop() {

    if(digitalRead(btn)==HIGH)
    {

    sirenaPolicia(1200,800,1,400,2);
    sirenaPolicia(1100,700,20,20,10);
    sirena2();
    noTone(sonido);
    }

    }

    // función para cambiar la frecuencia del tono de forma secuencial
    // sirenaPolicia(frecuencia máxima, frecuencia mínima, divisor, bucle, # de repeticiones)
    void sirenaPolicia(int fMAX, int fMIN, int divisor, int numMAX, int repet)
    {
    int fMIN1 = fMIN;
    int fMAX1 = fMAX;
    for(int i =0; i<repet; i++)
    {
    for(int j = 0; j<=numMAX; j++)
    {
    tone(sonido, fMIN1);
    delay(tiempo);
    fMIN1 = fMIN1 + divisor;
    }
    for(int k = numMAX/2; k>=0; k–)
    {
    tone(sonido, fMAX1);
    delay(tiempo);
    fMAX1 = fMAX1 – divisor*2;
    }
    fMIN1 = fMIN;
    fMAX1 = fMAX;
    }
    }

    //Función para generar un simple cambio de frecuencia
    void sirena2()
    {

    for(int l = 0; l<=4; l++)
    {
    tone(sonido, 1200);
    delay(500);
    tone(sonido, 800);
    delay(500);
    }
    }

    Aprieta el botón subir para enviar el código al Arduino.

    Si “cargado exitosamente” aparece al fondo de la Ventana, significa que el código se cargó exitosamente en la placa.

    Fuentes:

    https://creatividadcodificada.com/arduino/generar-tonos-con-arduino-para-hacer-musica/