Բովանդակություն:

Նվագարկեք երգեր (MP3) Arduino- ի միջոցով ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա. 6 քայլ (նկարներով)
Նվագարկեք երգեր (MP3) Arduino- ի միջոցով ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա. 6 քայլ (նկարներով)

Video: Նվագարկեք երգեր (MP3) Arduino- ի միջոցով ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա. 6 քայլ (նկարներով)

Video: Նվագարկեք երգեր (MP3) Arduino- ի միջոցով ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա. 6 քայլ (նկարներով)
Video: Aram MP3 - Alabalanica (Official Music Video) 2024, Հուլիսի
Anonim
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա
Նվագարկեք երգեր (MP3) Arduino- ի հետ ՝ օգտագործելով PWM խոսափողի կամ թռիչքի տրանսֆորմատորի վրա

Բարև տղերք, Սա իմ առաջին հրահանգն է, հուսով եմ ձեզ դուր կգա !!

Հիմնականում, այս նախագծում ես օգտագործել եմ սերիական հաղորդակցություն իմ Arduino- ի և իմ նոութբուքի միջև ՝ նոութբուքից երաժշտության տվյալները Arduino- ին փոխանցելու համար: Եվ օգտագործելով Arduino TIMERS- ը ՝ տվյալները որպես PWM ազդանշան նվագարկելու համար:

Ես ուզում էի նշել, որ այս նախագիծը սկսնակների համար չէ !!!:

Իրականում, այս նախագիծը ամենաերկար նախագծերից մեկն էր, քանի որ մենք պետք է շատ բաներ անենք, որպեսզի այն աշխատի:

Ո ATՇԱԴՐՈԹՅՈՆ

Ես դարձրեցի այս ուսուցման երկրորդ մասը, որն ավելի հեշտ է և աշխատելու համար նվազագույն դժվարությունների կարիք ունի

Երկրորդ մասի հղում (ամենահեշտը):

Քայլ 1: Այն, ինչ մեզ պետք է այս ծրագրի համար (պահանջներ)

1. Arduino Board (մենք կարող ենք օգտագործել ցանկացած տախտակ (328, 2560), այսինքն ՝ Mega, Uno, Mini և այլն, բայց հատուկ տարբեր կապումներով)

2. ԱՀ կամ նոութբուք Linux- ով (ես օգտագործել եմ Fedora 29) կամ Live USB Linux- ով

3. Breadboard կամ Perfboard

4. Լարերի միացում

5. TC4420 (Mosfet վարորդ կամ նման բան)

6. Power Mosfet (N կամ P ալիք, խնդրում ենք համապատասխանաբար լարել) (ես օգտագործել եմ N- ալիքը)

7. Բարձրախոս կամ հետադարձ տրանսֆորմատոր (Այո, ճիշտ եք կարդացել !!)

8. Հարմար սնուցման աղբյուր (0-12V) (ես օգտագործել եմ իմ սեփական ATX սնուցման աղբյուրը)

9. atեռուցման լվացարան (ես փրկվել եմ իմ հին համակարգչից)

10. ԱՀ համակարգիչ Windows- ով և գրիչով:

Յուրաքանչյուր բաղադրիչի և այս նախագծի մանրամասն աշխատանքին ծանոթանալու համար կարդացեք հաջորդ քայլը:

Ես դարձրեցի այս ուսուցողական երկրորդ մասը, որն ավելի հեշտ է և աշխատելու համար անհրաժեշտ է նվազագույն խնդիրներ: Հղում դեպի երկրորդ մաս (ամենահեշտը):

Քայլ 2. Աշխատանքի սկզբունքի իմացություն

Ահհհ !! այս բաժինը կարդալը և գրելն ամենևին էլ ձանձրալի է:

Նախևառաջ, մենք պետք է ընդհանուր պատկերացում կազմենք, թե իրականում ինչպես է այս բանը գործում:

այն, ինչ մենք անում ենք այստեղ, այն է, որ առաջին հերթին մենք մեր MP3 երգը վերածում ենք WAV ֆայլի և այս ֆայլը ՝ C վերնագրի ֆայլի ՝ օգտագործելով ծրագրակազմը, որը գտնվում է հղման մեջ: Այս C կոդը իրականում պարունակում է 8-բիթ (ինչու՞ 8-բիթ ?? կարդալ ավելին) տվյալների նմուշներ, որոնք մենք պետք է խաղանք մեր Arduino- ի միջոցով `ֆիքսված արագությամբ կամ արագությամբ, որը նշված է մեր ընտրանքային դրույքաչափի համաձայն:

Աուդիո ազդանշանի տեսություն:

Նրանց համար, ովքեր չգիտեն, թե որն է նմուշառման տոկոսադրույքը կամ բիթային տոկոսադրույքը.

Նմուշառման տոկոսադրույքը սահմանվում է որպես Նմուշների քանակ, մենք խաղում ենք երկրորդում (սովորաբար չափվում է Հց կամ ԿՀց հաճախականությամբ):

Մանրամասներին ավելին իմանալու համար.-Կտտացրեք այստեղ

Ստանդարտ ընտրանքային դրույքաչափերն են `44100 Հց (լավագույն որակ), 32000 Հց, 22050 Հց և այլն

ինչը նշանակում է, որ 44100 Նմուշ օգտագործվում է վայրկյանում ՝ համապատասխանաբար ալիք առաջացնելու համար:

այսինքն ՝ Յուրաքանչյուր Նմուշ պահանջվում է խաղալ 1/44100 = 22.67 uS ֆիքսված ընդմիջումով:

Այնուհետև գալիս է աուդիո ազդանշանի բիթ խորությունը, որը սովորաբար չափիչ է, թե որքան ճշգրիտ է ձայնը ներկայացված թվային աուդիոյում: Որքան բարձր է բիտի խորությունը, այնքան ավելի ճշգրիտ է թվային ձայնը:

Սակայն Arduino- ի կամ 16 ՄՀց ժամացույց ունեցող ցանկացած այլ միկրոկառավարիչի միջոցով մեզ թույլ է տալիս օգտագործել մեզ միայն մինչև 8 բիթանոց: Ես կբացատրեմ, թե ինչու:

328p- ի տվյալների թերթում ՝ թիվ 102 էջում կա բանաձև.- Տվյալների թերթիկ

Չեմ մանրամասնի, թե ինչու եմ ես օգտագործում այս բանաձևը:

Ազդանշանի հաճախականությունը = Signամացույցի ազդանշան / N x (1+TOP)

Ockամացույցի ազդանշան = 16 ՄՀց (Arduino տախտակ)

N = prescaler (1 -ը արժեք է մեր նախագծի համար)

TOP = 0-ից 2^16 արժեքը (16-բիթ ժամաչափի համար) (255 = 2^8 (8-բիթ) մեր նախագծի համար)

մենք ստանում ենք Ազդանշանի հաճախականության արժեքը = 62.5 կՀց

Սա նշանակում է, որ կրիչի ալիքի հաճախականությունը կախված է Bit խորությունից:

Ենթադրենք, եթե մենք օգտագործում ենք TOP արժեքը = 2^16 = 65536 (այսինքն ՝ բիտ 16 բիթ խորություն)

ապա մենք ստանում ենք Ազդանշանի հաճախականության արժեքը = 244 Հց (որը չենք կարող օգտագործել)

OKK… Այսպիսով, այսքան տեսություն, թե ինչպես է աշխատում ձայնային ազդանշանները, բավական է: Այսպիսով, վերադառնանք նախագծին:

Երգի համար ստեղծված C ծածկագիրը կարող է պատճենվել Arduino- ում և կարող է նվագարկվել, սակայն մենք սահմանափակված ենք մինչև 3 վայրկյան ձայնային նվագարկմամբ `ընտրանքային արագությամբ 8000 Հց: Քանի որ այս C ծածկագիրը տեքստային ֆայլ է և, հետևաբար, ոչ թե սեղմված է, այլ բավականին սեղմված: Եվ դա չափազանց շատ տեղ է զբաղեցնում: (օրինակ ՝ C կոդի ֆայլ ՝ 43 վրկ ձայնով ՝ 44, 1 ԿՀց նմուշներով ՝ մինչև 23 ՄԲ տարածք է զբաղեցնում): Եվ մեր Arduino Mega- ն մեզ տալիս է մոտ 256 Կբ տարածք:

Այսպիսով, ինչպես ենք երգեր նվագելու Arduino- ի միջոցով: Դա հնարավոր չէ: Այս հրահանգը կեղծ է: Մի անհանգստացեք ընթերցողներ, Այդ իսկ պատճառով մենք պետք է Arduino- ի միջև ինչ -որ տեսակի հաղորդակցություն օգտագործենք չափազանց բարձր արագությամբ (մինչև 1 Մբ/վ) `Arduino- ին Աուդիո տվյալներ ուղարկելու համար:

Բայց որքա՞ն արագություն է մեզ պետք դա անելու համար:

Պատասխանը 44000 բայթ է վրկ, ինչը նշանակում է ավելի քան 44000*8 = 325, 000 բիթ/վ արագություն:

Մեզ անհրաժեշտ է մեկ այլ ծայրամասային սարք ՝ մեծ պահեստով ՝ այս տվյալները մեր Arduino- ին ուղարկելու համար: Եվ դա կլինի մեր համակարգիչը Linux- ով (ինչու՞ համակարգիչ Linux- ով ??? խնդրում ենք կարդալ ավելին ՝ դրա մասին ավելին իմանալու համար):

Ahaa … Դա նշանակում է, որ մենք կարող ենք օգտագործել սերիական հաղորդակցություն … Բայց սպասեք … սերիալը հնարավոր է ընդամենը 115200 բիթ/վ արագությամբ, ինչը նշանակում է (325000/115200 = 3), որ այն երեք անգամ ավելի դանդաղ է, քան պահանջվում է:

Ոչ, իմ ընկերներ, դա այդպես չէ: Մենք կօգտագործենք 500 կամ 000 Բիթ/վ արագության արագություն ՝ մինչև 20-30 սմ առավելագույն մալուխով, ինչը 1,5 անգամ ավելի արագ է, քան պահանջվում է:

Ինչու Linux, ոչ Windows ???

Այսպիսով, մենք պետք է նմուշներ ուղարկենք մեր համակարգչի հետ 1/44100 = 22.67 uS ընդմիջումով (նաև նշված է վերևում):

Այսպիսով, ինչպե՞ս կարող ենք դա ծրագրել դա անելու համար:

Մենք կարող ենք օգտագործել C ++ - ը `տվյալների բայթը Serial- ի միջոցով ընդմիջումով ուղարկելու համար` օգտագործելով քնի որոշակի գործառույթ

ինչպես nanosleep, Chrono և այլն, և այլն…

համար (int x = 0; x

sendData (x);

նանոար (22000); // 22uS

}

ԲԱՅ NO ՉԻ ԱՇԽԱՏԱՆՔԱՅԻՆ ԼՈ LinuxՍԱՄՈՏՆԵՐԻՆ նույնպես Linux- ում այս կերպ չէր աշխատում (բայց ես գտա մեկ այլ տարբերակ, որը դուք կարող եք տեսնել իմ կցված ծածկագրում):

Քանի որ պատուհանների միջոցով մենք չենք կարող հասնել նման հատիկավորության: Նման մանրամասնության հասնելու համար ձեզ անհրաժեշտ է Linux:

Խնդիրներ, որոնք ես գտա նույնիսկ Linux- ի հետ…

Linux- ի միջոցով մենք կարող ենք հասնել այսպիսի մանրամասնության, բայց ես չեմ գտել նման գործառույթ ՝ իմ ծրագիրը 22uS- ով քնելու համար:

Այն գործառույթները, ինչպիսիք են nanosleep- ը, Chrono nanosleep- ը և այլն, և այլն: նույնպես չեն գործում, քանի որ դրանք ապահովում են քնի ավելի քան 100 ԱՄՆ դոլար: Բայց ինձ պետք էր հենց, ճշգրիտ 22 ԱՄՆ դոլար: Ես ուսումնասիրել եմ Google- ի յուրաքանչյուր էջ և փորձարկել բոլոր հնարավոր գործառույթները, որոնք առկա են C/C ++ - ում, բայց ինձ մոտ ոչինչ չի ստացվել: Հետո ես մտածեցի իմ գործառույթի մասին, որն ինձ համար աշխատում էր որպես իսկական հմայք:

Եվ իմ կոդը այժմ ապահովում է ճշգրիտ, ճշգրիտ քուն 1uS կամ ավելի բարձր !!!

Այսպիսով, մենք լուսաբանել ենք դժվար մասը, իսկ մնացածը հեշտ է…

Եվ մենք ցանկանում ենք արտադրել PWM ազդանշան ՝ օգտագործելով Arduino- ն ՝ որոշակի հաճախականությամբ, նաև կրող ալիքի հաճախականությամբ: (62.5 ԿՀց (ինչպես հաշվարկված է վերևում) ՝ ազդանշանի լավ իմունիտետի համար):

Այսպիսով, PWM ստեղծելու համար մենք պետք է օգտագործենք այսպես կոչված Arduino- ի TIMERS- ը: Ի դեպ, ես դրա մասին շատ չեմ մանրամասնի, քանի որ դուք կգտնեք բազմաթիվ ձեռնարկներ IMԱՄԱՆԱԿՆԵՐԻ թեմայով, բայց եթե մի քանիսը չգտնեք, ապա ստորև մեկնաբանեք, ես մեկն անեմ:

Ես օգտագործել եմ TC4420 Mosfet վարորդը ՝ մեր Arduino Pins- ը պահելու համար, որովհետև նրանք չեն կարող այնքան հոսանք հաղորդել, որ երբեմն MOSFET վարելու համար:

Այսպիսով, սա այս նախագծի գրեթե տեսությունն էր, այժմ կարող ենք տեսնել սխեմայի սխեման:

ՈTՇԱԴՐՈԹՅՈ ATՆ ՈTՇԱԴՐՈԹՅՈՆ ՈTՇԱԴՐՈԹՅՈՆ

Իրականում, այս նախագիծը միտումնավոր շատ դժվարացվեց (ես կասեմ, թե ինչու), կա մեկ այլ մեթոդ, որը պահանջում է ոչ մի համակարգչային Arduino և բարձրախոս իմ հաջորդ անուղղելի ծրագրում: Հղումն այստեղ է:

*Այս նախագծի հիմնական նպատակն է օգտագործել սերիական հաղորդակցումը և իմանալ դրա հզորությունը և սովորել, թե ինչպես կարող ենք ծրագրավորել մեր համակարգիչը `առաջադրանքներ կատարել հենց այսպիսի լավ ընդմիջումներով:*

Քայլ 3: Սխեմատիկ

Սխեմատիկ
Սխեմատիկ

Միացրեք բոլոր բաղադրիչները, ինչպես ցույց է տրված սխեմատիկայում: Այսպիսով, այստեղ ունեք երկու տարբերակ.

1. Միացրեք բարձրախոս (միացված է 5 Վ)

2. Միացրեք Flyback տրանսֆորմատորը (միացված է 12 Վ)

Ես երկուսն էլ փորձել եմ: Եվ երկուսն էլ բավականին լավ են աշխատում:

Հրաժարում

*Ես խորհուրդ եմ տալիս օգտագործել Flyback Transformer- ը զգուշությամբ, քանի որ այն կարող է վտանգավոր լինել, քանի որ արտադրում է բարձր լարման: Եվ ես ոչ մի վնասի չեմ ենթարկվի:*

Քայլ 4. Փոխարկեք MP3- ը WAV ֆայլ ՝ Audacity- ի միջոցով

Փոխարկեք MP3- ը WAV ֆայլ ՝ Audacity- ի միջոցով
Փոխարկեք MP3- ը WAV ֆայլ ՝ Audacity- ի միջոցով
Փոխարկեք MP3- ը WAV ֆայլ ՝ Audacity- ի միջոցով
Փոխարկեք MP3- ը WAV ֆայլ ՝ Audacity- ի միջոցով
Փոխարկեք MP3- ը WAV ֆայլ ՝ Audacity- ի միջոցով
Փոխարկեք MP3- ը WAV ֆայլ ՝ Audacity- ի միջոցով

Այսպիսով, առաջին հերթին, ներբեռնեք ծրագրակազմը

1. Համարձակություն, որոնում և ներբեռնում Google- ից

2. WAV ֆայլը C- կոդի փոխարկելու համար ներբեռնեք պատուհանի ծրագիր, որը կոչվում է WAVToCode

Դուք կարող եք սովորել, թե ինչպես օգտագործել WAVToCode ծրագրակազմը այս հղումից և ներբեռնել այն այս հղումից:

Ես նաև մանրամասն քայլեր կտամ, թե ինչպես օգտագործել երկու ծրագրակազմը:

Խնդրում ենք դիտել այս հրահանգի հետ կապված լուսանկարները:

Այս քայլով մենք MP3- ը կվերածենք Wav- ի: (Հետևեք լուսանկարներին, ծրագրի արագությունը պետք է լինի 44100 Հց)

Հաջորդ քայլում մենք wav ֆայլը կփոխարկենք C կոդի:

Քայլ 5: WAV դեպի C-Code

WAV դեպի C-Code
WAV դեպի C-Code
WAV դեպի C-Code
WAV դեպի C-Code
WAV դեպի C-Code
WAV դեպի C-Code

Հետևեք լուսանկարներին:

Դիտեք վերջին երկու նկարները, փոփոխությունները պետք է լինեն ճշգրիտ նույնը, Մեծատառերը պետք է լինեն մեծատառեր և փոքրատառեր, Կամ կազմման ընթացքում դուք կստանաք շարահյուսական սխալ:

(Դուք կարող եք տեսնել, որ 41 րոպե տևողությամբ 1 րոպե երգը զբաղեցրել է 23 ՄԲ տարածք):

Երգի անունը և երկարությունը համապատասխանաբար փոխեք ձեր երգի անվան և տևողության հետ:

Եվ պահպանեք C Code ֆայլը:

Դա արեք բոլոր այն երգերի նկատմամբ, որոնք ցանկանում եք նվագել Arduino- ի հետ:

Քայլ 6. Կազմեք վերջնական ֆայլ և գործարկեք ձեր Linux- ը

Ստեղծեք վերջնական ֆայլ և գործարկեք ձեր Linux- ը
Ստեղծեք վերջնական ֆայլ և գործարկեք ձեր Linux- ը
Ստեղծեք վերջնական ֆայլ և գործարկեք ձեր Linux- ը
Ստեղծեք վերջնական ֆայլ և գործարկեք ձեր Linux- ը
Ստեղծեք վերջնական ֆայլ և գործարկեք ձեր Linux- ը
Ստեղծեք վերջնական ֆայլ և գործարկեք ձեր Linux- ը

Ավելացրեք ձեր բոլոր փոխակերպված երգերը Ֆայլի մեջ ՝ տրված այս հղումով:

Եվ հետևեք նկարներին:

Վերբեռնեք կոդը Arduino- ում, որը ես կցել եմ:

Հիշեք C Code ֆայլի անունները: (օրինակ ՝ ապրելակերպի, դոլարի, կրելու համար), քանի որ մենք պետք է նշենք ճշգրիտ նույն անունները մեր ծածկագրում ՝ մեծատառերով:

Վերջում միացրեք ձեր Fedora Live USB- ը կամ այլ սարք և տեղադրեք gcc կոմպիլյատոր, այնուհետև թղթապանակից կազմող հրահանգների միջոցով կազմեք ծրագիրը և գործարկեք այն:

Ի վերջո, դուք կկարողանաք լսել երգեր Speaker- ից կամ Flyback- ից:

Շնորհակալ եմ այս ուսանելի դասընթացի համար և խնդրում եմ մեկնաբանել, եթե ձեզ դուր է գալիս:

ՈTՇԱԴՐՈԹՅՈՆ Ես դարձրեցի այս ուսուցման երկրորդ մասը, որն ավելի հեշտ է և աշխատելու համար նվազագույն դժվարությունների կարիք ունի: Երկրորդ մասի հղում (ամենահեշտը)

Խորհուրդ ենք տալիս: