Hoy conecté el buzzer que vino en mi kit de Arduino. No hubo que usar resistencia (en varios sitios la indicaban, pero así no me funcionaba), sólo conecté la pata más larga, positiva, al pin 11 y la más corta a tierra (GND).
La primera prueba que funcionó fue este código propuesto en el blog de Opiron.
void setup()
{
pinMode(11, OUTPUT); // El pin 11 es donde tenemos conectado el Buzzer
}void loop()
{
ring(); // con este ejemplo hacemos que el buzzer vaya tocando
// tonos de diferentes frecuencias alternativamente
}
void ring (){
analogWrite(11,20); //emite 1 sonido
delay(500); //espera medio segundo
analogWrite(11,120); //emite otro sonido
delay(500); //espera medio segundo
}
Después, continué buscando, y encontré este post de El Cajón de Arduino donde se indica qué tono es para cada nota:
// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador
int speakerPin = 11;// Definimos una variable con el número de tonos que va a reproducirint numTones = 10;int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};// mid C C# D D# E F F# G G# A// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen.void setup(){// Generamos un bucle que recorra nuestro vector. Este será el encargado de introducir una determinada frecuencia al zumbador cada vez, conforme hayamos declarado el vector de tonos.for (int i = 0; i < numTones; i++){tone(speakerPin, tones[i]);delay(500);}noTone(speakerPin);}void loop(){}
Después, jugué un poco con las distintas notas y los tiempos, para armar melodías.
Aquí, una muy mejorable versión del “Feliz cumpleaños”, dedicado a Claudio Segovia que cumplió años ayer:
// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador
int speakerPin = 11;
// Definimos una variable con el número de tonos que va a reproducir
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
// mid C C# D D# E F F# G G# A
// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen.
void setup()
{}
void loop()
{
delay(1000);
tone(speakerPin, 261);
delay(180);
noTone(speakerPin);
delay(20);
tone(speakerPin, 261);
delay(100);
tone(speakerPin, 294);
delay(600);
tone(speakerPin, 261);
delay(600);
tone(speakerPin, 349);
delay(600);
tone(speakerPin, 330);
delay(1200);
tone(speakerPin, 261);
delay(180);
noTone(speakerPin);
delay(20);
tone(speakerPin, 261);
delay(100);
tone(speakerPin, 294);
delay(600);
tone(speakerPin, 261);
delay(600);
tone(speakerPin, 392);
delay(600);
tone(speakerPin, 349);
delay(1200);
}