Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Frecuentemente, el buzzer pasivo se acompaña en una placa para facilitar su conexión, que incorpora un
transistor y resitencias necesarias para hacer funcionar el buzzer pasivo o altavoz sin más que conectarlo.
EL CIRCUITO.
La conexión es tan simple como conectar negativo a GND y positivo al pin 9. De todas maneras hay que
tener cuidado. Los piezos tienen polaridad y hay que asegurarse de conectarlos correctamente. Si los
conectas al revés, simplemente no sonará, y tendrias que dar la vuelta.
Además para este primer montaje, necesitamos usar un pin PWM (como el 9) porque es la alternancia entre
HIGH y LOW lo que produce el efecto piezoeléctrico (recordad que una señal PWM envía un tren de ondas
cuadradas de amplitud variable), por lo que lo más cómodo es usar un pin PWM en lugar de programar un
efecto equivalente en un pin normal.
EJEMPLOS DE CÓDIGO
Arduino dispone de dos funciones que nos permiten generar fácilmente señales eléctricas para convertir
en sonido, usando cualquiera de las salidas digitales disponibles.
Estas funciones son tone() y noTone() y, como su nombre indican, permiten generar o detener la señal
del tono en un pin.
tone(pin, frequencia, duracion); //activa un tono de frecuencia y duracion determinados en un pin dado
Pese a su sencillez, al usar las funciones para la generación de tone tenemos que asumir importantes
limitaciones.
La función Tone emplea el Timer 2, por lo que mientras este funcionando no podremos usar las
salidas PWM en los pines 3 y 11 en Arduino Nano y Uno (pines 9 y 10 en Arduino Mega).
No podemos usar la función tone() en dos pines de forma simultánea. Deberemos apagar el tono con
la funcion noTone() antes de poder usarlo en otro pin.
El siguiente código muestra el uso de estas funciones estas funciones en un ejemplo simple, en el que
empleamos el buzzer o altavoz conectado en el Pin9 para generar una función de 440Hz durante un segundo,
pararlo durante 500ms, y finalmente un tono de 523Hz durante 300ms, para repetir el programa tras una
pausa de 500ms.
void setup()
{
}
void loop()
{
//generar tono de 440Hz durante 1000 ms
tone(pinBuzzer, 440);
delay(1000);
const int tonos[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494};
const int countTonos = 10;
void setup()
{
}
void loop()
{
for (int iTono = 0; iTono < countTonos; iTono++)
{
tone(pinBuzzer, tonos[iTono]);
delay(1000);
}
noTone(pinBuzzer);
}
Ejemplo
La Cucaracha con el Arduino ~
Usando un pin como salida, si lo cambiamos muy rápidamente de ALTO a BAJO con un poco de retraso entre
cada cambio, podemos generar una onda cuadrada. Si desea generar otras formas de onda de audio, es
posible que desee comprobar la biblioteca Glade. También puede obtener un ruido blanco muy agradable con
un retraso aleatorio de microsegundos entre las transiciones ALTA y BAJA.
el código:
/*
* La Cucaracha with an Arduino and a PC speaker.
* timeUpDown = 1/(2 * toneFrequency) = period / 2
*/
byte beat = 0;
int MAXCOUNT = 32;
float TEMPO_SECONDS = 0.2;
byte statePin = LOW;
byte period = 0;
int i, timeUp;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(speakerOut, OUTPUT);
}
void loop() {
digitalWrite(speakerOut, LOW);
for (beat = 0; beat < MAXCOUNT; beat++) {
statePin = !statePin;
digitalWrite(ledPin, statePin);
timeUp = timeUpDown[song[beat]];
period = ((1000000 / timeUp) / 2) * TEMPO_SECONDS;
for (i = 0; i < period; i++) {
digitalWrite(speakerOut, HIGH);
delayMicroseconds(timeUp);
digitalWrite(speakerOut, LOW);
delayMicroseconds(timeUp);
}
/* Uncomment this if you want notes to be discrete */
/* delay(50); */
}
digitalWrite(speakerOut, LOW);
delay(1000);
}
Si quieres profundizar acerca de las notas musicales puedes visitar las siguientes Paginas web :
https://juegosrobotica.es/musica-con-arduino/#
http://www.incb.com.mx/index.php/articulos/78-microcontroladores-y-dsps/3337-practicas-y-
codigo-ejemplo-para-generar-sonidos-o-tonos-con-arduino-uno-mic042s
http://guimi.net/blogs/hiparco/arduino-libreria-tocamelodia-para-tocar-melodias-
predeterminadas/