buzzer-melodie.ino

Arduino Pro Mini · 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 Pro Mini (ATmega328P, existe en 5 V/16 MHz et 3,3 V/8 MHz) reliée à un convertisseur USB-série (FTDI) ou un programmeur ICSP. 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

Choisissez « Arduino Pro Mini » dans l'IDE (5 V/16 MHz ou 3,3 V/8 MHz selon votre modèle), le processeur ATmega328P, le bon port, puis Téléverser. Le convertisseur doit être câblé DTR-DTR, RX-TX, TX-RX, VCC-VCC, GND-GND.

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