Innehållsförteckning:

Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer: 6 steg (med bilder)
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer: 6 steg (med bilder)

Video: Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer: 6 steg (med bilder)

Video: Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer: 6 steg (med bilder)
Video: How to Play audio with Arduino 2024, November
Anonim
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer

Hej grabbar, Detta är min första instruerbara, jag hoppas att du kommer att gilla det !!

I grund och botten har jag i detta projekt använt den seriella kommunikationen mellan min Arduino och min bärbara dator för att överföra musikdata från min bärbara dator till Arduino. Och använder Arduino TIMERS för att spela upp data som en PWM -signal.

Jag ville nämna att detta projekt är inte för nybörjare !!!.

Egentligen var detta projekt ett av de längsta projekten, eftersom vi måste göra många saker för att det ska fungera.

UPPMÄRKSAMHET

Jag har gjort den andra delen av denna instruerbara, som är mycket enklare och kräver minimala problem för att fungera

Länk till andra delen (lättast).

Steg 1: Saker vi behöver för detta projekt (krav)

1. Arduino Board (vi kan använda vilken styrelse som helst (328, 2560) dvs Mega, Uno, Mini, etc men med specifika olika stift)

2. PC eller bärbar dator med Linux (jag har använt Fedora 29) Eller Live USB med Linux

3. Brödbräda eller Perfboard

4. Anslutning av ledningar

5. TC4420 (Mosfet -drivrutin eller sådant)

6. Ström Mosfet (N- eller P-kanal, vänligen koppla sedan därefter) (jag har använt N-kanal)

7. Högtalare eller Flyback Transformer (Ja du läste rätt !!)

8. Lämplig strömförsörjning (0-12V) (jag har använt min egen ATX-strömförsörjning)

9. Kylfläns (jag har räddat från min gamla dator)

10. PC med Windows och penn -enhet.

För att veta den detaljerade bearbetningen av varje komponent och detta projekt, läs nästa steg.

Jag har gjort den andra delen av denna instruerbara, som är mycket enklare och kräver minimala problem för att fungera. Länk till andra delen (enklaste).

Steg 2: Förstå arbetsprincipen

Ahhh !! den längsta delen av ett instruerbart, att läsa och skriva detta avsnitt är både tråkigt.

Först och främst måste vi få en översikt över hur den här saken faktiskt fungerar.

Vad vi gör här är att först konverterar vi vår MP3 -låt till en WAV -fil och den här filen till en C -huvudfil med hjälp av programvaran som finns i länken. Denna C-kod innehåller faktiskt 8-bitars (varför 8-bitars ?? läs vidare) datasampel som vi behöver spela med vår Arduino med en fast hastighet eller hastighet, vilket specificeras enligt vår samplingshastighet.

Teori om en ljudsignal.

För dem som inte vet vad samplingshastigheten eller bithastigheten är:-

Samplingsfrekvens definieras som antalet sampler, vi spelar på en sekund (vanligtvis mätt i Hz eller KHz).

För att veta mer i detalj: -Klicka här

Standardprovtagningshastigheter är 44100 Hz (bästa kvalitet), 32000 Hz, 22050 Hz, etc.

vilket innebär att 44100 prov används på en sekund för att generera en våg i enlighet därmed.

dvs varje prov måste spelas med ett fast intervall på 1/44100 = 22,67 uS.

Sedan kommer bitdjupet för en ljudsignal, som vanligtvis är ett mått på hur exakt ett ljud representeras i digitalt ljud. Ju högre bitdjup desto mer exakt är det digitala ljudet.

Men med Arduino eller någon annan Micro-controller med 16Mhz klocka kan vi bara använda oss upp till 8-bitars. Jag ska förklara varför.

Det finns en formel på sidan nr 102 i databladet för 328p:- Datablad

Jag ska inte gå in på detaljer, varför jag använder den här formeln.

frekvens för signal = Klocksignal / N x (1+TOP)

Klocksignal = 16Mhz (Arduino -kort)

N = förkalkning (1 är värde för vårt projekt)

TOP = värde 0 till 2^16 (för 16-bitars timerräknare) (255 = 2^8 (8-bit) för vårt projekt)

