Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Hola chicos, Este es mi primer instructivo, ¡espero que les guste!
Básicamente, en este proyecto he utilizado la comunicación en serie entre mi Arduino y mi computadora portátil, para transmitir datos de música desde mi computadora portátil al Arduino. Y usando los TEMPORIZADORES de Arduino para reproducir los datos como una señal PWM.
Quería mencionar que este proyecto no es para principiantes.
En realidad, este proyecto fue uno de los más largos, porque tenemos que hacer muchas cosas para que funcione.
ATENCIÓN
Hice la segunda parte de este instructivo, que es mucho más fácil y necesita un mínimo de problemas para funcionar
Enlace a la segunda parte (la más sencilla).
Paso 1: Cosas que necesitamos para este proyecto (requisitos)
1. Placa Arduino (podemos usar cualquier placa (328, 2560), es decir, Mega, Uno, Mini, etc. pero con pines diferentes específicos)
2. PC o portátil con Linux (he usado Fedora 29) o Live USB con Linux
3. Tablero de pruebas o tablero perfilado
4. Conexión de cables
5. TC4420 (controlador Mosfet o algo así)
6. Power Mosfet (canal N o P, conecte luego en consecuencia) (he usado el canal N)
7. Altavoz o transformador Flyback (¡Sí, lo leíste bien!)
8. Fuente de alimentación adecuada (0-12 V) (he usado mi propia fuente de alimentación ATX)
9. Disipador de calor (lo he recuperado de mi PC anterior)
10. PC con Windows y pendrive.
Para conocer el funcionamiento detallado de cada componente y este proyecto, lea el siguiente paso.
Hice la segunda parte de este instructivo, que es mucho más fácil y necesita un mínimo de problemas para funcionar. Enlace a la segunda parte (la más fácil).
Paso 2: comprensión del principio de funcionamiento
¡¡Ahhh !! La parte más larga de un instructivo, leer y escribir esta sección es aburrido.
En primer lugar, necesitamos obtener una descripción general de cómo funciona realmente esto.
Lo que estamos haciendo aquí es que, primero, estamos convirtiendo nuestra canción MP3 en un archivo WAV y este archivo en un archivo de encabezado C utilizando el software, que se encuentra en el enlace. Este código C en realidad contiene muestras de datos de 8 bits (¿por qué 8 bits? Lea más) que necesitamos reproducir usando nuestro Arduino a una velocidad o velocidad fija, que se especifica de acuerdo con nuestra Velocidad de muestreo.
Teoría de una señal de audio.
Para aquellos que no saben cuál es la tasa de muestreo o la tasa de bits: -
La frecuencia de muestreo se define como la cantidad de muestras que estamos reproduciendo en un segundo (generalmente se mide en Hz o KHz).
Para saber más en detalle: -Haga clic aquí
Las frecuencias de muestreo estándar son 44100 Hz (mejor calidad), 32000 Hz, 22050 Hz, etc.
lo que significa que se utilizan 44100 muestras en un segundo para generar una onda en consecuencia.
es decir, se requiere que cada muestra se reproduzca en un intervalo fijo de 1/44100 = 22,67 uS.
Luego viene la profundidad de bits de una señal de audio, que suele ser una medida de la precisión con la que se representa un sonido en el audio digital. Cuanto mayor sea la profundidad de bits, más preciso será el sonido digital.
Pero con Arduino o cualquier otro Microcontrolador con reloj de 16Mhz nos permite usarnos solo hasta 8 bits. Te lo explicaré por qué.
Hay una fórmula en la página no 102 en la hoja de datos de 328p: - Hoja de datos
No entraré en detalles, por qué estoy usando esta fórmula.
frecuencia de la señal = señal de reloj / N x (1 + TOP)
Señal de reloj = 16 Mhz (placa Arduino)
N = preescalador (1 es el valor para nuestro proyecto)
TOP = valor 0 a 2 ^ 16 (para contador de temporizador de 16 bits) (255 = 2 ^ 8 (8 bits) para nuestro proyecto)
obtenemos el valor de la frecuencia de Signal = 62.5 kHz
Esto significa que la frecuencia de la onda portadora depende de la profundidad de bits.
Supongamos, si usamos el valor TOP = 2 ^ 16 = 65536 (es decir, profundidad de bits de 16 bits)
luego obtenemos el valor de la frecuencia de Signal = 244 Hz (que no podemos usar)
OKK… Así que esta teoría de cómo funcionan las señales de audio es suficiente, así que volvamos al proyecto.
El código C generado para una canción se puede copiar en Arduino y se puede reproducir, pero estamos limitados a una reproducción de audio de hasta 3 segundos con una frecuencia de muestreo de 8000 Hz. Porque este código C es un archivo de texto y, por lo tanto, no está comprimido, sino descomprimido. Y ocupa demasiado espacio. (Por ejemplo, el archivo de código C con audio de 43 segundos con 44 muestras de 1 KHz ocupa un espacio de hasta 23 MB) Y nuestro Arduino Mega nos da un espacio de aproximadamente 256 Kb.
Entonces, ¿cómo tocaremos canciones usando Arduino? No es posible. Este Instructable es falso. No se preocupen lectores, Es por eso que necesitamos usar algún tipo de comunicación entre Arduino a velocidades muy altas (hasta 1 Mb / s) para enviar datos de audio a Arduino.
Pero, ¿cuánta velocidad necesitamos exactamente para hacer esto?
La respuesta es 44000 bytes por segundo, lo que significa velocidades superiores a 44000 * 8 = 325, 000 Bits / s.
Necesitamos otro periférico con gran capacidad de almacenamiento para enviar estos datos a nuestro Arduino. Y esa será nuestra PC con Linux (¿por qué PC con Linux? Por favor, lea más para saber más al respecto).
Ahaa … Eso significa que podemos usar la comunicación en serie … Pero espere … la serie es posible a velocidades de hasta 115200 Bits / s, lo que significa (325000/115200 = 3) que es tres veces más lento de lo requerido.
No, amigos míos, no lo es. Usaremos una velocidad o una velocidad en baudios de 500, 000 Bits / s con un cable de hasta 20-30 cm como máximo, que es 1,5 veces más rápido de lo necesario.
¿Por qué Linux, no Windows?
Entonces, necesitamos enviar muestras en un intervalo (también especificado arriba) de 1/44100 = 22.67 uS con nuestra PC.
Entonces, ¿cómo podemos programarlo para que lo haga?
Podemos usar C ++ para enviar un byte de datos a través de Serial en un intervalo usando algún tipo de función de suspensión
como nanosueño, Chrono, etc, etc….
para (int x = 0; x
sendData (x);
nanosueño (22000); // 22uS
}
PERO NO, NO FUNCIONÓ EN WINDOWS tampoco funcionó de esta manera en Linux (pero encontré otra forma que puede ver en mi Código adjunto).
Porque no podemos lograr tal granularidad usando Windows. Necesita Linux para lograr tal granularidad.
Problemas que encontré incluso con Linux …
podemos lograr tal granularidad usando Linux, pero no encontré tal función para dormir mi programa por 22uS.
Funciones como nanosueño, crono nanosueño, etc, etc. tampoco funcionan, ya que proporcionan un sueño sólo superior a 100 uS. Pero necesitaba exactamente, exactamente 22 uS. Investigué todas las páginas de Google y experimenté con todas las funciones posibles que están disponibles en C / C ++, pero nada funcionó para mí. Luego se me ocurrió mi propia función, que funcionó para mí como un verdadero encanto.
¡Y mi código ahora proporciona un sueño exacto y preciso de 1uS o más
Así que hemos cubierto la parte difícil y el resto es fácil …
Y queremos generar una señal PWM usando Arduino con una frecuencia específica y también una frecuencia de onda portadora (62.5KHz (como se calculó anteriormente) para una buena inmunidad de la señal).
Entonces, necesitamos usar los llamados TIMERS de Arduino para crear PWM. Por cierto, no entraré en muchos detalles sobre eso, porque encontrarás muchos tutoriales sobre el tema de TIMERS, pero si no encuentras alguno, comenta a continuación, haré uno.
He usado un controlador TC4420 Mosfet para guardar nuestros pines Arduino, porque a veces no pueden entregar tanta corriente para conducir un MOSFET.
Entonces, esa era casi la teoría de este proyecto, ahora podemos ver el diagrama del circuito.
ATENCIÓN ATENCIÓN ATENCIÓN
En realidad, este proyecto se hizo mucho más difícil intencionalmente (diré por qué), hay otro método que no requiere una PC, solo Arduino y un altavoz en mi siguiente intructable. El enlace está aquí.
* El objetivo principal de este proyecto es utilizar la comunicación en serie y conocer su potencia y aprender cómo podemos programar nuestra PC para realizar tareas con precisión en intervalos tan precisos. *
Paso 3: esquema
Conecte todos los componentes como se muestra en el esquema. Entonces tienes aquí dos opciones: -
1. Conecte un altavoz (conectado con 5V)
2. Conecte un transformador Flyback (conectado con 12V)
He probado ambos. Y ambos funcionan bastante bien.
Descargo de responsabilidad:-
* Recomiendo usar Flyback Transformer con precaución ya que puede ser peligroso porque produce altos voltajes. Y no seré responsable de ningún daño. *
Paso 4: Convierta archivos MP3 a WAV usando Audacity
Entonces, en primer lugar, descargue el software
1. Audacity, busque y descargue de Google
2. Para convertir el archivo WAV a C-Code, descargue una aplicación de ventana, denominada WAVToCode
Puede aprender a usar el software WAVToCode desde este enlace y descargarlo de este enlace.
También daré pasos detallados sobre cómo usar ambos software.
Consulte las fotos vinculadas con este instructivo.
En este paso, convertiremos MP3 a Wav. (Siga las fotos, la velocidad del proyecto debe ser 44100Hz)
En el siguiente paso, convertiremos un archivo wav a código C.
Paso 5: WAV a C-Code
Siga las fotos.
Vea las dos últimas imágenes, los cambios deben ser exactamente iguales, las letras mayúsculas deben ser mayúsculas y las minúsculas deben ser menores, o obtendrá un error de sintaxis durante la compilación.
(Puede ver que la canción de 1 minuto 41 tomó 23 MB de espacio).
Cambie el nombre y la duración de la canción con el nombre y la duración de su canción respectivamente.
Y guarde el archivo de código C.
Haga esto con todas las canciones que desee reproducir con Arduino
Paso 6: haga un archivo final y encienda su Linux
Agregue todas sus canciones convertidas en el archivo proporcionado en este enlace.
Y sigue las imágenes.
Sube el código a Arduino, que he adjuntado.
Recuerde los nombres de los archivos del Código C (por ejemplo, lifestyle, dollar, weare), porque tenemos que mencionar exactamente los mismos nombres en nuestro código con distinción entre mayúsculas y minúsculas.
Al final, encienda su Fedora Live USB u otro e instale el compilador gcc y luego, usando las instrucciones de compilación de la carpeta, compile el programa y ejecútelo.
Al final, podrás escuchar canciones de Speaker o Flyback.
Gracias por leer este instructivo y por favor comente si le gusta.
ATENCIÓN He hecho la segunda parte de este instructivo, que es mucho más fácil y necesita un mínimo de problemas para funcionar. Enlace a la segunda parte (la más sencilla)