Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Zdravo momci, Ovo je moje prvo uputstvo, nadam se da će vam se svidjeti !!
U osnovi, u ovom projektu sam koristio serijsku komunikaciju između svog Arduina i prijenosnog računala za prijenos muzičkih podataka sa svog prijenosnog računala na Arduino. I pomoću Arduino TIMERS -a za reprodukciju podataka kao PWM signal.
Htio sam napomenuti da ovaj projekt nije za početnike !!!.
Zapravo, ovaj projekt je 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 projekat (zahtjevi)
1. Arduino ploča (možemo koristiti bilo koju ploču (328, 2560), tj. Mega, Uno, Mini itd., Ali sa specifičnim različitim pinovima)
2. PC ili laptop sa Linuxom (koristio sam Fedoru 29) ili Live USB sa Linuxom
3. Breadboard ili Perfboard
4. Povezivanje žica
5. TC4420 (Mosfet vozač 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. Odgovarajuće napajanje (0-12V) (koristio sam vlastito ATX napajanje)
9. Hladnjak (spasio sam sa svog starog računara)
10. PC sa operativnim sistemom Windows i olovkom.
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 do drugog dijela (najjednostavniji).
Korak 2: Razumijevanje principa rada
Ahhh !! najduži dio nastave, čitanje i pisanje ovog odjeljka je dosadno.
Prije svega, moramo dobiti pregled kako ova stvar zapravo funkcionira.
ono što ovdje radimo je da prvo pretvaramo našu MP3 pjesmu u WAV datoteku, a ovu datoteku u C datoteku zaglavlja pomoću softvera koji se nalazi na linku. 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 brzina 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 detaljima: -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 generiranje vala u skladu s tim.
Svaki uzorak se 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 je digitalni zvuk precizniji.
No, s Arduinom ili bilo kojim drugim mikrokontrolerom sa taktom od 16 Mhz omogućava nam korištenje samo do 8 bita. Objasniću zašto.
Na stranici br.102 u tablici s podacima o 328p postoji formula:- 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 = predkaler (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 nosivog 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 kod 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 zvukom od 43 sekunde sa uzorcima od 44, 1 KHz 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 čitaoci, Zato moramo koristiti neku vrstu komunikacije između Arduina velikom brzinom (do 1 Mb/s) za slanje audio podataka na Arduino.
Ali koliko nam tačno brzine trebamo da to učinimo ??
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 memorijom za slanje ovih podataka na naš Arduino. I to će biti naš PC sa Linuxom (zašto PC sa Linuxom ??? pročitajte dalje da saznate 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đe gore naveden) 1/44100 = 22,67 uS sa našim računarom.
Pa kako to možemo programirati za to ??
Možemo koristiti C ++ za slanje bajta podataka 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đe nije radilo na ovaj način na Linuxu (ali pronašao sam drugi način koji možete vidjeti u mom kodu u prilogu.)
Zato što 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 sa Linuxom …
takvu granularnost možemo postići pomoću Linuxa, ali nisam našao takvu funkciju da prespava moj program za 22uS.
Funkcije kao što su nanosleep, Chrono nanosleep itd. Itd. Također ne funkcioniraju jer pružaju san samo više od 100 uS. Ali trebalo mi je tačno, tačno 22 američke jedinice. Istražio sam svaku stranicu na google -u 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 tač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 talasa (62,5KHz (kako je gore izračunato) za dobar imunitet signala).
Dakle, za stvaranje PWM-a moramo koristiti takozvane TIMERE iz Arduina. Usput, neću ulaziti u detalje o tome, jer ćete pronaći mnogo vodiča 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 sljedećem uputstvu. Link je ovdje.
*Glavna svrha ovog projekta je korištenje serijske komunikacije i spoznavanje njegove moći te naučiti kako možemo programirati naš računar da izvršava zadatke upravo u tako malim intervalima.*
Korak 3: Shema
Povežite sve komponente kako je prikazano na shemi. Dakle, ovdje imate dvije mogućnosti:-
1. Priključite zvučnik (povezan sa 5V)
2. Priključite povratni transformator (povezan s 12V)
Probao sam oboje. I oboje rade prilično dobro.
Odricanje od odgovornosti:-
*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 koristeći Audacity
Dakle, prije svega preuzmite softver
1. Audacity, tražite i preuzimajte s Googlea
2. Za pretvaranje WAV datoteke u C-kod, preuzmite aplikaciju za prozor pod nazivom WAVToCode
Sa ove veze možete naučiti kako koristiti softver WAVToCode i preuzeti je sa 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. (Pratite fotografije, brzina projekta mora biti 44100Hz)
U sljedećem koraku ćemo pretvoriti wav datoteku u C kod.
Korak 5: WAV prema C-kodu
Pratite fotografije.
Pogledajte posljednje dvije slike, promjene moraju biti potpuno iste, velika slova trebaju biti velika, a mala slova mala, ili ćete dobiti grešku u sintaksi tokom prevođenja.
(Možete vidjeti da je pjesma od 1 minute 41s zauzela 23 MB prostora.)
Promijenite naziv i dužinu pjesme 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 konvertirane pjesme u Datoteku na ovoj poveznici.
I pratite slike.
Otpremite 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 velikim i malim slovima.
Na kraju pokrenite svoj Fedora Live USB ili neki drugi i instalirajte gcc kompajler, a zatim pomoću uputa za kompajliranje iz mape kompajlirajte program i pokrenite ga.
Na kraju ćete moći slušati pjesme sa 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. Link na drugi dio (najjednostavniji)