Taula de continguts:
- Pas 1: converteix la partitura musical en notes digitals: valors de retard
- Pas 2: converteix la partitura musical en notes digitals: valors Hertz
- Pas 3: Disseny de circuits
- Pas 4: Càrrega de codi: procediments
- Pas 5: càrrega de codi: què significa tot això?
- Pas 6: acabat !
Vídeo: Digitalitzeu una cançó amb Arduino: 6 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
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
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
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
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 !
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:
Digitalitzeu el vostre sistema d'alta fidelitat: 6 passos (amb imatges)
Digitalitzeu el vostre sistema d’alta fidelitat: en aquest instructiu m’agradaria mostrar-vos com vaig digitalitzar el meu sistema d’alta fidelitat analògic i així vaig realitzar ràdio web, accés a la col·lecció de música emmagatzemada al NAS, etc. La implementació es basa principalment en un Raspberry Pi, un barret Hifiberry i un toc
Cançó temàtica PUBG + Animació amb Arduino !: 13 passos (amb imatges)
Cançó temàtica PUBG + Animació amb Arduino !: Hola i benvinguts a aquest divertit instructiu. Espero que tots estigueu bé i us mantingueu sans. Aquest petit però sorprenent projecte tracta de reproduir la cançó del tema PUBG i fins i tot de crear algunes animacions de jocs amb arduino. Els components utilitzats són molt
Com codificar una cançó amb partitures a Sonic Pi: 5 passos
Com codificar una cançó amb partitures a Sonic Pi: aquest instructiu descriu alguns passos bàsics i fragments de codi que cal utilitzar per codificar una cançó a Sonic Pi mitjançant partitures. Hi ha un milió de trossos de codi més per intentar afegir sabor a la peça acabada, així que assegureu-vos de jugar també a
Enregistrament d'una cançó en un iPad: 11 passos (amb imatges)
Enregistrament d’una cançó en un iPad: recentment, una amiga meva em va preguntar com podia gravar algunes de les seves cançons només amb una guitarra i un iPad. Li vaig preguntar si tenia algun altre maquinari de gravació, com ara un micròfon i una interfície de gravació. Malauradament, la resposta va ser negativa i ella no
Rellotge despertador LED Sunrise amb alarma de cançó personalitzable: 7 passos (amb imatges)
Rellotge despertador LED Sunrise amb alarma de cançó personalitzable: la meva motivació Aquest hivern, la meva xicota tenia molts problemes per despertar-se al matí i semblava patir un trastorn afectiu estacional. Fins i tot noto el molt més difícil que es desperta a l’hivern, ja que el sol no ha vingut