vi får värdet på signalens frekvens = 62,5 kHz

Det betyder att bärvågsfrekvensen är beroende av bitdjup.

Antag att om vi använder TOP-värde = 2^16 = 65536 (dvs 16 bitars djup)

då får vi värdet på signalens frekvens = 244 Hz (som vi inte kan använda)

OKK … Så mycket teori om hur ljudsignaler fungerar är tillräckligt, så tillbaka till projektet.

C-koden som genereras för en Song kan kopieras till Arduino och kan spelas, men vi är begränsade till upp till 3 sek ljuduppspelning med en samplingsfrekvens på 8000 Hz. Eftersom denna C -kod är en textfil och därmed inte komprimerad snarare dekomprimerad. Och det tar för mycket plats. (t.ex. C-kodfil med 43-sekunders ljud med 44, 1 KHz-sampel tar plats upp till 23 MB). Och vår Arduino Mega ger oss ett utrymme på cirka 256 Kb.

Så hur ska vi spela låtar med Arduino. Det är inte möjligt. Denna instruerbara är falsk. Oroa dig inte läsare, Det är därför vi måste använda någon form av kommunikation mellan Arduino vid sååå höga hastigheter (upp till 1 Mb/s) för att skicka ljuddata till Arduino.

Men hur mycket hastighet behöver vi exakt, för att göra detta ??

Svaret är 44000 byte per sekund vilket betyder hastigheter mer än 44000*8 = 325 000 bitar/s.

Vi behöver en annan kringutrustning med stort lagringsutrymme för att skicka denna data till vår Arduino. Och det kommer att vara vår PC med Linux (varför PC med Linux ??? läs vidare för att veta mer om det.)

Ahaa … Det betyder att vi kan använda seriell kommunikation … Men vänta … seriell är möjlig med bara hastigheter upp till 115200 bitar/s vilket betyder (325000/115200 = 3) att det är tre gånger långsammare än vad som krävs.

Nej, mina vänner, det är det inte. Vi använder hastighet eller baudhastighet på 500 000 bitar/s hastighet med en kabel upp till 20-30 cm max., Vilket är 1,5 gånger snabbare än vad som krävs.

Varför Linux, inte Windows ???

Så vi måste skicka prover med ett intervall (även specificerat ovan) på 1/44100 = 22,67 uS med vår dator.

Så hur kan vi programmera det för att göra det ??

Vi kan använda C ++ för att skicka en databyte via Serial med ett intervall med hjälp av någon slags sömnfunktion

som nanosleep, Chrono, etc, etc….

