Sadržaj:

Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru: 6 koraka (sa slikama)
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru: 6 koraka (sa slikama)

Video: Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru: 6 koraka (sa slikama)

Video: Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru: 6 koraka (sa slikama)
Video: Mp3 player 2024, Studeni
Anonim
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru
Reproducirajte pjesme (MP3) s Arduinom pomoću PWM -a na zvučniku ili Flyback transformatoru

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

Shematski
Shematski

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

Pretvorite MP3 u WAV datoteku pomoću programa Audacity
Pretvorite MP3 u WAV datoteku pomoću programa Audacity
Pretvorite MP3 u WAV datoteku koristeći Audacity
Pretvorite MP3 u WAV datoteku koristeći Audacity
Pretvorite MP3 u WAV datoteku pomoću programa Audacity
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

WAV u C-kod
WAV u C-kod
WAV u C-kod
WAV u C-kod
WAV u C-kod
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

Napravite konačnu datoteku i aktivirajte svoj Linux
Napravite konačnu datoteku i aktivirajte svoj Linux
Napravite konačnu datoteku i aktivirajte svoj Linux
Napravite konačnu datoteku i aktivirajte svoj Linux
Napravite konačnu datoteku i aktivirajte svoj Linux
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: