[Tuto] Jouer la reine des neiges avec un arduino

elsa

 

Comme tout papa qui aime faire plaisir à sa fille, je me suis pris un petit moment hier soir pour recréer la musique de la Reine des Neiges avec mon Arduino !

Bon en réalité c'est plus rigolo que ça, je me suis servi d'une commande obsolète de drone pour lui faire jouer la musique ^^

(Il faudra peut être monter le volume à la fin de la vidéo pour entendre la musique)

Matériel

Côté matos il vous faudra pas grand-chose :

  • Un Arduino
  • 2 fil
  • 1 piezo buzzer

 

sans-titre

 

Montage

Et côté montage, on va brancher un fil sur le GND, et un autre sur la pin 7 (pour l'exemple)

sans-titre

 

Logiciel

Et c'est là que je vais être un peu plus bavard ...

 

Tout d'abord nous devons définir la pin correspondante à notre Piezo Buzzer
(Ici nous avons fait les branchements sur la 7) :

int MusiquePin = 7;

Je vais créer 2 tableaux de données.
L'un contiendra les temps (en millisecondes) :

int PrincesseDesNeigesRytm[] = {
250,250,1500,250,250, 750,
250,250,750,250,750,250, 750,
250,250,1500,250,250,250, 250,
750, 250,250,750,750,500,500,750, 0
};

L'autre contiendra les notes à jouer :

int PrincesseDesNeigesNote[] = {
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_G4, NOTE_G4, NOTE_D5,
NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_B4,
NOTE_C5, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_G4, NOTE_G4,
NOTE_E5,NOTE_E5,NOTE_D5,NOTE_C5,NOTE_D5,NOTE_E5,NOTE_E5,
NOTE_F5,NOTE_E5,NOTE_C5,0
};

Aussi, il faudra  déclarer dans l'entête de votre fichier la valeur de ces notes

#define NOTE_G4  392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698

Ces 2 tableaux seront lus simultanément.

Chaque note correspondra à une durée...

Code Complet

#define NOTE_G4  392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698




//Pin du piezo Buzzer
int MusiquePin = 7;

//durée en milliseconde pour chaque note (dans l'ordre)
int PrincesseDesNeigesRytm[] = {
250,250,1500,250,250, 750,
250,250,750,250,750,
250, 750,
250,250,1500,250,250,250, 250, 750,
250,250,750,750,500,500,750,0
};

//Note à jouer (dans l'ordre)
int PrincesseDesNeigesNote[] = {
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_G4, NOTE_G4, NOTE_D5,
NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4,
NOTE_B4, NOTE_C5,
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_G4, NOTE_G4, NOTE_E5,NOTE_E5,NOTE_D5,
NOTE_C5,NOTE_D5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_E5,NOTE_C5
,0
};


void setup() {
}

void loop() {
int i = 0;
// Lecture du tableau de note ... lorsque nous lisons un 0 c'est que c'est la fin
while (PrincesseDesNeigesNote[i] != 0){
//On joue la note
tone(MusiquePin, PrincesseDesNeigesNote[i],PrincesseDesNeigesRytm[i]);
//On attend X millisecondes (durée de la note) avant de passer à la suivante
delay(PrincesseDesNeigesRytm[i]);
//On arrête la lecture de la note
noTone(MusiquePin);
//On marque une courte pose (entre chaque note, pour les différencer)
delay(50);
//On passe à la note suivante
++i;
}
}

 

Conclusion

 

Et voilà !!! 
Vous allez pouvoir vous aussi vous fabriquer votre petit Tuner Reine des Neiges !!!
Surtout ne jeter pas vos appareils électronique ! Il y a toujours pleins de composant vraiment intéressant à l’intérieur !

 

6 comments

  • bonjour,

    Je débute.

     

    Pourquoi on déclare le rythme deux fois


    [pastacode lang="c" manual="while%20(PrincesseDesNeigesNote%5Bi%5D%20!%3D%200)%7B%0A%09%20%20%09%2F%2FOn%20joue%20la%20note%0A%09%09tone(MusiquePin%2C%20PrincesseDesNeigesNote%5Bi%5D%2CPrincesseDesNeigesRytm%5Bi%5D)%3B%0A%09%20%20%20%20%20%20%09%2F%2FOn%20attend%20X%20millisecondes%20(dur%C3%A9e%20de%20la%20note)%20avant%20de%20passer%20%C3%A0%20la%20suivante%0A%09%09delay(PrincesseDesNeigesRytm%5Bi%5D)%3B%0A%09%20%20%09%2F%2FOn%20arr%C3%AAte%20la%20lecture%20de%20la%20note" message="" highlight="" provider="manual"/]

    • Coucou Paul,

      Excellente question … alors je ne sais pas pourquoi j’ai fait ça comme ça à l’époque (2016)
      Cependant on peut imaginer que c’était pour mieux espacer les notes ;)

      Dyrk

      • Bonjour,

        il faut que la sortie soit inactive pour que la fonction tone puisse changer le signal or une instruction met quelques ms à s’effectuer donc il faut bloquer avec un delay le déroulement du programme avant de pouvoir passer à la note suivante qui correspond à une nouvelle instruction tone.

         

        merci pour le partage du code!

  • SAlut je suis fan de la reine des neiges. merci beaucoup hhhhhhhhhh. Au fais pourrais vous faire une version rap des CP?

    MErci beaucoup, Jean EDward

  • Bonsoir

    merci, Éloïse est très contente de la musique que j’ai rajouté sur mon horloge Arduino.

    Bonne continuation.

    Benoit

  • Bonjour Monsieur,

    Merci infiniment, ma fille va être ravie de son nouveau réveil matin.

    Cordialement

    Un père soulagé

Laisser une réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.