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

 

Partagez ce contenu

2 comments

  • bonjour,

    Je débute.

     

    Pourquoi on déclare le rythme deux fois

    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

    • 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

Laisser une réponse

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