Taula de continguts:
- Pas 1: coses que necessitem per a aquest projecte (requisits)
- Pas 2: entendre el principi de treball
- Pas 3: Esquema
- Pas 4: converteix fitxers MP3 a WAV mitjançant Audacity
- Pas 5: WAV a C-Code
- Pas 6: feu un fitxer final i engegueu el vostre Linux
Vídeo: Reproduir cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback: 6 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Hola nois, Aquest és el meu primer instructable, espero que us agradi !!
Bàsicament, en aquest projecte he utilitzat la comunicació en sèrie entre el meu Arduino i el meu ordinador portàtil per transmetre dades musicals del meu ordinador portàtil a l’Arduino. I utilitzant els TEMPORITZADORS Arduino per reproduir les dades com a senyal PWM.
Volia mencionar que aquest projecte no és per a principiants !!!.
En realitat, aquest projecte va ser un dels projectes més llargs, perquè hem de fer moltes coses perquè funcioni.
ATENCIÓ
He fet la segona part d’aquest instructiu, que és molt més fàcil i necessita problemes mínims per treballar
Enllaç a la segona part (la més fàcil).
Pas 1: coses que necessitem per a aquest projecte (requisits)
1. Taula Arduino (podem utilitzar qualsevol tauler (328, 2560), és a dir, Mega, Uno, Mini, etc, però amb pins diferents específics)
2. PC o portàtil amb Linux (he utilitzat Fedora 29) o Live USB amb Linux
3. Tauler de perfils o tauler de perfils
4. Connexió de cables
5. TC4420 (controlador Mosfet o tal cosa)
6. Potència Mosfet (canal N o P, si us plau, connecteu-lo en conseqüència) (he utilitzat el canal N)
7. Altaveu o transformador Flyback (Sí, ho heu llegit bé !!)
8. Font d'alimentació adequada (0-12V) (he utilitzat la meva pròpia font d'alimentació ATX)
9. Dissipador de calor (he recuperat del meu antic PC)
10. PC amb Windows i pen drive.
Per conèixer el funcionament detallat de cada component i d’aquest projecte, llegiu el pas següent.
He fet que la segona part sigui instructiva, que és molt més fàcil i necessita problemes mínims per treballar. Enllaç a la segona part (la més fàcil).
Pas 2: entendre el principi de treball
Ahhh !! la part més llarga d'una instrucció, llegir i escriure aquesta secció és alhora avorrida.
Primer de tot, hem d’obtenir una visió general de com funciona realment aquesta cosa.
el que estem fent aquí és que primer estem convertint la nostra cançó MP3 en un fitxer WAV i aquest fitxer en un fitxer de capçalera C mitjançant el programari que hi ha a l’enllaç. Aquest codi C en realitat conté mostres de dades de 8 bits (per què de 8 bits? Llegiu més endavant) que hem de reproduir amb el nostre Arduino a una velocitat o velocitat fixa, que s’especifica segons la nostra taxa de mostreig.
Teoria d'un senyal d'àudio.
Per a aquells que no saben quina és la taxa de mostreig o la taxa de bits: -
La freqüència de mostreig es defineix com el nombre de mostres que estem reproduint en un segon (normalment es mesura en Hz o KHz).
Per obtenir més informació al detall: -Feu clic aquí
Les taxes de mostreig estàndard són 44100 Hz (millor qualitat), 32000 Hz, 22050 Hz, etc.
el que significa que 44100 mostres s'utilitzen en un segon per generar una ona en conseqüència.
És a dir, cada mostra s’ha de reproduir a un interval fix d’1 / 44100 = 22,67 uS.
Després ve la profunditat de bits d’un senyal d’àudio, que sol ser una mesura de la precisió amb què es representa un so a l’àudio digital. Com més gran sigui la profunditat de bits, més precís serà el so digital.
Però amb Arduino o qualsevol altre microcontrolador amb rellotge de 16 MHz ens permet utilitzar-nos només fins a 8 bits. Ho explicaré per què.
Hi ha una fórmula a la pàgina núm. 102 al full de dades de 328p: - Full de dades
No explicaré els detalls, per què faig servir aquesta fórmula.
freqüència del senyal = senyal de rellotge / N x (1 + TOP)
Senyal de rellotge = 16 MHz (placa Arduino)
N = prescaler (1 és el valor del nostre projecte)
TOP = valor de 0 a 2 ^ 16 (per al comptador del temporitzador de 16 bits) (255 = 2 ^ 8 (8 bits) per al nostre projecte)
obtenim el valor de la freqüència del senyal = 62,5 kHz
Això significa que la freqüència d'ona portadora depèn de la profunditat de bits.
Suposem, si fem servir valor TOP = 2 ^ 16 = 65536 (és a dir, profunditat de bits de 16 bits)
llavors obtenim el valor de la freqüència del senyal = 244 Hz (que no podem utilitzar)
OKK … Per tant, aquesta teoria de com funcionen els senyals d'àudio és suficient, així que tornem al projecte.
El codi C generat per a una cançó es pot copiar a Arduino i es pot reproduir, però tenim una reproducció d'àudio limitada a 3 segons amb una freqüència de mostreig de 8000 Hz. Com que aquest codi C és un fitxer de text i, per tant, no es comprimeix sinó descomprimit. I requereix massa espai. (Per exemple, un fitxer de codi C amb àudio de 43 segons amb mostres de 44 i 1 KHz ocupa fins a 23 MB). I el nostre Arduino Mega ens proporciona un espai d’uns 256 Kb.
Com tocarem cançons amb Arduino. No és possible. Aquest instructable és fals. No us preocupeu, lectors, Per això, hem d’utilitzar algun tipus de comunicació entre Arduino a velocitats molt altes (fins a 1 Mb / s) per enviar dades d’àudio a Arduino.
Però, quina velocitat necessitem exactament per fer-ho ??
La resposta és de 44.000 bytes per segon, la qual cosa significa una velocitat superior a 44.000 * 8 = 325.000 bits / s.
Necessitem un altre perifèric amb gran emmagatzematge per enviar aquestes dades al nostre Arduino. I aquest serà el nostre PC amb Linux (per què un PC amb Linux ??? llegiu més per saber-ne més).
Ahaa … Això vol dir que podem utilitzar la comunicació en sèrie … Però espereu … la sèrie és possible a velocitats de fins a 115200 bits / s, el que significa (325000/115200 = 3) que és tres vegades més lent del que es requereix.
No, amics meus, no ho és. Utilitzarem la velocitat o velocitat en bauds de 500.000 bits / s de velocitat amb un cable de fins a 20-30 cm com a màxim, que és 1,5 vegades més ràpid del necessari.
Per què Linux, no Windows ???
Per tant, hem d’enviar mostres a un interval (també especificat més amunt) d’1 / 44100 = 22,67 uS amb el nostre PC.
Llavors, com podem programar-ho per fer-ho ??
Podem utilitzar C ++ per enviar un byte de dades mitjançant Serial a un interval mitjançant una mena de funció de son
com nanosleep, Chrono, etc, etc …
per a (int x = 0; x
sendData (x);
nanosleep (22000); // 22uS
}
PER NO NO, NO FUNCIONA A WINDOWS, tampoc no funciona d'aquesta manera a Linux (però he trobat una altra manera que podeu veure al meu codi adjunt).
Perquè no podem aconseguir aquesta granularitat mitjançant Windows. Necessiteu Linux per aconseguir aquesta granularitat.
Problemes que he trobat fins i tot amb Linux …
podem aconseguir tal granularitat utilitzant Linux, però no he trobat cap funció per dormir el meu programa durant 22uS.
Funcions com nanosleep, Chrono nanosleep, etc., tampoc funcionen, ja que proporcionen un son més de 100 uS. Però necessitava exactament, precisament, 22 EUA. He investigat totes les pàgines de Google i he experimentat amb totes les funcions possibles disponibles a C / C ++, però res no m’ha funcionat. Aleshores em vaig plantejar la meva pròpia funció, que funcionava per a mi com un veritable encant.
I el meu codi ara proporciona una son exacta i precisa de 1uS o superior !!!
Per tant, hem cobert la part difícil i la resta és fàcil …
I volem generar un senyal PWM mitjançant Arduino amb una freqüència específica també de freqüència d'ona portadora (62,5 KHz (com es calcula més amunt) per a una bona immunitat del senyal).
Per tant, hem d’utilitzar els anomenats TIMERS d’Arduino per crear PWM. Per cert, no hi aprofundiré en molts detalls, perquè trobareu molts tutorials sobre el tema de TEMPORITZADORS, però si no en trobeu cap, feu un comentari a continuació.
He utilitzat un controlador Mosfet TC4420 per desar els nostres pins Arduino, perquè de vegades no poden lliurar tanta intensitat per conduir un MOSFET.
Per tant, aquesta era la pràctica teoria d’aquest projecte, ara podem veure el diagrama del circuit.
ATENCIÓ ATENCIÓ ATENCIÓ
En realitat, aquest projecte es va fer molt difícil de manera intencionada (diré per què), hi ha un altre mètode que requereix no PC només Arduino i altaveu en el meu proper instrument.
* L’objectiu principal d’aquest projecte és utilitzar la comunicació en sèrie i conèixer la seva potència i aprendre com podem programar el nostre PC per fer tasques amb precisió a intervals tan fins. *
Pas 3: Esquema
Connecteu tots els components tal com es mostra a l'esquema. Teniu aquí dues opcions: -
1. Connecteu un altaveu (connectat amb 5V)
2. Connecteu un transformador Flyback (connectat amb 12V)
He provat les dues coses. I tots dos funcionen força bé.
Exempció de responsabilitat: -
* Recomano utilitzar Flyback Transformer amb precaució, ja que pot ser perillós perquè produeix altes tensions. I no seré responsable de cap dany. *
Pas 4: converteix fitxers MP3 a WAV mitjançant Audacity
Per tant, primer de tot, descarregueu el programari
1. Audacity, cerca i descàrrega de Google
2. Per convertir el fitxer WAV a C-Code, descarregueu una aplicació de finestra anomenada WAVToCode
Podeu aprendre a utilitzar el programari WAVToCode des d’aquest enllaç i descarregar-lo des d’aquest enllaç.
També donaré passos detallats sobre com utilitzar els dos programes.
Consulteu les fotos enllaçades amb aquest instructiu.
En aquest pas, convertirem MP3 a Wav. (Seguiu les fotos, la velocitat del projecte ha de ser 44100Hz)
Al següent pas, convertirem un fitxer wav a codi C.
Pas 5: WAV a C-Code
Segueix les fotos.
Vegeu les dues darreres imatges, els canvis han de ser precisament els mateixos, les majúscules han de ser majúscules i les minúscules han de ser minúscules, o bé obtindreu un error de sintaxi durant la compilació.
(Podeu veure que la cançó de 1min 41s ocupava 23mb d’espai).
Canvieu el nom i la durada de la cançó amb el nom i la durada de la vostra cançó respectivament.
I deseu el fitxer C Code.
Feu-ho a totes les cançons que vulgueu reproduir amb Arduino
Pas 6: feu un fitxer final i engegueu el vostre Linux
Afegiu totes les cançons convertides al fitxer proporcionat en aquest enllaç.
I segueix les imatges.
Pengeu el codi a Arduino, que he adjuntat.
Recordeu els noms dels fitxers del codi C. (per exemple, estil de vida, dòlar, armadura), perquè hem d’esmentar els mateixos noms exactes al nostre codi amb majúscules i minúscules.
Al final, engegueu el vostre Fedora Live USB o un altre i instal·leu el compilador gcc i, a continuació, utilitzeu les instruccions de compilació de la carpeta per compilar el programa i executar-lo.
Al final, podreu escoltar cançons de Speaker o Flyback.
Gràcies per llegir aquest instructiu i comenta si t'agrada.
ATENCIÓ He fet que la segona part d’aquest instructiu sigui molt més fàcil i necessiti problemes mínims per treballar. Enllaç a la segona part (la més fàcil)
Recomanat:
Mood Speaker: un altaveu potent per reproduir la música Mood en funció de la temperatura ambiental: 9 passos
Mood Speaker: un altaveu potent per reproduir música d'ànim en funció de la temperatura ambiental: hey! Per al meu projecte escolar a MCT Howest Kortrijk, vaig crear un Mood Speaker que és un dispositiu d'altaveus Bluetooth intel·ligent amb diferents sensors, un LCD i WS2812b ledstrip inclòs. L’altaveu reprodueix música de fons segons la temperatura, però pot
Reprodueix cançons amb Arduino mitjançant ADC a PWM a Flyback Transformer o Speaker: 4 passos
Reproduir cançons amb Arduino Utilitzant ADC per PWM en Flyback Transformer o Speaker: Hola nois, aquesta és la segona part del meu altre instructable (que era molt difícil). Bàsicament, en aquest projecte he utilitzat ADC i TIMERS del meu Arduino per converteix el senyal d'àudio en un senyal PWM. Això és molt més fàcil que la meva anterior Instrucció
Reproduir cançons amb el pas a pas !!: 11 passos (amb imatges)
Reproduir cançons amb el pas a pas !!: aquest projecte tracta de dissenyar una interfície dinàmica senzilla que permeti interactuar amb un motor pas a pas de dues maneres diferents. La primera interfície controlarà la direcció i la velocitat del motor pas a pas mitjançant l’ús d’un GUI simple, que h
Controlar Arduino mitjançant un telèfon intel·ligent mitjançant USB amb l'aplicació Blynk: 7 passos (amb imatges)
Controlar Arduino mitjançant un telèfon intel·ligent mitjançant USB amb l’aplicació Blynk: en aquest tutorial, aprendrem a utilitzar l’aplicació Blynk i Arduino per controlar la llum, la combinació es farà a través del port sèrie USB. la solució més senzilla que controla remotament el vostre Arduino o c
Transformador Flyback de 20 000 000: 5 passos
Transformador Flyback de 20.000 v: es tracta d’un transformador Flyback connectat a un condensador de càrrega ràpida i 2 circuits de flaix de la càmera. No ho intenteu si no teniu experiència prèvia en alta tensió o si teniu un cor esquivat