Taula de continguts:

Digitalitzeu una cançó amb Arduino: 6 passos
Digitalitzeu una cançó amb Arduino: 6 passos

Vídeo: Digitalitzeu una cançó amb Arduino: 6 passos

Vídeo: Digitalitzeu una cançó amb Arduino: 6 passos
Vídeo: Девочка — шашлычок ► 1 Прохождение Silent Hill Origins (PS2) 2024, Desembre
Anonim
Digitalitzeu una cançó amb Arduino
Digitalitzeu una cançó amb Arduino

Volia crear un projecte que combinés dues de les meves assignatures preferides: ciència i música. Vaig pensar en totes les maneres en què podia combinar aquests dos dominis i vaig pensar que seria interessant fer que un Arduino interpretés Fur Elise mentre es mostrava l’altura de la nota en Hertz. Ara, comencem a construir!

Necessitareu un Arduino Uno o Mega, molts cables jumper, un brunzidor piezoelèctric, una placa de paret, una pantalla LCD de 16 * 2 amb tots els passadors del netejador al seu lloc i un potenciòmetre de 10 k (també podeu escoltar-los com a potòmetres)). És millor reunir tots aquests subministraments abans de començar la construcció.

Pas 1: converteix la partitura musical en notes digitals: valors de retard

Converteix la partitura musical en notes digitals: valors de retard
Converteix la partitura musical en notes digitals: valors de retard

Hi ha dos passos per transcriure digitalment una nota de la partitura al seu equivalent digital. En primer lloc, haurem d’escriure el temps que dura la nota en mil·lisegons. He utilitzat un gràfic que es troba en línia per a aquesta tasca. Basant-me en si una nota era una nota mitjana, quarta, vuitena, etc., vaig transcriure la longitud de la nota en mil·lisegons. Podeu veure aquests números al meu codi com el delay (); funció i el número entre parèntesis serà el valor de retard en mil·lisegons que hem determinat en aquest pas.

Pas 2: converteix la partitura musical en notes digitals: valors Hertz

Converteix la partitura musical en notes digitals: valors Hertz
Converteix la partitura musical en notes digitals: valors Hertz

Abans de començar aquest pas, permeteu-me definir alguns termes tècnics. El "valor" d'una nota es pot utilitzar indistintament amb les paraules "to", "valor" i "nota". Ara, heu de llegir cada nota de la cançó de la partitura. Després, haureu de traduir cada nota a Hertz mitjançant una taula de música a Hertz, que podeu trobar fàcilment en línia. Una cosa que cal recordar és que la C mitjana apareix com a C4 a la taula i que una octava més alta és C5, etc. Un cop aquestes notes es transcriguin a Hertz, col·locareu els valors al to de funció (x, y, z); on X és el número de pin o const int, una forma de definir variables que explicaré més endavant. Y serà el valor Hertz que acabeu de transcriure i Z serà la durada de la nota en mil·lisegons arrodonida a la centèsima més propera. El retard(); els valors seran la durada de la nota. Ara, dissenyem el circuit que pot reproduir la música.

Pas 3: Disseny de circuits

Disseny de circuits
Disseny de circuits

Ara que hem traduït totes les notes a valors digitals que un ordinador pot entendre, és hora de construir el circuit. Comenceu agafant una tauleta de suport i col·locant la pantalla LCD amb el primer passador (GND) a la fila 14. Col·loqueu el brunzidor a qualsevol lloc que vulgueu i col·loqueu un potenciòmetre al costat. L’objectiu és alinear-ho tot, per minimitzar l’embrutament dels cables. Col·loqueu l'Arduino al costat de la placa de connexió i connecteu el pin de 5 V al carril positiu de la taula de panells i el pas de terra al carril negatiu. Ara estem preparats per connectar ponts entre l'Arduino i els components.

Ara, parlem dels pins de la pantalla LCD i de com connectar-los.

GND significa terra, aquest és el fil negatiu en corrent continu. Connecteu GND al carril negatiu de la placa.

VCC significa Voltage at the Common Collector, i aquí és on connecteu la font d’alimentació de 5 volts (el rail d’alimentació positiu).

VO significa Contrast, connecteu-lo al pin central del potenciòmetre. Connecteu el pin esquerre del potenciòmetre al rail de potència positiu i el pin dret al rail de terra.

RS significa Register Select, i això l’utilitza Arduino per indicar a la pantalla on emmagatzemar les dades. Connecteu aquest pin al pin 12 de l'Arduino.

RW significa pin de lectura / escriptura, que l'Arduino utilitza per comprovar si la pantalla mostra el que heu programat per mostrar. Connecteu aquest passador al carril negatiu de la placa.

E significa Enable, que indica a la pantalla LCD quins píxels cal activar (activar) o desactivar (apagar). Connecteu aquest pin al pin 11 d'Arduino.

D4, D5, D6 i D7 són pins de visualització que controlen els caràcters i les lletres que es mostren. Connecteu-los als pins Arduino 5, 4, 3 i 2, respectivament.

El pin A, de vegades etiquetat amb LED, és l’ànode LED per a la llum de fons. Connecteu-lo al carril d'alimentació positiva amb un cable o amb una resistència de 220 ohms. La resistència és millor per a un ús més llarg ja que estalvia la pantalla LCD, però si el dispositiu no s’utilitzarà dia i nit, no necessiteu la resistència.

El pin K, de vegades també (confús) amb l'etiqueta LED, és el pin de terra LED. Connecteu-lo al rail de terra.

Pas 4: Càrrega de codi: procediments

Connecteu el vostre Arduino a l’USB de l’ordinador. Pengeu el següent codi amb el programador IDE Arduino.

#incloure

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