för (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

MEN INGEN DET FUNGERAR INTE PÅ WINDOWS fungerade inte heller på detta sätt på Linux (men jag hittade ett annat sätt som du kan se i min kod bifogad.)

Eftersom vi inte kan uppnå en sådan granularitet med hjälp av fönster. Du behöver Linux för att uppnå sådan granularitet.

Problem jag hittade även med Linux …

vi kan uppnå en sådan granularitet med Linux, men jag hittade ingen sådan funktion för att sova mitt program för 22uS.

Funktioner som nanosleep, Chrono nanosleep, etc, etc.. fungerar inte heller, eftersom de ger en sömn bara mer än 100 us. Men jag behövde exakt, exakt 22 uS. Jag har undersökt varenda sida på google och experimenterat med alla möjliga funktioner som finns i C/C ++ men ingenting fungerade för mig. Sedan kom jag på min egen funktion, som fungerade för mig som en riktig charm.

Och min kod ger nu en exakt, exakt sömn på 1uS eller högre !!!!

Så vi har täckt den svåra delen och resten är lätt …

Och vi vill generera en PWM -signal med Arduino med en specifik frekvens och även bärvågsfrekvens. (62,5 KHz (beräknat ovan) för god immunitet mot signal).

Så, vi måste använda så kallade TIMERS av Arduino för att skapa PWM. Förresten, jag kommer inte att gå in så mycket på det, för du hittar många självstudier om temat TIMERS, men om du inte hittar några, kommentera nedan så gör jag en.

Jag har använt en TC4420 Mosfet -drivrutin för att spara våra Arduino Pins, eftersom de inte kan leverera så mycket ström för att köra en MOSFET ibland.

Så, det var nästan teorin om detta projekt, vi kan se kretsschemat nu.

OBSERVERA OBSERVERA OBSERVERA

Egentligen blev detta projekt mycket svårt avsiktligt (jag ska berätta varför), det finns en annan metod som kräver noPC bara Arduino och högtalare i min nästa instruerbara. Länk är här.

*Huvudsyftet med detta projekt är att använda seriell kommunikation och att veta dess kraft och att lära sig hur vi kan programmera vår dator för att utföra uppgifter exakt med så fina intervall.*

Steg 3: Schematisk

Schematisk
Schematisk

Anslut alla komponenter som visas i schemat. Så du har här två alternativ:-

1. Anslut en högtalare (ansluten med 5V)

2. Anslut en Flyback -transformator (ansluten med 12V)

Jag har provat båda. Och båda fungerar ganska bra.

Varning:-

*Jag rekommenderar att du använder Flyback Transformer med försiktighet eftersom det kan vara farligt eftersom det producerar högspänning. Och jag ansvarar inte för skador.*

Steg 4: Konvertera MP3 till WAV -fil med Audacity

Konvertera MP3 till WAV -fil med Audacity
Konvertera MP3 till WAV -fil med Audacity
Konvertera MP3 till WAV -fil med Audacity
Konvertera MP3 till WAV -fil med Audacity
Konvertera MP3 till WAV -fil med Audacity
Konvertera MP3 till WAV -fil med Audacity

Så först och främst ladda ner programvaran

1. Fräckhet, sök och ladda ner från Google

2. För att konvertera WAV-fil till C-kod, ladda ner ett fönsterprogram som heter WAVToCode

Du kan lära dig hur du använder WAVToCode -programvara från den här länken och ladda ner den från den här länken.

Jag kommer också att ge detaljerade steg om hur du använder båda programvarorna.

Se bilderna som är länkade till detta instruerbara.

I det här steget konverterar vi MP3 till Wav. (Följ bilderna, projekthastigheten måste vara 44100Hz)

I nästa steg konverterar vi en wav -fil till C -kod.

Steg 5: WAV till C-kod

WAV till C-kod
WAV till C-kod
WAV till C-kod
WAV till C-kod
WAV till C-kod
WAV till C-kod

Följ bilderna.

Se de två sista bilderna, ändringarna måste vara exakt desamma, versaler ska vara versaler och små bokstäver bör vara små, eller så får du syntaxfel under kompilering.

(Du kan se att 1min 41s låt tog 23 MB utrymme.)

Ändra låtens namn och längd med namnet respektive längden på din låt.

Och spara C -kodfilen.

Gör detta för alla låtar du vill spela med Arduino

Steg 6: Skapa en slutlig fil och starta upp din Linux

Gör en slutlig fil och starta upp din Linux
Gör en slutlig fil och starta upp din Linux
Gör en slutlig fil och starta upp din Linux
Gör en slutlig fil och starta upp din Linux
Gör en slutlig fil och starta upp din Linux
Gör en slutlig fil och starta upp din Linux

Lägg till alla dina konverterade låtar i filen som finns i denna länk.

Och följ bilderna.

Ladda upp koden till Arduino som jag har bifogat.

Kom ihåg C-kodens filnamn. (Till exempel livsstil, dollar, wear), eftersom vi måste nämna exakt samma namn i vår kod med skiftlägeskänsliga.

I slutet elda upp din Fedora Live USB eller annat och installera gcc -kompilatorn och använd sedan kompileringsinstruktionerna från mappen för att kompilera programmet och köra det.

I slutändan kommer du att kunna lyssna på låtar från Speaker eller Flyback.

Tack för att du läser detta instruerbara och kommentera gärna om du gillar det.

OBS! Jag har gjort den andra delen av detta instruerbart, vilket är mycket enklare och kräver minimala problem för att fungera. Länk till andra delen (lättast)

Rekommenderad: