Innehållsförteckning:
- Steg 1: Saker vi behöver för detta projekt (krav)
- Steg 2: Förstå arbetsprincipen
- Steg 3: Schematisk
- Steg 4: Konvertera MP3 till WAV -fil med Audacity
- Steg 5: WAV till C-kod
- Steg 6: Skapa en slutlig fil och starta upp din Linux
Video: Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer: 6 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
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
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
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
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
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:
Talking Arduino - Spela en MP3 med Arduino utan någon modul - Spela upp MP3 -fil från Arduino med PCM: 6 steg
Talking Arduino | Spela en MP3 med Arduino utan någon modul | Spela MP3 -fil från Arduino Använda PCM: I denna instruktioner lär vi oss hur man spelar en mp3 -fil med arduino utan att använda någon ljudmodul, här kommer vi att använda PCM -bibliotek för Arduino som spelar 16 bitars PCM med 8 kHz -frekvens så låt oss göra detta
Spela låtar med Arduino Använda ADC till PWM på Flyback Transformer eller högtalare: 4 steg
Spela låtar med Arduino Använda ADC till PWM på Flyback Transformer eller högtalare: Hej killar, Det här är den andra delen av min andra instruerbara (det var mycket svårt), i grunden har jag i detta projekt använt ADC och TIMERS på min Arduino för att konvertera ljudsignal till en PWM -signal. Detta är mycket lättare än min tidigare instruktion
Spela låtar med stegmotor !!: 11 steg (med bilder)
Spela låtar med stegmotor !!: Det här projektet handlar om att designa ett enkelt dynamiskt gränssnitt som gör det möjligt att interagera med en stegmotor på två olika sätt. Det första gränssnittet styr stegmotorns riktning och hastighet genom användning av en enkelt GUI, vilket h
Hur får man bort låtar eller annat från en DVD som MP3: 4 steg
Så här får du bort låtar eller annat från en DVD som MP3: Om du har en DualDisc med låtar på den som du vill lyssna på på en iPod, eller en vanlig DVD med kanske ett kommentarspår som du vill lyssna på en Ipod, läs resten av detta för att göra det. Objekt som behövs-dator, händer, hjärna, DVD, iPod
Lägg till Beat -lampor till dina bärbara högtalare eller PC -högtalare : 5 steg
Lägg till Beat -lampor till dina bärbara högtalare eller PC -högtalare …: har du någonsin velat att dina små bärbara ljudhögtalare eller datorhögtalare skulle se ut som om du var i klubben ??? väl i denna instruerbara il visar dig hur du får dina talar via webbplatsen och ljudet av klubben