- Matériel requis:
- Comprendre la fonction Tone () d'Arduino:
- Le fichier d'en-tête pitches.h :
- Jouer des notes de musique sur Arduino:
- Schéma et matériel:
- Explication du programme Arduino:
- Fonctionnement de ce circuit Arduino Melody Player:
Arduino est un excellent moyen de simplifier et d'accélérer vos projets de microcontrôleurs, grâce à sa communauté de développeurs qui ont rendu presque tout simple. Il y a beaucoup de projets Arduino ici pour que vous puissiez essayer et vous amuser. Certains de vos projets peuvent nécessiter des actions sonores pour notifier quelque chose ou simplement pour impressionner les spectateurs. Et si je vous disais que presque toutes les chansons à thème qui pourraient être jouées sur un piano peuvent être imitées sur votre Arduino à l'aide d'un programme simple et d'un haut-parleur Piezo bon marché?
Dans ce didacticiel, nous allons apprendre à quel point il est simple et facile de jouer de la mélodie sur un buzzer ou un haut-parleur piezo à l'aide de la fonction Arduino tone (). À la fin de ce tutoriel, vous pourrez jouer des sons célèbres de Pirates des Caraïbes, Crazy Frog, Super Mario et Titanic. Vous apprendrez également à jouer n'importe quel morceau de musique de piano avec Arduino. Vérifiez la vidéo à la fin.
Matériel requis:
- Arduino (toute version - UNO est utilisé ici)
- Piezo Speaker / Buzzer ou tout autre haut-parleur 8ohm.
- Planche à pain
- Connexion des fils
- Boutons poussoir
- Résistance 1k (facultatif)
Comprendre la fonction Tone () d'Arduino:
Avant de pouvoir comprendre comment fonctionne un tone () , nous devons savoir comment fonctionne un buzzer piézo. Nous avons peut-être appris l'existence des cristaux Piezo dans notre école, ce n'est rien d'autre qu'un cristal qui convertit les vibrations mécaniques en électricité ou vice versa. On applique ici un courant variable (fréquence) pour lequel le cristal vibre produisant ainsi un son. Par conséquent, pour que le buzzer piézoélectrique fasse du bruit, nous devons faire vibrer le cristal électrique piézoélectrique, la hauteur et le ton du bruit dépendent de la vitesse à laquelle le cristal vibre. Par conséquent, la tonalité et la hauteur peuvent être contrôlées en faisant varier la fréquence du courant.
D'accord, alors comment obtenir une fréquence variable d'Arduino ? C'est là qu'intervient la fonction tone (). La fonction tone () peut générer une fréquence particulière sur une broche spécifique. La durée du temps peut également être mentionnée si nécessaire. La syntaxe de tone () est
Syntaxe tone (pin, frequency) tone (pin, fréquence, durée) Paramètres pin: la broche sur laquelle générer la fréquence de tonalité: la fréquence de la tonalité en hertz - unsigned int duration: la durée de la tonalité en millisecondes (optionnel) - non signé long
Les valeurs de pin peuvent être n'importe laquelle de vos broches numériques. J'ai utilisé la broche numéro 8 ici. La fréquence qui peut être générée dépend de la taille de la minuterie de votre carte Arduino. Pour UNO et la plupart des autres cartes courantes, la fréquence minimale pouvant être produite est de 31 Hz et la fréquence maximale pouvant être produite est de 65 535 Hz. Cependant, nous, les humains, ne pouvons entendre que des fréquences comprises entre 2000 Hz et 5000 Hz.
Le fichier d'en-tête pitches.h :
Maintenant, nous savons comment produire du bruit en utilisant la fonction arduino tone () . Mais comment savoir quel type de ton sera généré pour chaque fréquence?
Arduino nous a donné une table de notes qui assimile chaque fréquence à un type de note de musique spécifique. Cette table de notes a été initialement écrite par Brett Hagman, sur le travail duquel la commande tone () était basée. Nous utiliserons cette table de notes pour jouer nos thèmes. Si vous êtes familier avec les partitions, vous devriez être en mesure de donner un sens à ce tableau, pour d'autres comme moi, ce n'est qu'un autre bloc de code.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52_define NOTE_G1 49 #define NOTE_GS1 52_define NOTE_G1 49 #define NOTE_GS1 52_define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 REMARQUE #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 NOTE_define NOTE_A2 110 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_Define NOTE_D5 587 #define NOTE_Define NOTE_FS5 740 #define #define NOTE_G5 784 831 NOTE_GS5 #define #define NOTE_A5 880 932 NOTE_AS5 #define #define NOTE_B5 988 NOTE_C6 1047 #define #define NOTE_CS6 1109 1175 NOTE_D6 #define #define NOTE_DS6 1245 1319 NOTE_E6 #define #define NOTE_F6 1397 1480 NOTE_FS6 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_Define NOTE_DS7 2489 #define NOTE_Define NOTE_DS7 2489 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Le code ci-dessus est donné dans le fichier d'en-tête pitches.h dans ce fichier zip , il vous suffit de télécharger et d'inclure ce fichier dans notre code Arduino comme indiqué à la fin de ce tutoriel ou d'utiliser le code donné dans le fichier zip.
Jouer des notes de musique sur Arduino:
Pour jouer une mélodie décente en utilisant Arduino, nous devons savoir ce qui constitue ces mélodies. Les trois principaux facteurs requis pour jouer un thème sont
- Valeur de la note
- Durée de la note
- Tempo
Nous avons le fichier d'en-tête pitches.h pour jouer n'importe quelle valeur de note, maintenant nous devrions découvrir sa durée de note spécifique pour la jouer. Le tempo n'est rien d'autre que la vitesse à laquelle la mélodie doit être jouée. Une fois que vous connaissez la valeur de la note et la durée de la note, vous pouvez les utiliser avec le tone () comme
tone (pinName, valeur de la note, durée de la note);
Pour les sons joués dans ce didacticiel, je vous ai donné la valeur de la note et la durée de la note dans le fichier d'en-tête «themes.h» à l'aide duquel vous pouvez les lire dans vos projets. Mais si vous avez un ton spécifique dans votre mien et que vous voulez le jouer dans votre projet, lisez la suite…. Sinon, sautez ce sujet et passez au suivant.
Pour jouer un son spécifique, vous devez obtenir la partition de cette musique particulière et convertir la partition en croquis Arduino en lisant la valeur de la note et la durée de la note. Si vous êtes un étudiant en musique, ce serait un morceau de gâteau pour vous, sinon passer du temps et vous casser la tête comme je l'ai fait. Mais à la fin de la journée, lorsque votre ton joue sur le buzzer piézo, vous trouverez que votre effort en vaut la peine.
Une fois que vous avez la valeur et la durée de la note, chargez-les dans le programme à l'intérieur du fichier d'en-tête "themes.h" comme indiqué ci-dessous
// ############## ** Chanson thématique "HE IS A PIRATE" de Pirates des Caraïbes ** ############# // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_F4E, NOTE_A3, NOTE_C4, NOTE_F4E NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_D4, NOTE_G4, NOTE_A4, NOTE_A4_A4, NOTE_G4, NOTE_A4, NOTE_A4_A4, 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############# //
Le bloc de code ci-dessus montre la valeur et la durée de la note du thème «Il est un pirate» du film Pirates des Caraïbes. Vous pouvez ajouter votre thème de la même manière.
Schéma et matériel:
Le schéma de ce projet de projet Arduino Tone Generator est illustré dans la figure ci-dessous:
La connexion est assez simple, nous avons un haut-parleur piézo qui est connecté à la broche 8 et à la masse de l'Arduino via une résistance 1K. Cette résistance 1k est une résistance de limitation de courant, qui est utilisée pour maintenir le courant dans les limites de sécurité. Nous avons également quatre commutateurs pour sélectionner la mélodie souhaitée. Une extrémité du commutateur est connectée à la masse et l'autre extrémité est connectée aux broches 2, 3, 4 et 5 respectivement. Les commutateurs auront des résistances de rappel activées en interne à l'aide du logiciel. Étant donné que le circuit est assez simple, il peut être connecté à l'aide d'une planche à pain comme indiqué ci-dessous:
Explication du programme Arduino:
Une fois que vous avez compris le concept, le programme Arduino est assez simple. Le code complet est donné à la fin du tutoriel. Si vous n'êtes pas familiarisé avec l'ajout de fichiers d'en-tête, vous pouvez télécharger le code sous forme de fichier ZIP à partir d'ici et le télécharger directement sur votre Arduino.
Les deux ci-dessus sont les fichiers d'en-tête qui doivent être ajoutés. «Pitches.h» est utilisé pour assimiler chaque note de musique à une fréquence particulière et «themes.h» contient la valeur de note et la durée de note des quatre tonalités.
#include "pitches.h" #include "themes.h"
Une fonction est créée pour jouer chaque son si nécessaire. Ici, lorsque la fonction Play_Pirates () est appelée, la tonalité «Il est un pirate» sera jouée. Cette fonction se compose de la fonction de tonalité qui produit la fréquence à la broche 8. Le noTone (8) est appelé pour arrêter la musique une fois qu'elle est jouée. Si vous souhaitez jouer votre propre son, remplacez Pirates_note et Pirates_duration par les nouvelles valeurs de note et de durée que vous avez enregistrées dans la valeur "themes.h"
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // convertir la durée en tonalité de retard (8, Pirates_note, noteDuration); int pauseB BetweenNotes = noteDuration * 1.05; // Ici 1.05 est le tempo, augmentez pour le jouer plus lentement delay (pauseB BetweenNotes); noTone (8); }}
Les broches 2, 3, 4 et 5 sont utilisées pour sélectionner le son particulier à jouer. Ces broches sont maintenues hautes par défaut à l'aide des résistances de rappel internes en utilisant la ligne de code ci-dessus. Lorsque le bouton est enfoncé, il est abaissé au sol.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Le bloc de code ci-dessous est utilisé pour lire la chanson lorsqu'un bouton est enfoncé. Il lit la valeur numérique de chaque bouton et lorsqu'il devient bas (zéro), il suppose que le bouton est enfoncé et joue la tonalité respective en appelant la fonction requise.
if (digitalRead (2) == 0) {Serial.println ("Sélectionné -> 'Il est un pirate'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Sélectionné -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Sélectionné -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Sélectionné -> 'Il est un pirate'"); Play_Pirates (); }
Fonctionnement de ce circuit Arduino Melody Player:
Une fois que votre code et votre matériel sont prêts, gravez simplement le programme dans votre Arduino et vous devriez pouvoir jouer la tonalité en appuyant simplement sur les boutons. Si vous rencontrez des problèmes, jetez un œil à votre moniteur série pour le débogage ou utilisez la section des commentaires pour signaler le problème et je serai heureux de vous aider.
Le fonctionnement complet du projet est montré dans la vidéo ci-dessous. J'espère que vous avez apprécié le projet et que vous l'utiliserez dans certains de vos projets ou que vous créerez un nouveau ton pour votre projet. Si oui, n'hésitez pas à partager votre travail dans la section commentaires.