Taula de continguts:

Reproduir cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback: 6 passos (amb imatges)
Reproduir cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback: 6 passos (amb imatges)

Vídeo: Reproduir cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback: 6 passos (amb imatges)

Vídeo: Reproduir cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback: 6 passos (amb imatges)
Vídeo: CS50 2013 - Week 9 2024, De novembre
Anonim
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback
Reprodueix cançons (MP3) amb Arduino mitjançant PWM a l'altaveu o al transformador Flyback

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

Esquema
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

Converteix fitxers MP3 a WAV mitjançant Audacity
Converteix fitxers MP3 a WAV mitjançant Audacity
Converteix fitxers MP3 a WAV mitjançant Audacity
Converteix fitxers MP3 a WAV mitjançant Audacity
Converteix fitxers MP3 a WAV mitjançant Audacity
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

WAV a C-Code
WAV a C-Code
WAV a C-Code
WAV a C-Code
WAV a C-Code
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

Feu un fitxer final i engegueu el vostre Linux
Feu un fitxer final i engegueu el vostre Linux
Feu un fitxer final i engegueu el vostre Linux
Feu un fitxer final i engegueu el vostre Linux
Feu un fitxer final i engegueu el vostre Linux
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: