Sadržaj:
- Korak 1: Stvari koje su nam potrebne za ovaj projekt (zahtjevi)
- Korak 2: Razumijevanje principa rada
- Korak 3: Shematski prikaz
- Korak 4: Pretvorite MP3 u WAV datoteku pomoću programa Audacity
- Korak 5: WAV u C-kod
- Korak 6: Napravite konačnu datoteku i aktivirajte svoj Linux
Video: Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru: 6 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Bok dečki, Ovo je moje prvo uputstvo, nadam se da će vam se svidjeti !!
U osnovi, u ovom projektu koristio sam serijsku komunikaciju između svog Arduina i prijenosnog računala za prijenos glazbenih podataka sa svog prijenosnog računala na Arduino. I pomoću Arduino TIMERS -a za reprodukciju podataka kao PWM signal.
Htio sam to napomenuti, ovaj projekt nije za početnike !!!.
Zapravo, ovaj je projekt bio jedan od najdužih projekata, jer moramo učiniti mnogo stvari kako bi uspio.
PAŽNJA
Napravio sam drugi dio ovog uputstva, koji je mnogo lakši i zahtijeva minimalne probleme za rad
Veza na drugi dio (najjednostavniji).
Korak 1: Stvari koje su nam potrebne za ovaj projekt (zahtjevi)
1. Arduino ploča (možemo koristiti bilo koju ploču (328, 2560), tj. Mega, Uno, Mini itd., Ali s određenim različitim pinovima)
2. PC ili prijenosno računalo s Linuxom (koristio sam Fedoru 29) Ili Live USB s Linuxom
3. Breadboard ili Perfboard
4. Spajanje žica
5. TC4420 (vozač Mosfeta ili tako nešto)
6. Uključite Mosfet (N ili P kanal, molimo vas da spojite žicu prema tome) (koristio sam N-kanal)
7. Zvučnik ili Flyback transformator (Da, dobro ste pročitali !!)
8. Prikladno napajanje (0-12V) (koristio sam vlastito ATX napajanje)
9. Hladnjak (spasio sam sa svog starog računala)
10. Računalo s Windowsima i pogonom za olovke.
Da biste saznali detaljan rad svake komponente i ovog projekta, pročitajte sljedeći korak.
Napravio sam drugi dio ovog uputstva, koji je mnogo lakši i zahtijeva minimalne probleme za rad. Link na drugi dio (najjednostavniji).
Korak 2: Razumijevanje principa rada
Ahhh !! najduži dio nastave, čitanje i pisanje ovog odjeljka dosadno je.
Prije svega, moramo dobiti pregled kako ta stvar zapravo funkcionira.
ono što ovdje radimo je da prvo pretvaramo našu MP3 pjesmu u WAV datoteku, a ovu datoteku u datoteku zaglavlja C pomoću softvera koji se nalazi na poveznici. Ovaj C kod zapravo sadrži 8-bitne (zašto 8-bitne ?? čitati dalje) uzorke podataka koje moramo reproducirati koristeći naš Arduino po fiksnoj brzini ili brzini, koja je navedena u skladu s našom brzinom uzorkovanja.
Teorija audio signala.
Za one koji ne znaju koja je stopa uzorkovanja ili brzina prijenosa podataka:-
Brzina uzorkovanja definirana je kao broj uzoraka koje sviramo u sekundi (obično se mjeri u Hz ili KHz).
Da biste saznali više u Pojedinosti: -Kliknite ovdje
Standardne brzine uzorkovanja su 44100 Hz (najbolja kvaliteta), 32000 Hz, 22050 Hz itd
što znači da se 44100 uzoraka koristi u sekundi za stvaranje vala u skladu s tim.
tj. Svaki se uzorak mora igrati u fiksnom intervalu 1/44100 = 22,67 uS.
Zatim dolazi dubina bita audio signala, koja je obično mjera koliko je zvuk precizno predstavljen u digitalnom zvuku. Što je veća dubina bita, točniji je digitalni zvuk.
No, s Arduinom ili bilo kojim drugim mikrokontrolerom sa taktom od 16 Mhz omogućuje nam korištenje samo do 8 bita. Objasnit ću zašto.
Postoji stranica na stranici br.102 u podatkovnom listu za 328p:- Tehnički list
Neću ulaziti u detalje, zašto koristim ovu formulu.
frekvencija signala = signal sata / N x (1+TOP)
Signal takta = 16Mhz (Arduino ploča)
N = predškolac (1 je vrijednost za naš projekt)
TOP = vrijednost 0 do 2^16 (Za 16-bitni brojač timera) (255 = 2^8 (8-bitni) za naš projekt)
dobivamo vrijednost frekvencije Signala = 62,5 kHz
To znači da frekvencija valnog vala ovisi o dubini bita.
Pretpostavimo, ako koristimo TOP vrijednost = 2^16 = 65536 (tj. 16-bitna dubina bita)
tada dobivamo vrijednost frekvencije signala = 244 Hz (koju ne možemo koristiti)
OKK … Dakle, ovolika teorija o načinu funkcioniranja audio signala je dovoljna, pa se vratimo na projekt.
C kôd generiran za pjesmu mogao bi se kopirati u Arduino i može se reproducirati, ali ograničeni smo na 3 sekunde reprodukcije zvuka sa frekvencijom uzorkovanja od 8000 Hz. Budući da je ovaj C kod tekstualna datoteka i stoga nije komprimiran, već dekomprimiran. I zauzima previše prostora. (npr. datoteka C koda sa 43-sekundnim zvukom sa 44, 1 KHz uzorcima zauzima prostor do 23 MB). A naš Arduino Mega daje nam prostor od oko 256 Kb.
Dakle, kako ćemo svirati pjesme koristeći Arduino. Nije moguće. Ovaj Instructable je lažan. Ne brinite čitatelji, Zato moramo koristiti neku vrstu komunikacije između Arduina tako velikim brzinama (do 1 Mb/s) za slanje audio podataka na Arduino.
Ali koliko nam točno brzine trebamo da bismo to učinili ??
Odgovor je 44000 bajtova u sekundi, što znači da su brzine veće od 44000*8 = 325 000 bita/s.
Potreban nam je drugi periferni uređaj s velikom pohranom za slanje ovih podataka u naš Arduino. I to će biti naše računalo s Linuxom (zašto računalo s Linuxom ??? pročitajte dalje kako biste saznali više o tome.)
Ahaa … To znači da možemo koristiti serijsku komunikaciju … Ali pričekajte … serijska je moguća samo brzinama do 115200 bita/s što znači (325000/115200 = 3) da je, tri puta sporije nego što je potrebno.
Ne, prijatelji moji, nije. Koristit ćemo brzinu ili Baud Rate od 500 000 bita/s s kabelom do 20-30 cm max., Što je 1,5 puta brže od potrebnog.
Zašto Linux, a ne Windows ???
Dakle, moramo poslati uzorke u intervalu (također gore navedenom) 1/44100 = 22,67 uS s našim računalom.
Pa kako to možemo programirati za to ??
Možemo koristiti C ++ za slanje podatkovnog bajta kroz Serial u intervalima koristeći neku vrstu funkcije mirovanja
kao što su nanosleep, Chrono, itd, itd …
za (int x = 0; x
sendData (x);
nanosleep (22000); // 22uS
}
ALI NE TO NE RADI NA WINDOWS -u također nije radilo na ovaj način na Linuxu (ali pronašao sam drugi način koji možete vidjeti u priloženom kodu.)
Budući da ne možemo postići takvu granularnost pomoću prozora. Za postizanje takve granulacije potreban vam je Linux.
Problemi koje sam našao čak i s Linuxom …
možemo postići takvu granularnost pomoću Linuxa, ali nisam našao takvu funkciju da prespavam moj program za 22uS.
Funkcije kao što su nanosleep, Chrono nanosleep itd. Itd. Također ne rade jer pružaju san samo više od 100 uS. Ali trebala su mi točno, točno 22 američke jedinice. Istražio sam svaku stranicu na googlu i eksperimentirao sa svim mogućim funkcijama koje su dostupne u C/C ++, ali ništa mi nije uspjelo. Tada sam smislio svoju funkciju, koja mi je djelovala kao pravi šarm.
I moj kôd sada pruža točan, precizan san od 1uS ili više !!!
Pa smo prešli teški dio, a ostalo je jednostavno …
I želimo generirati PWM signal koristeći Arduino sa specifičnom frekvencijom također frekvencijom nosivog vala (62,5KHz (kako je gore izračunato) za dobar imunitet signala).
Dakle, za stvaranje PWM-a moramo koristiti tzv. TIMERS od Arduina. Usput, neću puno ulaziti u detalje o tome, jer ćete pronaći mnoge tutoriale na temu TIMERS, ali ako ih ne pronađete, komentirajte ispod, napravit ću jedan.
Koristio sam TC4420 Mosfet upravljački program za spremanje naših Arduino pinova jer ponekad ne mogu isporučiti toliko struje za pogon MOSFET -a.
Dakle, to je bila gotovo teorija ovog projekta, sada možemo vidjeti dijagram kruga.
PAŽNJA PAŽNJA PAŽNJA
Zapravo, ovaj projekt je namjerno otežan (reći ću zašto), postoji još jedna metoda koja zahtijeva noPC samo Arduino i zvučnik u mom nextinstructable. Link je ovdje.
*Glavna svrha ovog projekta je korištenje serijske komunikacije i spoznavanje njegove snage te naučiti kako možemo programirati naše računalo da izvršava zadatke upravo u tako malim intervalima.*
Korak 3: Shematski prikaz
Spojite sve komponente kako je prikazano na shemi. Dakle, ovdje imate dvije mogućnosti:-
1. Spojite zvučnik (spojen s 5 V)
2. Spojite povratni transformator (spojen s 12V)
Probao sam oboje. I oboje rade prilično dobro.
Odricanje:-
*Preporučujem korištenje Flyback transformatora s oprezom jer može biti opasan jer proizvodi visoke napone. I neću biti odgovoran za bilo kakvu štetu.*
Korak 4: Pretvorite MP3 u WAV datoteku pomoću programa Audacity
Dakle, prije svega preuzmite softver
1. Odvažnost, pretraživanje i preuzimanje s Googlea
2. Za pretvaranje WAV datoteke u C-kod preuzmite aplikaciju za prozor pod nazivom WAVToCode
S ove veze možete naučiti kako koristiti softver WAVToCode i preuzeti je s ove veze.
Također ću dati detaljne korake o tome kako koristiti oba softvera.
Molimo pogledajte fotografije povezane s ovim uputstvom.
U ovom koraku ćemo pretvoriti MP3 u Wav. (Slijedite fotografije, brzina projekta mora biti 44100Hz)
U sljedećem koraku ćemo pretvoriti wav datoteku u C kod.
Korak 5: WAV u C-kod
Pratite fotografije.
Pogledajte posljednje dvije slike, promjene moraju biti potpuno iste, velika slova trebaju biti velika, a mala slova mala, ili ćete dobiti pogrešku u sintaksi tijekom sastavljanja.
(Možete vidjeti da je pjesma od 1 minute 41s zauzela 23 MB prostora.)
Promijenite naziv pjesme i njezinu duljinu s nazivom i trajanjem pjesme.
I spremite datoteku C koda.
Učinite to sa svim pjesmama koje želite svirati s Arduinom
Korak 6: Napravite konačnu datoteku i aktivirajte svoj Linux
Dodajte sve pretvorene pjesme u datoteku na ovoj poveznici.
I pratite slike.
Prenesite kôd u Arduino koji sam priložio.
Zapamtite nazive datoteka C koda. (Npr. Način života, dolar, nošenje), jer moramo ista imena navesti u našem kodu s razlikovanjem velikih i malih slova.
Na kraju pokrenite svoj Fedora Live USB ili neki drugi i instalirajte gcc kompajler, a zatim pomoću uputa za sastavljanje iz mape prevedite program i pokrenite ga.
Na kraju ćete moći slušati pjesme s Speaker -a ili Flyback -a.
Hvala vam što ste pročitali ovo uputstvo i komentirajte ako vam se sviđa.
ATTENTIONI su učinili drugi dio ovog uputstva, koji je znatno lakši i zahtijeva minimalne probleme za rad. Veza na drugi dio (najjednostavniji)
Preporučeni:
Kako koristiti Neopixel Ws2812 LED ili LED STRIP ili LED prsten s Arduinom: 4 koraka
Kako koristiti Neopixel Ws2812 LED ili LED STRIP ili LED prsten s Arduinom: Zdravo dečki, budući da je Neopixel LED traka vrlo popularna, a naziva se i ws2812 LED traka. Vrlo su popularni jer se u ovim LED trakama možemo obratiti svakom LED diodi zasebno, što znači da ako želite da nekoliko LED dioda svijetli u jednoj boji
Reproducirajte pjesme s Arduinom pomoću ADC -a na PWM na Flyback transformatoru ili zvučniku: 4 koraka
Reproducirajte pjesme s Arduinom pomoću ADC -a na PWM -u na Flyback Transformer -u ili zvučniku: Zdravo dečki, ovo je drugi dio mog drugog uputstva (što je bilo mnogo teško), U osnovi, u ovom projektu sam koristio ADC i TIMERS na svom Arduinu za pretvoriti audio signal u PWM signal.Ovo je mnogo lakše od moje prethodne Instructa
Reproducirajte glazbu s Arduinom!: 5 koraka (sa slikama)
Reproducirajte glazbu s Arduinom !: U ovom uputstvu pokazat ću vam kako sviram glazbu koristeći Arduino UNO i modul SD kartice. Koristit ćemo SPI komunikaciju. Počnimo
Reproducirajte pjesme pomoću koračnog motora !!: 11 koraka (sa slikama)
Reproducirajte pjesme pomoću koračnog motora !!: Ovaj projekt govori o dizajniranju jednostavnog dinamičkog sučelja koje će omogućiti interakciju s koračnim motorom na dva različita načina. Prvo sučelje kontrolirat će smjer i brzinu koračnog motora korištenjem jednostavan GUI, koji h
Kako preuzeti pjesme ili druge stvari s DVD -a kao MP3: 4 koraka
Kako izvaditi pjesme ili druge stvari s DVD -a kao MP3 -a: Ako imate DualDisc sa pjesmama koje želite slušati na iPod -u ili običan DVD s možda komentar pjesmom koju želite slušati iPod, pročitajte ostatak ovoga kako biste to učinili. Potrebni predmeti-računalo, ruke, mozak, DVD, iPod