Table des matières:

Numériser une chanson avec Arduino : 6 étapes
Numériser une chanson avec Arduino : 6 étapes

Vidéo: Numériser une chanson avec Arduino : 6 étapes

Vidéo: Numériser une chanson avec Arduino : 6 étapes
Vidéo: Produire un signal sonore avec Arduino 2024, Novembre
Anonim
Numériser une chanson avec Arduino
Numériser une chanson avec Arduino

Je voulais créer un projet qui combine deux de mes matières préférées: la science et la musique. J'ai pensé à toutes les façons dont je pourrais combiner ces deux domaines, et, j'ai pensé qu'il serait intéressant de faire jouer à un Arduino Fur Elise tout en affichant la hauteur de la note en Hertz. Maintenant, commençons à construire !

Vous aurez besoin d'un Arduino Uno ou Mega, de nombreux câbles de démarrage, d'un buzzer Piezo, d'une maquette, d'un écran LCD 16 * 2 avec toutes les broches d'essuie-glace en place et d'un potentiomètre 10k (vous pouvez également les entendre être appelés potmètres). Il est préférable de rassembler toutes ces fournitures avant de commencer la construction.

Étape 1: convertir la partition musicale en notes numériques: valeurs de délai

Convertir la partition musicale en notes numériques: valeurs de délai
Convertir la partition musicale en notes numériques: valeurs de délai

Il y a deux étapes pour transcrire numériquement une note de la partition dans son équivalent numérique. Tout d'abord, nous devrons écrire la durée de la note en millisecondes. J'ai utilisé un tableau trouvé en ligne pour cette tâche. Selon qu'une note était une blanche, une noire, une croche, etc., j'ai transcrit la longueur de la note en millisecondes. Vous pouvez voir ces nombres dans mon code comme le delay(); fonction et le nombre entre parenthèses sera la valeur de retard en millisecondes que nous avons déterminée à cette étape.

Étape 2: Convertir la partition musicale en notes numériques: valeurs Hertz

Convertir la partition musicale en notes numériques: valeurs Hertz
Convertir la partition musicale en notes numériques: valeurs Hertz

Avant de commencer cette étape, permettez-moi de définir quelques termes techniques. La "valeur" d'une note peut être utilisée de manière interchangeable avec les mots "hauteur", "valeur" et "note". Maintenant, vous devez lire chaque note de la chanson à partir de la partition. Vous devrez ensuite traduire chaque note en Hertz à l'aide d'une table de musique en Hertz, que vous pouvez facilement trouver en ligne. Une chose à retenir est que le do médian est répertorié comme C4 sur la table, et une octave plus haut est C5, et ainsi de suite. Une fois que ces notes sont toutes transcrites en Hertz, vous placerez les valeurs dans la fonction tone(x, y, z); où X est le numéro de broche ou const int, une façon de définir des variables que j'expliquerai plus tard. Y sera la valeur Hertz que vous venez de transcrire, et Z sera la durée de la note en millisecondes arrondie au centième le plus proche. Le délai(); les valeurs seront la durée de la note. Maintenant, concevons le circuit qui peut jouer la musique.

Étape 3: Conception de circuits

Conception de circuits
Conception de circuits

Maintenant que nous avons traduit toutes les notes en valeurs numériques qu'un ordinateur peut comprendre, il est temps de construire le circuit. Commencez par prendre une maquette et placez l'écran LCD avec la première broche (GND) de la rangée 14. Placez le buzzer où vous le souhaitez et placez un potentiomètre à côté. Le but est de tout aligner, pour minimiser l'encombrement des fils. Placez l'Arduino à côté de la planche à pain et connectez la broche 5v au rail positif de la planche à pain et la broche de terre au rail négatif. Maintenant, nous sommes prêts à connecter des cavaliers entre l'Arduino et les composants.

Parlons maintenant des broches de l'écran LCD et de la manière de les câbler.

GND signifie masse, c'est le fil négatif en courant continu. Câblez GND au rail négatif de la maquette.

VCC signifie Voltage at the Common Collector, et c'est là que vous connectez votre source d'alimentation de 5 volts (le rail d'alimentation positif).

VO signifie Contraste, connectez-le à la broche centrale du potentiomètre. Connectez la broche gauche du potentiomètre au rail d'alimentation positif et la broche droite au rail d'alimentation au sol.

RS signifie Register Select, et il est utilisé par l'Arduino pour indiquer à l'écran où stocker les données. Connectez cette broche à la broche 12 de l'Arduino.

RW signifie broche de lecture/écriture, que l'Arduino utilise pour vérifier si l'écran affiche ce que vous l'avez programmé pour afficher. Connectez cette broche au rail négatif de la planche à pain.

E signifie Activer, qui indique à l'écran LCD quels pixels activer (activer) ou désactiver (désactiver). Connectez cette broche à la broche Arduino 11.

D4, D5, D6 et D7 sont des broches d'affichage qui contrôlent les caractères et les lettres affichés. Connectez-les aux broches Arduino 5, 4, 3 et 2, respectivement.

La broche A, parfois étiquetée LED, est l'anode LED pour le rétroéclairage. Connectez-le au rail d'alimentation positif avec un fil ou avec une résistance de 220 ohms. La résistance est préférable pour une utilisation plus longue car elle épargne l'écran LCD, mais si l'appareil ne doit pas être utilisé jour et nuit, vous n'avez pas besoin de la résistance.

La broche K, parfois aussi étiquetée (de manière confuse) LED, est la broche de terre de la LED. Connectez-le au rail d'alimentation au sol.

Étape 4: Téléchargement de code: mode d'emploi

Branchez votre Arduino sur le port USB de votre ordinateur. Téléchargez le code suivant à l'aide du programmeur Arduino IDE.

#comprendre

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

// configure le nombre de colonnes et de lignes de l'écran LCD: lcd.begin(16, 2); // Imprime un message sur l'écran LCD. lcd.print("Hertz Pas: !"); retard(1000); void loop() { // lecture du délai e4 (600); // pause pendant 0,6 seconde tonalité (10, 329,63, 300); // lecture e sur le buzzer à la broche 10, dure 0,3 seconde lcd.print(" 329.63");//afficher un message sur l'écran LCD "329.63"

délai (350); // délai de 0,35 seconde

lcd.clear();//clear LCD et reset pour le prochain message // play d4# tone (10, 311.13, 300); lcd.print("311.13"); retard (350); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (350); lcd.clear(); // joue d4# ton (10, 311.13, 300); lcd.print("311.13"); retard (350); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (350); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,66, 300); lcd.print("293.66"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue un ton a3 (10, 220, 900); lcd.print("220.0"); retard(1000); lcd.clear();//line60//helpsave//avrdude.failure.eeprom // joue le ton d3 (10, 146,83, 300); lcd.print("146.63"); retard (350); lcd.clear(); //jouer le ton f3 (10, 174.61, 300); lcd.print("174.61"); retard (400); lcd.clear(); //joue un ton a3 (10, 220, 300); lcd.print("220"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 900); lcd.print("246.94"); retard(1000); lcd.clear();

// joue e3

ton (10, 164,81, 300); lcd.print("164.81"); retard (400); lcd.clear(); // joue g3# ton (10, 207,65, 300); lcd.print("207.65"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 900); lcd.print("261.63"); retard(1000); lcd.clear(); //joue un ton (10, 164.81, 300); lcd.print("164.81"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue d4# ton (10, 311.13, 300); lcd.print("311.13"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue d4# ton (10, 311.13, 300); lcd.print("311.13"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,66, 300); lcd.print("293.66"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue a3 ton (10, 220, 900); lcd.print("220.0"); retard(1000); lcd.clear(); // joue le ton d3 (10, 146,83, 300); lcd.print("146.83"); retard (400); lcd.clear(); // joue le ton f3 (10, 174,61, 300); //eeprom 20--6 oui non, flash 65--0 non lcd.print("174.61"); retard (400); lcd.clear(); // joue a3 tone (10, 220, 300); lcd.print("220.0"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 900); lcd.print("246.94"); retard(1000); lcd.clear(); // joue le ton f3 (10, 174,61, 300); lcd.print("174.61"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue a3 ton (10, 220, 900); lcd.print("220.0"); retard(1000); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,66, 300); lcd.print("293.66"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 900); lcd.print("329.63"); retard(1000); lcd.clear(); // joue le ton g3 (10, 196, 300); lcd.print("196.0"); retard (400); lcd.clear(); // joue le ton f4 (10, 349,23, 300); lcd.print("349.23"); retard (400); lcd.clear(); //joue le ton e4 (10, 329,23, 300); lcd.print("329.23"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,63, 900); lcd.print("293.63"); retard(1000); lcd.clear(); // joue le ton e3 (10, 164,81, 300); lcd.print("164.81"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,63, 300); lcd.print("293.63"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 900); lcd.print("261.63"); retard(1000); lcd.clear(); // joue le ton d3 (10, 146,83, 300); lcd.print("146.83"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,63, 300); lcd.print("293.63"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 900); lcd.print("246.94"); retard(1000); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue d4# ton (10, 311.13, 300); lcd.print("311.13"); retard (350); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (350); lcd.clear(); // joue d4# ton (10, 311.13, 300); lcd.print("311.13"); retard (350); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (350); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,66, 300); lcd.print("293.66"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue un ton a3 (10, 220, 900); lcd.print("220.0"); retard(1000); lcd.clear(); // joue le ton d3 (10, 146,83, 300); lcd.print("146.83"); retard (350); lcd.clear(); //jouer le ton f3 (10, 174,61, 300); lcd.print("174.61"); retard (400); lcd.clear(); //joue un ton a3 (10, 220, 300); lcd.print("220.0"); retard (400); // joue à b3 lcd.clear(); ton (10, 246.94, 900); lcd.print("246.94"); retard(1000); lcd.clear(); // joue le ton e3 (10, 164,81, 300); lcd.print("164.81"); retard (400); lcd.clear(); // joue le ton g#3 (10, 207,65, 300); lcd.print("207.65"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 900); lcd.print("261.63"); retard(1000); retard (300); lcd.clear(); //jouer le ton e3 (10, 164,81, 300); lcd.print("164.81"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue d4# ton (10, 311.13, 300); lcd.print("311.13"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue d4# ton (10, 311.13, 300); lcd.print("311.13"); retard (400); lcd.clear(); // joue le ton e4 (10, 329,63, 300); lcd.print("329.63"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue le ton d4 (10, 293,66, 300); lcd.print("293.66"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue un ton a3 (10, 220, 900); lcd.print("220.0"); retard(1000); lcd.clear(); // joue le ton d3 (10, 146,83, 300); lcd.print("146.83"); retard (400); lcd.clear(); // joue le ton f3 (10, 174,61, 300); lcd.print("174.61"); retard (400); lcd.clear(); // joue a3 tone (10, 220, 300); lcd.print("220.0"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 900); lcd.print("246.94"); retard(1000); lcd.clear(); // joue le ton f3 (10, 174.61, 300); lcd.print("174.61"); retard (400); lcd.clear(); // joue le ton c4 (10, 261.63, 300); lcd.print("261.63"); retard (400); lcd.clear(); // joue le ton b3 (10, 246.94, 300); lcd.print("246.94"); retard (400); lcd.clear(); // joue a3 ton (10, 220, 900); lcd.print("220.0"); retard(1000); lcd.clear(); }

Étape 5: Téléchargement de code: qu'est-ce que tout cela signifie ?

Définissons quelques fonctions en anglais, afin que vous puissiez comprendre le code.

ton(x, y, z); = jouer une tonalité avec une hauteur de y Hertz, à un buzzer à la broche x, pendant z millisecondes.

lcd.print("XYZ"); = imprimer un message avec les caractères XYZ sur l'écran LCD. (par exemple, afficher le pas de Hertz)

retard(x); = pause de x millisecondes.

const int X=Y = définissez une variable constante X sur la broche Y et utilisez X ou Y pour affecter des tâches à l'appareil.

lcd.clear(); = effacer l'écran LCD et réinitialiser pour un nouvel affichage

pinMode(X, SORTIE); = définir la broche X pour le mode de sortie

Une fois que vous avez compris toutes ces fonctions, vous pouvez facilement remplacer les variables par les données que vous collectez lors de la traduction d'une chanson, et vous pouvez ensuite coder votre propre chanson !

Étape 6: Terminé !

Fini!!!
Fini!!!
Fini!!!
Fini!!!

Soit vous avez un Arduino qui joue Fur Elise et affiche les valeurs des notes en Hertz, soit vous avez fait un Arduino qui joue la mélodie de la chanson que vous avez choisie et affiche le texte que vous souhaitez afficher. Merci d'avoir visité ce tutoriel, et je vous souhaite ce projet sur l'Arduino.

Conseillé: