Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Sveiki bičiuliai, Tai pirmas mano pamokymas, tikiuosi jums patiks !!
Iš esmės šiame projekte aš naudoju nuoseklųjį ryšį tarp mano „Arduino“ir nešiojamojo kompiuterio, kad galėčiau perduoti muzikos duomenis iš savo nešiojamojo kompiuterio į „Arduino“. Ir naudojant „Arduino TIMERS“, norint atkurti duomenis kaip PWM signalą.
Norėjau paminėti, kad šis projektas nėra skirtas pradedantiesiems !!!.
Tiesą sakant, šis projektas buvo vienas ilgiausių, nes mes turime padaryti daug dalykų, kad jis veiktų.
DĖMESIO
Aš padariau pamokomą antrąją šios dalies dalį, kuri yra daug lengvesnė ir reikalauja mažiausiai problemų
Nuoroda į antrąją dalį (lengviausia).
1 žingsnis: dalykai, kurių mums reikia šiam projektui (reikalavimai)
1. „Arduino“lenta (galime naudoti bet kurią lentą (328, 2560), ty „Mega“, „Uno“, „Mini“ir kt., Bet su konkrečiais skirtingais kaiščiais)
2. Kompiuteris ar nešiojamas kompiuteris su „Linux“(naudojau „Fedora 29“) arba „Live USB“su „Linux“
3. Breadboard arba Perfboard
4. Laidų prijungimas
5. TC4420 („Mosfet“tvarkyklė ar pan.)
6. „Mosfet“maitinimas (N arba P kanalas, prašome atitinkamai prijungti laidą) (aš naudoju N kanalą)
7. Garsiakalbis arba „Flyback“transformatorius (taip, jūs perskaitėte teisingai!)
8. Tinkamas maitinimo šaltinis (0-12V) (naudojau savo ATX maitinimo šaltinį)
9. Šilumos kriauklė (aš išgelbėjau iš savo senojo kompiuterio)
10. Kompiuteris su „Windows“ir rašikliu.
Norėdami sužinoti išsamų kiekvieno komponento ir šio projekto veikimą, perskaitykite kitą žingsnį.
Aš padariau antrą šios instrukcijos dalį, kuri yra daug lengvesnė ir reikalauja minimalių problemų. Nuoroda į antrąją dalį (lengviausia).
2 žingsnis: Darbo principo supratimas
Ahhh !! ilgiausia pamokomo dalyko dalis, skaitant ir rašant šį skyrių, yra nuobodu.
Visų pirma, mes turime gauti apžvalgą, kaip šis dalykas iš tikrųjų veikia.
čia mes darome tai, kad pirmiausia konvertuojame savo MP3 dainą į WAV failą, o šį failą - į C antraštės failą, naudodami nuorodoje esančią programinę įrangą. Šiame C kode iš tikrųjų yra 8 bitų (kodėl 8 bitų ?? skaityti toliau) duomenų pavyzdžių, kuriuos turime žaisti naudodami mūsų „Arduino“fiksuotu greičiu arba greičiu, kuris nurodomas pagal mūsų atrankos dažnį.
Garso signalo teorija.
Tiems, kurie nežino, koks yra atrankos dažnis arba bitų dažnis:
Mėginių ėmimo dažnis apibrėžiamas kaip mėginių skaičius, kurį žaidžiame per sekundę (paprastai matuojama Hz arba KHz).
Norėdami sužinoti daugiau išsamiai: -Spustelėkite čia
Standartiniai atrankos dažniai yra 44100 Hz (geriausia kokybė), 32000 Hz, 22050 Hz ir kt
tai reiškia, kad 44100 mėginių yra naudojami per sekundę, kad atitinkamai būtų sukurta banga.
t. y. kiekvieną mėginį reikia paleisti fiksuotu intervalu 1/44100 = 22,67 uS.
Tada ateina garso signalo bitų gylis, kuris paprastai yra matas, kaip tiksliai garsas vaizduojamas skaitmeniniame garse. Kuo didesnis bitų gylis, tuo tikslesnis skaitmeninis garsas.
Tačiau naudojant „Arduino“ar bet kurį kitą „Micro“valdiklį su 16Mhz laikrodžiu leidžia mums naudotis tik iki 8 bitų. Aš paaiškinsiu kodėl.
328p duomenų lapo puslapyje Nr. 102 yra formulė:- Duomenų lapas
Aš nesileisiu į detales, kodėl aš naudoju šią formulę.
signalo dažnis = laikrodžio signalas / N x (1+TOP)
Laikrodžio signalas = 16Mhz („Arduino“plokštė)
N = prescaler (1 yra mūsų projekto vertė)
TOP = vertė nuo 0 iki 2^16 (16 bitų laikmačio skaitikliui) (255 = 2^8 (8 bitų) mūsų projektui)
gauname Signalo dažnio reikšmę = 62,5 kHz
Tai reiškia, kad nešiklio bangos dažnis priklauso nuo bitų gylio.
Tarkime, jei naudojame TOP reikšmę = 2^16 = 65536 (t. Y. Bitų gylis 16 bitų)
tada mes gauname signalo dažnio reikšmę = 244 Hz (to mes negalime naudoti)
Gerai… Taigi tiek teorijos, kaip veikia garso signalai, pakanka, tad grįžkime prie projekto.
Dainai sukurtas C kodas gali būti nukopijuotas į „Arduino“ir gali būti paleistas, tačiau garso įrašo atkūrimas yra ribotas iki 3 sekundžių, kai mėginių ėmimo dažnis yra 8000 Hz. Kadangi šis C kodas yra tekstinis failas ir todėl nėra suspaustas, o suspaustas. Ir tai užima per daug vietos. (pvz., C kodo failas su 43 sekundžių garsu su 44, 1 KHz pavyzdžiais užima iki 23 MB vietos). Ir mūsų „Arduino Mega“suteikia mums apie 256 Kb erdvę.
Taigi, kaip grosime dainas naudodami „Arduino“. Tai neįmanoma. Ši instrukcija yra suklastota. Nesijaudinkite skaitytojai, Štai kodėl mes turime naudoti tam tikrą ryšį tarp „Arduino“labai dideliu greičiu (iki 1 Mb/s), kad galėtume siųsti garso duomenis į „Arduino“.
Bet kiek greičio mums reikia, kad tai padarytume ??
Atsakymas yra 44000 baitų per sekundę, o tai reiškia, kad greitis yra didesnis nei 44000*8 = 325 000 bitų per sekundę.
Mums reikia kito periferinio įrenginio su didele saugykla, kad galėtume siųsti šiuos duomenis į „Arduino“. Ir tai bus mūsų kompiuteris su „Linux“(kodėl kompiuteris su „Linux“??? skaitykite toliau, kad sužinotumėte daugiau apie tai.)
Ahaa … Tai reiškia, kad galime naudoti nuoseklųjį ryšį … Bet palaukite … serijinis ryšys yra įmanomas tik iki 115200 bitų per sekundę greičiu, o tai reiškia (325000/115200 = 3), kad jis yra tris kartus lėtesnis nei reikalaujama.
Ne, mano draugai, taip nėra. Mes naudosime greitį arba 500 000 bitų spartos greitį, kai kabelis yra iki 20–30 cm, o tai yra 1,5 karto greičiau nei reikalaujama.
Kodėl Linux, o ne Windows ???
Taigi, mes turime siųsti mėginius intervalu (taip pat nurodytas aukščiau) 1/44100 = 22,67 uS su savo kompiuteriu.
Taigi, kaip mes galime tai užprogramuoti?
Mes galime naudoti C ++, kad išsiųstume duomenų baitą per seriją tam tikru intervalu, naudodami tam tikrą miego funkciją
kaip „nanosleep“, „Chrono“ir kt.
už (int x = 0; x
sendData (x);
nanomiegas (22000); // 22uS
}
BET NIEKAS NEDIRBO „WINDOWS“taip pat neveikė „Linux“(bet radau kitą būdą, kurį galite pamatyti pridėtame mano kode.)
Kadangi mes negalime pasiekti tokio detalumo naudodami langus. Norint pasiekti tokį detalumą, jums reikia „Linux“.
Problemų, kurias radau net su „Linux“…
mes galime pasiekti tokį detalumą naudodami „Linux“, tačiau neradau tokios funkcijos, kad užmigdytų savo programą 22uS.
Funkcijos, tokios kaip „nanosleep“, „Chrono nanosleep“ir kt., Ir tt taip pat neveikia, nes jos suteikia miegą tik daugiau nei 100 uS. Bet man reikėjo tiksliai, tiksliai 22 uS. Aš ištyriau kiekvieną „Google“puslapį ir eksperimentavau su visomis įmanomomis funkcijomis, kurios yra C/C ++, bet niekas man nepadėjo. Tada aš sugalvojau savo funkciją, kuri man buvo tikras žavesys.
Ir mano kodas dabar suteikia tikslų, tiksliai 1uS ar didesnį miegą !!!
Taigi mes įveikėme sunkiąją dalį, o visa kita lengva …
Ir mes norime generuoti PWM signalą naudodami „Arduino“su tam tikru dažniu, taip pat nešiklio bangos dažniu. (62,5 KHz (kaip apskaičiuota aukščiau), kad signalas būtų gerai apsaugotas).
Taigi, norėdami sukurti PWM, turime naudoti vadinamuosius „Arduino“laikmačius. Beje, aš apie tai išsamiai nesigilinsiu, nes rasite daug vadovėlių laikmačių tema, bet jei tokių nerasite, pakomentuokite žemiau.
Aš naudoju „TC4420 Mosfet“tvarkyklę, kad išsaugotų mūsų „Arduino“kaiščius, nes jie negali tiekti tiek srovės, kad kartais vairuotų MOSFET.
Taigi, tai buvo beveik šio projekto teorija, dabar matome grandinės schemą.
DĖMESIO DĖMESIO DĖMESIO
Tiesą sakant, šis projektas buvo labai sunkiai padarytas tyčia (aš pasakysiu, kodėl), yra dar vienas metodas, kuriam reikalingas noPC, tik „Arduino“ir garsiakalbis mano kitame nurodyme. Nuoroda yra čia.
*Pagrindinis šio projekto tikslas yra naudoti serijinį ryšį ir žinoti jo galią bei sužinoti, kaip galime užprogramuoti savo kompiuterį tiksliai atlikti užduotis tokiais smulkiais intervalais.*
3 žingsnis: schema
Prijunkite visus komponentus, kaip parodyta schemoje. Taigi, jūs turite dvi galimybes:-
1. Prijunkite garsiakalbį (prijungtas prie 5 V)
2. Prijunkite „Flyback“transformatorių (prijungtas prie 12 V)
Esu bandžiusi abu. Ir abu veikia gana gerai.
Atsisakymas:-
*Rekomenduoju naudoti „Flyback Transformer“atsargiai, nes tai gali būti pavojinga, nes sukuria aukštą įtampą. Ir aš neprisiimsiu jokios žalos.*
4 veiksmas: konvertuokite MP3 į WAV failą naudodami „Audacity“
Taigi, pirmiausia atsisiųskite programinę įrangą
1. „Audacity“, ieškokite ir atsisiųskite iš „Google“
2. Norėdami konvertuoti WAV failą į C kodą, atsisiųskite lango programą, pavadintą WAVToCode
Iš šios nuorodos galite išmokti naudotis „WAVToCode“programine įranga ir ją atsisiųsti.
Taip pat pateiksiu išsamius veiksmus, kaip naudoti abi programinę įrangą.
Žiūrėkite nuotraukas, susietas su šia instrukcija.
Šiame žingsnyje mes konvertuosime MP3 į „Wav“. (Sekite nuotraukas, projekto dažnis turi būti 44100 Hz)
Kitame žingsnyje mes konvertuosime wav failą į C kodą.
5 veiksmas: WAV į C kodą
Sekite nuotraukas.
Žiūrėkite paskutines dvi nuotraukas, pakeitimai turi būti visiškai vienodi, didžiosios raidės turi būti didžiosios, o mažosios - mažos, arba kompiliavimo metu gausite sintaksės klaidą.
(Matote, kad 1min 41s daina užėmė 23 MB vietos.)
Pakeiskite dainos pavadinimą ir ilgį atitinkamai savo dainos pavadinimu ir trukme.
Ir išsaugokite C kodo failą.
Padarykite tai visoms dainoms, kurias norite groti su „Arduino“
6 veiksmas: sukurkite galutinį failą ir paleiskite „Linux“
Pridėkite visas konvertuotas dainas į failą, pateiktą šioje nuorodoje.
Ir sekite paveikslėlius.
Įkelkite kodą į „Arduino“, kurį pridėjau.
Prisiminkite C kodo failų pavadinimus. (Pvz., Gyvenimo būdas, doleris, drabužiai), nes mes turime nurodyti tuos pačius pavadinimus savo kode, neskiriant didžiųjų ir mažųjų raidžių.
Pabaigoje įjunkite „Fedora Live USB“ar kitą ir įdiekite „gcc“kompiliatorių, tada naudodamiesi kompiliavimo instrukcijomis iš aplanko sudarykite programą ir paleiskite ją.
Galų gale galėsite klausytis „Speaker“ar „Flyback“dainų.
Dėkojame, kad perskaitėte šią instrukciją, ir, jei jums patinka, pakomentuokite.
DĖMESIO Aš padariau pamokomą antrąją šios dalies dalį, kuri yra daug lengvesnė ir reikalauja mažiausiai problemų. Nuoroda į antrąją dalį (lengviausia)