Descripción
Vamos a conectar un buzzer piezoelectrico directamente a arduino, y con ayuda del software correspondiente vamos ha hacer que suene de diferentes maneras
CircuitoEste primer programa crea un sonido típico de una alarma de un despertador. Será un beep con una duración determinada, y una pausa de la misma duración.
Para empezar hemos creado una función propia vacía llamada beep, a la que habrá que pasarle un número que es la duración del beep y de la pausa entre beep, que se corresponderá con la variable tipo char sin signo, llamada pausa. Cuando al función sea llamada analogWrite pondrá una señal de ancho de pulso de 20 sobre 255 en el pin 9. Aunque cambies el 20 por cualquier número entre 0 y 255 la diferencia será ínfima. luego se producirá una pausa que determina la duración del beep, luego analogWrite pondrá 0 en el pin 9 con lo que cesará el beep, y hará otra pausa que determinará cuanto tiempo estará en silencio el buzzer y saldrá de la función.
En el setup, designamos el pin 9 como una salida, luego llamaremos 3 veces la función beep() con una pausa de 50, con lo cual sonará 3 pitidos cortos y rápido como aviso, luego se mantendrá en silencio un segundo y comenzará la función loop
En la función loop,se llamará a la función beep con una duración de sus pausa de 200 y se repetirá de forma ininterrumpida. Como resultado tenemos beep de 200 ms con pausas de 200ms.
En este segundo código vamos a ver como generar señales de tono variables para conseguir una melodía, utilizando la función tone() de arduino, que genera una señal de la frecuencia indicada dentro del paréntesis, junto al pin de salida y la duración de la misma.
Hemos creado una primera variable de tipo entero llamada speakerPin y le asignamos el 9 que es el pin de salida de arduino que conectamos al positivo del buzzer. Luego declaramos una segunda variable tipo entero a la que hemos llamado numTones, que contiene el número de tonos que se va a reproducir.
A continuación creamos un array o matriz llamada tones, que contiene las frecuencia de los 12 tonos a reproducir.
El setup en esta ocasión se queda vacío
En el loop tenemos un bucle for que empieza con la variable i en 0, y la irá incrementando 1 con cada repetición y se repetirá mientras la variable i sea menor que la variable global numTones. Con cada iteración o repetición, se ejecutará la instrucción tone por el pin 9 que es la variable speakerPin, con un tono de frecuencia que se corresponda en la posición i dentro de array durante medio segundo por el delay 500. Luego con noTone, silenciaremos el buzzer. y vuelta a empezar.
La variable i de bucle for, determina la posición de un elemento dentro del array, cuando i es igual a 3 sonará el tono con frecuencia 311, luego cuando se repita el bucle, i valdrá 4 y el tono que se reproducirá es el 330 y así sucesivamente. Recuerda que dentro del array, el primer elemento ocupa la posición 0.
y para terminar te dejo el enlace de descarga, de un sketch para arduino que con este mismo circuito te permitirá oír un pequeño aunque reconocible fragmento de la "Marcha imperial" de Star Wars.
Pincha aquí para descargar el sketch
A continuación dejo el vídeo con el sonido de la marcha imperial, y además quito el cable para que se pueda comprobar que realmente es arduino el que hace sonar la marcha imperial.