configuració nul·la () {

// configureu el nombre de columnes i files de la pantalla LCD: lcd.begin (16, 2); // Imprimiu un missatge a la pantalla LCD. lcd.print ("Hertz Pitch:!"); retard (1000); void loop () {// retard de reproducció e4 (600); // pausa durant 0,6 segons de to (10, 329,63, 300); // reproduïu e al brunzidor al pin 10, duren 3,3 segons lcd.print (" 329,63 "); // mostra un missatge a la pantalla LCD" 329,63"

delay (350); // delay per 0,35 segons

lcd.clear (); // esborra la pantalla LCD i restableix el missatge següent // reprodueix el to d4 # (10, 311.13, 300); lcd.print ("311.13"); retard (350); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (350); lcd.clear (); // toca d4 # tone (10, 311,13, 300); lcd.print ("311.13"); retard (350); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (350); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca el to d4 (10, 293,66, 300); lcd.print ("293,66"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 900); lcd.print ("220.0"); retard (1000); lcd.clear (); // line60 // helpsave // avrdude.failure.eeprom // reprodueix el to d3 (10, 146,83, 300); lcd.print ("146,63"); retard (350); lcd.clear (); // toca to f3 (10, 174,61, 300); lcd.print ("174,61"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 300); lcd.print ("220"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 900); lcd.print ("246,94"); retard (1000); lcd.clear ();

// jugar a e3

to (10, 164,81, 300); lcd.print ("164,81"); retard (400); lcd.clear (); // toca g3 # tone (10, 207,65, 300); lcd.print ("207,65"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 900); lcd.print ("261,63"); retard (1000); lcd.clear (); // toca el to (10, 164,81, 300); lcd.print ("164,81"); retard (400); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca d4 # tone (10, 311,13, 300); lcd.print ("311.13"); retard (400); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca d4 # tone (10, 311,13, 300); lcd.print ("311.13"); retard (400); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca el to d4 (10, 293,66, 300); lcd.print ("293,66"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 900); lcd.print ("220.0"); retard (1000); lcd.clear (); // toca el to d3 (10, 146,83, 300); lcd.print ("146,83"); retard (400); lcd.clear (); // toca to f3 (10, 174,61, 300); // eeprom 20-6 sí, flash 65-0 noyes lcd.print ("174.61"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 300); lcd.print ("220.0"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 900); lcd.print ("246,94"); retard (1000); lcd.clear (); // toca to f3 (10, 174,61, 300); lcd.print ("174,61"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 900); lcd.print ("220.0"); retard (1000); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca el to d4 (10, 293,66, 300); lcd.print ("293,66"); retard (400); lcd.clear (); // toca el to e4 (10, 329,63, 900); lcd.print ("329,63"); retard (1000); lcd.clear (); // reproduir el to g3 (10, 196, 300); lcd.print ("196.0"); retard (400); lcd.clear (); // toca el to f4 (10, 349,23, 300); lcd.print ("349,23"); retard (400); lcd.clear (); // toca el to e4 (10, 329,23, 300); lcd.print ("329,23"); retard (400); lcd.clear (); // toca el to d4 (10, 293,63, 900); lcd.print ("293,63"); retard (1000); lcd.clear (); // toca el to e3 (10, 164,81, 300); lcd.print ("164,81"); retard (400); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca el to d4 (10, 293,63, 300); lcd.print ("293,63"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 900); lcd.print ("261,63"); retard (1000); lcd.clear (); // toca el to d3 (10, 146,83, 300); lcd.print ("146,83"); retard (400); lcd.clear (); // toca el to d4 (10, 293,63, 300); lcd.print ("293,63"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 900); lcd.print ("246,94"); retard (1000); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca d4 # tone (10, 311,13, 300); lcd.print ("311.13"); retard (350); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (350); lcd.clear (); // toca d4 # tone (10, 311,13, 300); lcd.print ("311.13"); retard (350); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (350); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca el to d4 (10, 293,66, 300); lcd.print ("293,66"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 900); lcd.print ("220.0"); retard (1000); lcd.clear (); // toca el to d3 (10, 146,83, 300); lcd.print ("146,83"); retard (350); lcd.clear (); // toca to f3 (10, 174,61, 300); lcd.print ("174,61"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 300); lcd.print ("220.0"); retard (400); // reproduir b3 lcd.clear (); to (10, 246,94, 900); lcd.print ("246,94"); retard (1000); lcd.clear (); // toca el to e3 (10, 164,81, 300); lcd.print ("164,81"); retard (400); lcd.clear (); // toca el to g # 3 (10, 207,65, 300); lcd.print ("207,65"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 900); lcd.print ("261,63"); retard (1000); retard (300); lcd.clear (); // toca el to e3 (10, 164,81, 300); lcd.print ("164,81"); retard (400); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca d4 # tone (10, 311,13, 300); lcd.print ("311.13"); retard (400); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca d4 # tone (10, 311,13, 300); lcd.print ("311.13"); retard (400); lcd.clear (); // reproduir el to e4 (10, 329,63, 300); lcd.print ("329,63"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca el to d4 (10, 293,66, 300); lcd.print ("293,66"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 900); lcd.print ("220.0"); retard (1000); lcd.clear (); // toca el to d3 (10, 146,83, 300); lcd.print ("146,83"); retard (400); lcd.clear (); // toca to f3 (10, 174,61, 300); lcd.print ("174,61"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 300); lcd.print ("220.0"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 900); lcd.print ("246,94"); retard (1000); lcd.clear (); // toca to f3 (10, 174,61, 300); lcd.print ("174,61"); retard (400); lcd.clear (); // toca el to c4 (10, 261,63, 300); lcd.print ("261,63"); retard (400); lcd.clear (); // toca el to b3 (10, 246,94, 300); lcd.print ("246,94"); retard (400); lcd.clear (); // toca un to a3 (10, 220, 900); lcd.print ("220.0"); retard (1000); lcd.clear (); }

Pas 5: càrrega de codi: què significa tot això?

Definim algunes funcions en anglès perquè pugueu entendre el codi.

to (x, y, z); = toca un to amb un to de y Hertz, a un timbre al pin x, durant z mil·lisegons.

lcd.print ("XYZ"); = imprimeix un missatge amb els caràcters XYZ a la pantalla LCD. (per exemple, mostreu el to Hertz)

retard (x); = pausa durant x mil·lisegons.

const int X = Y = estableix una variable constant X al pin Y i utilitza X o Y per assignar tasques al dispositiu.

lcd.clear (); = neteja la pantalla LCD i restableix la pantalla

pinMode (X, OUTPUT); = estableix el pin X per al mode de sortida

Un cop hàgiu entès totes aquestes funcions, podeu substituir fàcilment les variables per les dades que recopileu en traduir una cançó i, a continuació, podeu codificar la vostra pròpia cançó.

Pas 6: acabat !

Acabat !!!
Acabat !!!
Acabat !!!
Acabat !!!

O bé teniu un Arduino que reprodueix Fur Elise i mostra els valors de les notes en Hertz, o bé heu creat un Arduino que reprodueix la melodia de la cançó que heu triat i mostra el text que voleu mostrar. Gràcies per visitar aquest tutorial i us espero aquest projecte a l'Arduino.

Recomanat: