[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é

Répondre à footfetus Annuler la 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 Google Politique de confidentialité et Conditions d'utilisation appliquer.