Zumbador
Se trata de un par de elementos: un electroimán y una lámina de acero, cuando se hace pasar una corriente eléctrica por la bobina del electroimán produce un campo magnético que hace vibrar la lámina de acero produciendo un tono agudo.
Qué es un zumbador
En inglés se los conoce como “buzzer” ya que originalmente estaban construidos como una campana que vibraba pero no tenía badajo y generaban un sonido áspero.
En función de la tensión que reciba el zumbador producirá un tono diferente, por lo que si se utiliza el PWM para cambiar la tensión se pueden producir diferentes tonos. El las ondas de sonido no son más que vibraciones en la presión del aire, por ejemplo la nota musical “Fa” en la octava prima se corresponde con un tono de unos 349Hz, es decir, que el zumbador tendría que vibrar 349 veces por segundo para reproducir dicha nota.
1 2 |
//TRANSISTOR: Se trata de un dispositivo electrónico semiconductor con 3 “patas” denominadas base, colector y emisor. Su funcionamiento básico consiste en un circuito gobernado por la base. En otras palabras, la unión colector/emisor es un circuito abierto (no pasa la corriente) según la señal que esté recibiendo la base. Cuando se utiliza como amplificador permite que en la unión colector/emisor circule una corriente más elevada de la que circularía por la base. |
En nuestros productos, el buzzer, no se encuentra conectado directamente a la salida del Arduino. Lo que realmente hay es un transistor que amplifica esa señal, de esta forma se protege la salida del Arduino. A la hora de programar no hay diferencia entre tener o no el transistor. A continuación vemos el montaje que utilizamos habitualmente:
La señal denominada “control” puede provenir de un microcontrolador (como en el caso del Arduino), de un procesador (como la Raspberry Pi) o incluso se puede combinar con un botón y hacerlo sonar directamente.
El esquema eléctrico que representa este montaje es el siguiente:
Manejo del buzzer ó zumbador
En Arduino se puede utilizar como si fuese una salida analógica (PWM):
1 2 3 |
int numeroPIN=10; //PIN del zumbador byte valorPWM=150; analogWrite(numeroPIN, valorPWM); |
Pero es más habitual utilizar la función tone() con la que se pueden generar notas musicales basadas en la frecuencia de la nota correspondiente, por ejemplo la nota “La” tiene una frecuencia de 349Hz.
- tone(numeroPIN, Frecuencia)
- noTone(numeroPIN) para apagarlo.
Dicha función permite poner la frecuencia en hercios:
1 2 3 4 |
int frecuenciaLa = 349; tone(10, frecuenciaLa); delay(250); noTone(10); |
Opcionalmente se puede escribir un segundo parámetro que sería la duración del tono, quedando como tone(numeroPIN, Frecuencia, TiempoEnMilisegs).
El ejemplo anterior quedaría de la siguiente forma:
1 |
tone(10, 349, 250); // Equivalente al código anterior |
Tocar una melodía
Nos basaremos en el ejemplo de Arduino IDE situado en:
Archivo > Ejemplos > 02.Digital > toneMelody
Este ejemplo consta de 2 ficheros, uno correspondiente al código del programa y el otro llamado “pitches.h” (ver el código completo en GitHub). El siguiente código no precisa del .h para funcionar pues se trata de una versión simplificada:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
const byte BUZZpin = 8; // PIN donde está conectado el zumbador // Constantes usadas en la melodía #define NOTE_G3 196 #define NOTE_A3 220 #define NOTE_B3 247 #define NOTE_C4 262 // Notas de la melodía: int melody[] = { NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; // Duración de las notas (16=semicorchea, 8=corchea, 4=negra, etc.) int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; // NOTA: 'melody' y 'noteDurations'' han de tener la misma cantidad de elementos void setup() { // Iterar sobre las notas que tiene la melodía: for (int thisNote = 0; thisNote < 8; thisNote++) { // Para calcular la duración de la nota se usa un // segundo y se divide por el tipo de nota que es // Es decir: corchea=1000/8 , negra=1000/4 , etc. int noteDuration = 1000 / noteDurations[thisNote]; tone(BUZZpin, melody[thisNote], noteDuration); // Para diferenciar cada nota se establece un tiempo mínimo // el tiempo de la nota y un 30% extra es suficiente: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // Finalizar el tono: noTone(BUZZpin); } } void loop() { // No se repite la melodía, con un RESET se puede volver a escuchar } |
Copia el anterior código en Arduino IDE y conecta al PIN digital 8 el zumbador (o cambia la primera línea para que funcione si el tuyo está en otro pin). Para evitar que la melodía suene indefinidamente se ha situado dentro del setup(), es decir, que sólo sonará una vez. Para que vuelva a sonar la melodía bastará con pulsar el botón de RESET de la placa Arduino.