buzzer-melodie.ino

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

Un buzzer piézo passif joue le début de "Au clair de la lune". tone() génère une fréquence précise sur une broche, la mélodie est stockée dans une table (note, durée) façon partition, facile à étendre.

Matériel requis

Une Arduino Uno R3 (ATmega328P, 5 V, 16 MHz) alimentée par USB ou jack 7-12 V. 1 buzzer passif (5 V) — un buzzer actif ne joue qu'un bip fixe, sans tone().

Câblage

Fil + du buzzer sur la broche 8, fil - sur GND. Sur AVR, tone() n'utilise pas les broches des timers occupées par Servo.

Fonctionnement

tone(broche, fréquence, durée) configure un timer pour produire le créneau audio. La table de notes est lue séquence par séquence avec un delay proportionnel.

Exécution

Dans l'Arduino IDE, choisissez la carte « Arduino Uno » et le port série correspondant, puis cliquez sur Téléverser. Ouvrez le moniteur série à 9600 bauds pour suivre les messages.

Variantes

Ajoutez un bouton pour déclencher la mélodie, ou jouez depuis un tableau stocké en EEPROM/flash ( PROGMEM ) pour économiser la 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
}

← Retour à la fiche