Tabla de contenido:

Digitalizar una canción con Arduino: 6 pasos
Digitalizar una canción con Arduino: 6 pasos

Video: Digitalizar una canción con Arduino: 6 pasos

Video: Digitalizar una canción con Arduino: 6 pasos
Video: Arduino desde cero en Español - Capítulo 6 - Servomotor (conexión, modelos, ajustes para uso óptimo) 2024, Noviembre
Anonim
Digitalizar una canción con arduino
Digitalizar una canción con arduino

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

Convertir la partitura musical en notas digitales: valores de retardo
Convertir 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

Convertir la partitura musical en notas digitales: valores de Hertz
Convertir 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

Diseño de circuito
Diseño de 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 !

¡¡¡Finalizado!!!
¡¡¡Finalizado!!!
¡¡¡Finalizado!!!
¡¡¡Finalizado!!!

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: