buzzer-melodie.ino

Arduino UNO R3 · Archivo : buzzer-melodie.ino · Lenguaje : Arduino · Uso : Jouer une mélodie sur un buzzer piézo avec les notes nommées

Un zumbador piezoeléctrico pasivo toca el inicio de "Au clair de la lune". tone() genera una frecuencia exacta en un pin; la melodía se guarda en una tabla (nota, duración) como una partitura, fácil de ampliar.

Hardware

Un Arduino Uno R3 (ATmega328P, 5 V, 16 MHz) alimentado por USB o jack de 7-12 V. 1 zumbador pasivo (5 V): un zumbador activo solo emite un pitido fijo, sin tone().

Cableado

Hilo + del zumbador al pin 8, hilo - a GND. En AVR, tone() no usa los pines con temporizadores ocupados por Servo.

Funcionamiento

tone(pin, frecuencia, duración) configura un temporizador para producir la señal cuadrada de audio. La tabla de notas se lee secuencia a secuencia con un delay proporcional.

Ejecución

En el Arduino IDE, elige la placa « Arduino Uno » y el puerto serie correspondiente y pulsa Subir. Abre el monitor serie a 9600 baudios para seguir los mensajes.

Variantes

Añade un botón para disparar la melodía, o reproduce desde una tabla guardada en EEPROM/flash (PROGMEM) para ahorrar RAM.

buzzer-melodie.ino

// Melodie sur buzzer passif avec la fonction tone() et une table de notes.
const int BUZZER = 8; // broche tone() sur les AVR (pas 9/10 si Servo actif)

// Frequences (Hz) des notes d'une octave.
const int NOTE_DO = 262, NOTE_RE = 294, NOTE_MI = 330, NOTE_FA = 349,
          NOTE_SOL = 392, NOTE_LA = 440, NOTE_SI = 494, NOTE_DO2 = 523;

// "Au clair de la lune" (debut) : note, duree en temps.
const int melody[][2] = {
  {NOTE_DO, 1}, {NOTE_DO, 1}, {NOTE_DO, 1}, {NOTE_RE, 2},
  {NOTE_MI, 1}, {NOTE_MI, 1}, {NOTE_RE, 2}, {NOTE_DO, 4},
  {NOTE_RE, 1}, {NOTE_RE, 1}, {NOTE_RE, 2}, {NOTE_MI, 1},
  {NOTE_SOL, 1}, {NOTE_MI, 1}, {NOTE_DO, 4},
};

void setup() {
  Serial.begin(9600);
  Serial.println(F("Lecture de la melodie..."));
}

void loop() {
  const int TEMPS = 220; // ms par unite de duree
  for (unsigned int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) {
    int note = melody[i][0];
    int duree = melody[i][1] * TEMPS;
    tone(BUZZER, note, duree * 9 / 10); // petite pause entre les notes
    delay(duree);
  }
  delay(3000); // pause avant repetition
}

← Volver a la ficha