Tabla de contenido:
- Paso 1: Convierta la partitura musical en notas digitales: valores de retardo
- Paso 2: Convierta la partitura musical en notas digitales: valores de Hertz
- Paso 3: diseño del circuito
- Paso 4: Carga de código: procedimientos
- Paso 5: Carga de código: ¿Qué significa todo eso?
- Paso 6: ¡¡¡Terminado !
Video: Digitalizar una canción con Arduino: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Quería crear un proyecto que combinara dos de mis materias favoritas: ciencia y música. Pensé en todas las formas en que podría combinar estos dos dominios, y pensé que sería interesante hacer que un Arduino reprodujera Fur Elise mientras mostraba el tono de la nota en Hertz. ¡Ahora, comencemos a construir!
Necesitará un Arduino Uno o Mega, muchos cables de puente, un zumbador piezoeléctrico, una placa de pruebas, una pantalla LCD de 16 * 2 con todas las clavijas del limpiaparabrisas en su lugar y un potenciómetro de 10k (es posible que también los escuche como potenciómetros). Es mejor reunir todos estos suministros antes de comenzar la construcción.
Paso 1: Convierta la partitura musical en notas digitales: valores de retardo
Hay dos pasos para transcribir digitalmente una nota de la partitura a su equivalente digital. Primero, necesitaremos escribir el tiempo que dura la nota en milisegundos. Utilicé un gráfico que se encuentra en línea para esta tarea. En función de si una nota era media, negra, corchea, etc., transcribí la duración de la nota en milisegundos. Puede ver estos números en mi código como delay (); función y el número entre paréntesis será el valor de retraso en milisegundos que determinamos en este paso.
Paso 2: Convierta la partitura musical en notas digitales: valores de Hertz
Antes de comenzar con este paso, déjeme definir algunos términos técnicos. El "valor" de una nota se puede utilizar indistintamente con las palabras "tono", "valor" y "nota". Ahora, debes leer cada nota de la canción de la partitura. Luego, tendrá que traducir cada nota a Hertz usando una tabla de música a Hertz, que puede encontrar fácilmente en línea. Una cosa para recordar es que el C medio aparece como C4 en la tabla, y una octava más alta es C5, y así sucesivamente. Una vez que todas estas notas se transcriban a Hertz, colocará los valores en el tono de función (x, y, z); donde X es el número de pin o const int, una forma de definir variables que explicaré más adelante. Y será el valor de Hertz que acaba de transcribir y Z será la duración de la nota en milisegundos redondeada a la centésima más cercana. El retraso(); Los valores serán la duración de la nota. Ahora, diseñemos el circuito que puede reproducir la música.
Paso 3: diseño del circuito
Ahora que hemos traducido todas las notas a valores digitales que una computadora pueda entender, es hora de construir el circuito. Comience tomando una placa y colocando la pantalla LCD con el primer pin (GND) en la fila 14. Coloque el zumbador en cualquier lugar que desee y coloque un potenciómetro al lado. El objetivo es alinear todo para minimizar el desorden de los cables. Coloque el Arduino al lado de la placa de pruebas y conecte el pin de 5v al riel positivo de la placa de prueba y el pin de tierra al riel negativo. Ahora, estamos listos para conectar puentes entre Arduino y los componentes.
Ahora, hablemos de los pines de la pantalla LCD y cómo conectarlos.
GND significa tierra, este es el cable negativo en corriente continua. Conecte GND al riel negativo de la placa de pruebas.
VCC significa voltaje en el colector común, y aquí es donde conecta su fuente de alimentación de 5 voltios (la línea de alimentación positiva).
VO significa Contraste, conéctelo al pin central del potenciómetro. Conecte el pin izquierdo del potenciómetro al riel de alimentación positivo y el pin derecho al riel de alimentación de tierra.
RS significa Register Select, y Arduino lo usa para indicarle a la pantalla dónde almacenar los datos. Conecte este pin al pin 12 en el Arduino.
RW significa pin de lectura / escritura, que el Arduino usa para verificar si la pantalla muestra lo que ha programado para mostrar. Conecte este pin al riel negativo en la placa de pruebas.
E significa Habilitar, que le dice a la pantalla LCD qué píxeles habilitar (encender) o deshabilitar (apagar). Conecte este pin al pin 11 de Arduino.
D4, D5, D6 y D7 son pines de pantalla que controlan los caracteres y letras que se muestran. Conéctelos a los pines 5, 4, 3 y 2 de Arduino, respectivamente.
El pin A, a veces etiquetado como LED, es el ánodo LED para la luz de fondo. Conéctelo al riel de alimentación positivo con un cable o con una resistencia de 220 ohmios. La resistencia es mejor para un uso prolongado, ya que ahorra la pantalla LCD, pero si el dispositivo no se va a utilizar día y noche, no necesita la resistencia.
El pin K, a veces también (confusamente) etiquetado como LED, es el pin de tierra del LED. Conéctelo al riel de alimentación de tierra.
Paso 4: Carga de código: procedimientos
Conecte su Arduino al USB de su computadora. Sube el siguiente código usando el programador Arduino IDE.
#incluir
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
configuración vacía () {
// configura el número de columnas y filas de la pantalla LCD: lcd.begin (16, 2); // Imprime un mensaje en la pantalla LCD. lcd.print ("Paso de Hertz:!"); retraso (1000); void loop () {// reproducir e4 delay (600); // pausar 0,6 segundos en tono (10, 329,63, 300); // reproducir e en el zumbador en el pin 10, durar 0,3 segundos lcd.print (" 329.63 "); // mostrar un mensaje en la pantalla LCD" 329.63"
delay (350); // retraso de.35 segundos
lcd.clear (); // borrar la pantalla LCD y reiniciar para el siguiente mensaje // reproducir d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (350); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (350); lcd.clear (); // toca d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (350); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (350); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.66, 300); lcd.print ("293,66"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 900); lcd.print ("220.0"); retraso (1000); lcd.clear (); // line60 // helpsave // avrdude.failure.eeprom // reproducir el tono d3 (10, 146.83, 300); lcd.print ("146,63"); retraso (350); lcd.clear (); // toca el tono f3 (10, 174.61, 300); lcd.print ("174,61"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 300); lcd.print ("220"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 900); lcd.print ("246,94"); retraso (1000); lcd.clear ();
// jugar e3
tono (10, 164,81, 300); lcd.print ("164,81"); retraso (400); lcd.clear (); // toca g3 # tone (10, 207.65, 300); lcd.print ("207,65"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 900); lcd.print ("261,63"); retraso (1000); lcd.clear (); // reproducir e tono (10, 164.81, 300); lcd.print ("164,81"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.66, 300); lcd.print ("293,66"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 900); lcd.print ("220.0"); retraso (1000); lcd.clear (); // toca el tono d3 (10, 146.83, 300); lcd.print ("146,83"); retraso (400); lcd.clear (); // toca el tono f3 (10, 174.61, 300); // eeprom 20--6 síno, flash 65--0 no sí lcd.print ("174.61"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 300); lcd.print ("220.0"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 900); lcd.print ("246,94"); retraso (1000); lcd.clear (); // toca el tono f3 (10, 174.61, 300); lcd.print ("174,61"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 900); lcd.print ("220.0"); retraso (1000); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.66, 300); lcd.print ("293,66"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 900); lcd.print ("329,63"); retraso (1000); lcd.clear (); // toca el tono g3 (10, 196, 300); lcd.print ("196.0"); retraso (400); lcd.clear (); // toca el tono f4 (10, 349.23, 300); lcd.print ("349.23"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.23, 300); lcd.print ("329.23"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.63, 900); lcd.print ("293,63"); retraso (1000); lcd.clear (); // toca el tono e3 (10, 164.81, 300); lcd.print ("164,81"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.63, 300); lcd.print ("293,63"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 900); lcd.print ("261,63"); retraso (1000); lcd.clear (); // toca el tono d3 (10, 146.83, 300); lcd.print ("146,83"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.63, 300); lcd.print ("293,63"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 900); lcd.print ("246,94"); retraso (1000); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (350); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (350); lcd.clear (); // toca d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (350); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (350); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.66, 300); lcd.print ("293,66"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 900); lcd.print ("220.0"); retraso (1000); lcd.clear (); // toca el tono d3 (10, 146.83, 300); lcd.print ("146,83"); retraso (350); lcd.clear (); // toca el tono f3 (10, 174.61, 300); lcd.print ("174,61"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 300); lcd.print ("220.0"); retraso (400); // reproducir b3 lcd.clear (); tono (10, 246,94, 900); lcd.print ("246,94"); retraso (1000); lcd.clear (); // toca el tono e3 (10, 164.81, 300); lcd.print ("164,81"); retraso (400); lcd.clear (); // toca el tono g # 3 (10, 207.65, 300); lcd.print ("207,65"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 900); lcd.print ("261,63"); retraso (1000); retraso (300); lcd.clear (); // toca el tono e3 (10, 164.81, 300); lcd.print ("164,81"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca d4 # tone (10, 311.13, 300); lcd.print ("311.13"); retraso (400); lcd.clear (); // toca el tono e4 (10, 329.63, 300); lcd.print ("329,63"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca el tono d4 (10, 293.66, 300); lcd.print ("293,66"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 900); lcd.print ("220.0"); retraso (1000); lcd.clear (); // toca el tono d3 (10, 146.83, 300); lcd.print ("146,83"); retraso (400); lcd.clear (); // toca el tono f3 (10, 174.61, 300); lcd.print ("174,61"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 300); lcd.print ("220.0"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 900); lcd.print ("246,94"); retraso (1000); lcd.clear (); // toca el tono f3 (10, 174.61, 300); lcd.print ("174,61"); retraso (400); lcd.clear (); // toca el tono c4 (10, 261.63, 300); lcd.print ("261,63"); retraso (400); lcd.clear (); // toca el tono b3 (10, 246.94, 300); lcd.print ("246,94"); retraso (400); lcd.clear (); // toca un tono a3 (10, 220, 900); lcd.print ("220.0"); retraso (1000); lcd.clear (); }
Paso 5: Carga de código: ¿Qué significa todo eso?
Definamos algunas funciones en inglés, para que puedas entender el código.
tono (x, y, z); = reproducir un tono con un tono de y Hertz, a un zumbador en el pin x, durante z milisegundos.
lcd.print ("XYZ"); = imprimir un mensaje con los caracteres XYZ en la pantalla LCD. (por ejemplo, mostrar el tono de Hertz)
retraso (x); = pausa durante x milisegundos.
const int X = Y = establece una variable constante X en el pin Y, y usa X o Y para asignar tareas al dispositivo.
lcd.clear (); = borrar la pantalla LCD y reiniciar para una nueva pantalla
pinMode (X, SALIDA); = establecer el pin X para el modo de salida
Una vez que comprenda todas estas funciones, puede sustituir fácilmente las variables con los datos que recopila al traducir una canción, ¡y luego puede codificar su propia canción!
Paso 6: ¡¡¡Terminado !
O tiene un Arduino que reproduce Fur Elise y muestra los valores de las notas en Hertz, o ha creado un Arduino que reproduce la melodía de la canción que eligió y muestra el texto que desea mostrar. Gracias por visitar este tutorial, y espero que este proyecto sobre Arduino.
Recomendado:
Cómo digitalizar diapositivas y negativos de películas con una DSLR: 12 pasos (con imágenes)
Cómo digitalizar diapositivas y negativos de película con una DSLR: una configuración versátil y estable para digitalizar diapositivas y negativos con una DSLR o cualquier cámara con opción macro. Este instructivo es una actualización de Cómo digitalizar negativos de 35 mm (subido en julio de 2011) con varias mejoras para expandir su
¡Canción temática de PUBG + animación con Arduino !: 13 pasos (con imágenes)
¡Canción temática de PUBG + animación con Arduino !: ¡Hola y bienvenido a este divertido instructivo! Espero que todos estén bien y se mantengan saludables. Este pequeño pero sorprendente proyecto trata de reproducir la canción principal de PUBG e incluso crear algunas animaciones del juego usando arduino. Los componentes utilizados son muy e
Cómo tocar una canción en su Yamaha EZ-220: 5 pasos
Cómo reproducir una canción en su Yamaha EZ-220: Estos pasos le ayudarán a reproducir su canción utilizando el libro de canciones
Cómo codificar una canción usando partituras en Sonic Pi: 5 pasos
Cómo codificar una canción usando partituras en Sonic Pi: ¡Este instructivo describirá algunos pasos básicos y piezas de código para usar al codificar una canción en Sonic Pi usando partituras! Hay un millón de otras piezas de código para tratar de agregar sabor a su pieza terminada, así que asegúrese de jugar también con y
Grabar una canción en un iPad: 11 pasos (con imágenes)
Grabar una canción en un iPad: una amiga me preguntó recientemente cómo podía grabar algunas de sus canciones con solo una guitarra y un iPad. Le pregunté si tenía algún otro hardware de grabación, como un micrófono y una interfaz de grabación. Desafortunadamente, la respuesta fue no, y ella no