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

Arduino- ով և DC շարժիչով երգեր պատրաստելը `6 քայլ
Arduino- ով և DC շարժիչով երգեր պատրաստելը `6 քայլ

Video: Arduino- ով և DC շարժիչով երգեր պատրաստելը `6 քայլ

Video: Arduino- ով և DC շարժիչով երգեր պատրաստելը `6 քայլ
Video: Հեռաչափի,ձայնի և Servo շարժիչի համակցում Arduino 2024, Նոյեմբեր
Anonim
Arduino- ով և DC շարժիչով երգեր պատրաստելը
Arduino- ով և DC շարժիչով երգեր պատրաստելը

Օրերս, Arduino- ի մասին որոշ հոդվածներ թերթելիս, ես նկատեցի մի հետաքրքիր նախագիծ, որն օգտագործում էր Arduino- ի կողմից կառավարվող տափաստանային շարժիչները `կարճ մեղեդիներ ստեղծելու համար: Arduino- ն օգտագործեց PWM (Pulse Width Modulation) քորոց ՝ սլաքի շարժիչը որոշակի հաճախականություններով գործարկելու համար ՝ համապատասխան երաժշտական նոտաներին: Timամանակը որոշելով, թե որ հաճախականությունները երբ են նվագում, հստակ մեղեդի էր լսվում սլաքի շարժիչից:

Այնուամենայնիվ, երբ ես ինքս փորձեցի այն, ես գտա, որ իմ ունեցած շարժիչային շարժիչը չի կարող բավական արագ պտտվել ՝ հնչերանգ ստեղծելու համար: Փոխարենը, ես օգտագործեցի DC շարժիչ, որը համեմատաբար պարզ է ծրագրավորել և միացնել Arduino- ին: Սովորական L293D IC- ն կարող է օգտագործվել շարժիչը Arduino PWM քորոցից հեշտությամբ քշելու համար, իսկ Arduino- ում բնիկ տոն () գործառույթը կարող է առաջացնել անհրաժեշտ հաճախականություն: Ի զարմանս ինձ, ես DC- ի շարժիչ օգտագործող ոչ մի օրինակ կամ նախագիծ չգտա առցանց, և այս Instructables- ը դա իմ պատասխանն է `դա շտկելու համար: Եկեք սկսենք!

Պ. Ս. Ենթադրում եմ, որ դուք արդեն որոշակի փորձ ունեք Arduino- ի հետ և ծանոթ եք նրա ծրագրավորման լեզվին և սարքավորմանը: Դուք պետք է իմանաք, թե ինչ են զանգվածները, ինչ է PWM- ը և ինչպես օգտագործել այն, և ինչպես են աշխատում լարումը և հոսանքը, պարզապես մի քանի բան նշելու համար: Եթե դեռ այնտեղ չեք կամ նոր եք սկսել Arduino- ն, մի անհանգստացեք. Փորձեք այս մեկնարկի էջը Arduino- ի պաշտոնական կայքից և վերադառնացեք, երբ պատրաստ լինեք::)

Պարագաներ

  • Arduino (ես օգտագործել եմ UNO, բայց եթե ցանկանում եք, կարող եք օգտագործել այլ Arduino)
  • Ստանդարտ 5V DC շարժիչ, ցանկալի է, որ կարողանա օդափոխիչ կցել (տես նկարը «Շրջանի հավաքում» բաժնում)
  • L293D IC
  • Այնքան կոճակ, որքան նշումներ այն երգում, որը ցանկանում եք նվագել
  • Breadboard
  • Jumper լարերը

Քայլ 1: Ակնարկ

Ահա թե ինչպես է աշխատում նախագիծը. Arduino- ն տվյալ հաճախականությամբ կստեղծի քառակուսի ալիք, որը թողարկում է L293D- ին: L293D- ն միացված է արտաքին սնուցման աղբյուրին, որն օգտագործում է շարժիչը սնուցելու համար Arduino- ի կողմից տրված հաճախականությամբ: Կանխելով DC շարժիչի լիսեռի պտտումը, շարժիչը լսվում է անջատման և միացման հաճախականությամբ, ինչը տալիս է հնչերանգ կամ նոտա: Մենք կարող ենք ծրագրավորել Arduino- ն ՝ կոճակները սեղմելիս նոտաներ նվագարկելու կամ դրանք ինքնաբերաբար նվագարկելու համար:

Քայլ 2. Շրջանի հավաքում

Շրջանի հավաքում
Շրջանի հավաքում
Շրջանի հավաքում
Շրջանի հավաքում

Շղթան հավաքելու համար պարզապես հետևեք վերը նշված Fritzing դիագրամին:

Հուշում. Շարժիչից ստացված գրառումը լավագույնս լսվում է, երբ լիսեռը չի պտտվում: Ես շարժիչով շարժիչի լիսեռի վրա տեղադրեցի օդափոխիչ և մի քանի սոսինձ ժապավենով օդափոխիչը անշարժ պահեցի, մինչ շարժիչը աշխատում էր (տես նկարը): Սա կանխեց լիսեռի շրջվելը և ստեղծեց հստակ, լսելի երանգ: Շարժիչից մաքուր երանգ ստանալու համար գուցե ստիպված լինեք ինչ -որ փոփոխություններ կատարել:

Քայլ 3: Ինչպես է աշխատում սխեման

Ինչպես է աշխատում սխեման
Ինչպես է աշխատում սխեման

L293D- ն IC է, որն օգտագործվում է համեմատաբար բարձր լարման, բարձր հոսանքի սարքեր վարելու համար, ինչպիսիք են ռելեները և շարժիչները: Arduino- ն ի վիճակի չէ շարժիչներից շատերին ուղղակիորեն դուրս մղել ելքից (իսկ շարժիչի հետևի EMF- ն կարող է վնասել Arduino- ի զգայուն թվային սխեմաները), ուստի L293D- ի նման IC- ն կարող է օգտագործվել արտաքին սնուցման աղբյուրով `DC շարժիչը հեշտությամբ վարելու համար: L293D- ի մեջ ազդանշան մուտքագրելը նույն ազդանշանը կհանի DC շարժիչին ՝ առանց Arduino- ին վնաս պատճառելու վտանգի:

Վերևում ներկայացված է L293D- ի մատնահետքը/ֆունկցիոնալ սխեման իր տվյալների թերթիկից: Քանի որ մենք վարում ենք միայն 1 շարժիչ (L293D- ն կարող է վարել 2), մեզ անհրաժեշտ է IC- ի միայն մի կողմը: 8 -րդ կապը հզորություն է, 4 -րդ և 5 -րդ կապերը `GND, 1 -ը` Arduino- ից PWM ելք, իսկ 2 -րդ և 7 -րդ կապերը վերահսկում են շարժիչի ուղղությունը: Երբ 2 -րդ կապը ԲԱՐՁՐ է, իսկ 7 -ը ՝ OWԱՐ, շարժիչը պտտվում է մի կողմից, իսկ երբ 2 -րդ LԱOWՐ է, իսկ 7 -ը ՝ ԲԱՐՁՐ, շարժիչը պտտվում է մյուս կողմից: Քանի որ մեզ համար միևնույն է, թե որ ուղղությամբ է պտտվում շարժիչը, կարևոր չէ, որ 2 -րդ և 7 -րդ կապերը OWԱOWՐ են կամ ԲԱՐՁՐ, քանի դեռ դրանք տարբերվում են միմյանցից: 3 -րդ և 6 -րդ կապերը միանում են շարժիչին: Everythingանկության դեպքում կարող եք ամեն ինչ միացնել մյուս կողմին (կապեր 9-16), սակայն տեղյակ եղեք, որ հոսանքի և PWM կապերը փոխում են տեղերը:

Նշում. Եթե դուք օգտագործում եք Arduino, որը չունի յուրաքանչյուր կոճակի համար բավարար կապում, կարող եք օգտագործել ռեզիստորների ցանց `բոլոր անջատիչները մի անալոգային քորոցին միացնելու համար, ինչպես օրինակ այս հրահանգներում: Ինչպես է դա աշխատում, այս նախագծի շրջանակներից դուրս է, բայց եթե երբևէ օգտվել եք R-2R DAC- ից, ապա այն պետք է ծանոթ գտնեք: Նկատի ունեցեք, որ անալոգային քորոցի օգտագործումը կպահանջի ծածկագրի մեծ մասի վերագրանցում, քանի որ կոճակի գրադարանը չի կարող օգտագործվել անալոգային կապում:

Քայլ 4: Ինչպես է գործում ծածկագիրը

Բոլոր կոճակները կառավարելն ավելի հեշտ դարձնելու համար ես օգտագործեցի գրադարան, որը կոչվում էր madleech- ի «Button»: Ես առաջին հերթին ընդգրկեցի գրադարանը: Հաջորդը, 8-22-րդ տողերում ես սահմանեցի Twinkle, Twinkle, Little Star (օրինակ երգը) նվագելու համար անհրաժեշտ նոտաների հաճախականությունները, քորոցը, որը կօգտագործեմ L293D- ը վարելու համար և կոճակները:

Կարգավորման գործառույթում ես նախաստորագրեցի Սերիալը, կոճակները և L293D- ի վարորդի քորոցը դրեցի ելքային ռեժիմի:

Ի վերջո, հիմնական հանգույցում ես ստուգեցի, թե արդյոք կոճակը սեղմված է: Եթե այն ունի, Arduino- ն նվագում է համապատասխան նոտան և տպում նոտայի անունը Սերիական մոնիտորին (օգտակար է իմանալու համար, թե որ գրառումներն են ձեր տախտակի վրա): Եթե նոտա է արձակվում, arduino- ն դադարեցնում է ցանկացած հնչողություն noTone- ով ():

Unfortunatelyավոք, գրադարանի կառուցվածքի ձևի պատճառով ես չկարողացա միջոց գտնել ՝ ստուգելու համար, թե արդյոք կոճակը սեղմված է կամ բաց թողնված է ավելի քիչ պարզ ձևով, քան մեկ գրառման համար 2 պայմանական պայմանների օգտագործումը: Այս ծածկագրի մեկ այլ թերություն այն է, որ եթե դուք միաժամանակ սեղմեք երկու կոճակ, իսկ հետո բացեք դրանցից մեկը, երկու նշումները կդադարեցվեն, քանի որ noTone () - ն դադարեցնում է ցանկացած նշումների ստեղծումը ՝ անկախ նրանից, թե որ նոտան է այն առաջացրել:

Քայլ 5. Երգի ծրագրավորում

Նշումներ նվագարկելու համար կոճակներ օգտագործելու փոխարեն կարող եք նաև ծրագրավորել Arduino- ն ՝ ինքնաբերաբար ձեզ համար մեղեդի նվագելու համար: Ահա առաջին ուրվագծի փոփոխված տարբերակը, որը շարժիչով խաղում է Twinkle, Twinkle, Little Star: Էսքիզի առաջին մասը նույնն է `նշումների հաճախականությունների և տոնային Pin- ի սահմանումը: Մենք հասնում ենք նոր մասի bpm = "100": Ես սահմանում եմ զարկերը մեկ րոպեում (bpm), այնուհետև մաթեմատիկայի միջոցով պարզում եմ, որ րոպեում մեկ զարկի միլիվայրկյանների թիվը հավասար է: Դա անելու համար ես օգտագործեցի մի տեխնիկա, որը կոչվում է ծավալային վերլուծություն (մի անհանգստացեք, դա այնքան էլ դժվար չէ, որքան թվում է): Եթե երբևէ ավագ դպրոցի քիմիայի դասընթաց եք անցել, ապա անպայման չափման վերլուծություն եք օգտագործել միավորների միջև փոխակերպման համար: Լողացողները () կան, որպեսզի հավաստիացնեն, որ հավասարում ոչինչ ոչինչ չի կլորացվում մինչև վերջ:

Երբ մենք ունենք ms/beat- ի թիվը, ես այն համապատասխանաբար բաժանեցի կամ բազմապատկեցի ՝ գտնելու երաժշտության մեջ եղած տարբեր նոտաների տևողության միլիվայրկյան արժեքները: Այնուհետև ես կազմում եմ յուրաքանչյուր գրառման զանգված `ժամանակագրական կարգով, և մեկ այլ` յուրաքանչյուր գրառման տևողությամբ: Կարևոր է, որ յուրաքանչյուր նոտայի ինդեքսը համապատասխանի դրա տևողության ինդեքսին, հակառակ դեպքում ձեր մեղեդին կհնչի: Որպես օրինակ ես այստեղ տեղադրեցի Twinkle, Twinkle, Little Star- ի գրառումները, բայց կարող եք փորձել ցանկացած երգ կամ նշումների հաջորդականություն, որոնք կցանկանայիք:

Իսկական կախարդանքը տեղի է ունենում օղակի գործառույթում: Յուրաքանչյուր նոտայի համար ես նվագում եմ հնչերանգը beat_values զանգվածում նշած ժամանակի ընթացքում: Այստեղ ուշացումն օգտագործելու փոխարեն, որը կհանգեցներ հնչերանգի նվագարկմանը, ես գրանցեցի ծրագիրը սկսած այն պահից, երբ այն սկսվել է millis () գործառույթով և հանել այն ընթացիկ ժամանակից: Երբ ժամանակը գերազանցում է beat_values զանգվածում նշումը նշելու ժամանակը, ես դադարում եմ նոտան: For loop- ից հետո ուշացումն առկա է նշումների միջև բաց ավելացնելու համար ՝ ապահովելով, որ նույն հաճախականությամբ հաջորդ նշումները չմիացվեն միասին:

Քայլ 6: Հետադարձ կապ

Այսքանը այս նախագծի համար է: Եթե կա ինչ -որ բան, որը դուք չեք հասկանում, կամ եթե ունեք որևէ առաջարկ, խնդրում ենք մի հապաղեք կապվել ինձ հետ: Քանի որ սա իմ առաջին հրահանգներն են, ես մեծապես կգնահատեի մեկնաբանություններն ու առաջարկությունները, թե ինչպես բարելավել այս բովանդակությունը: Կտեսնվենք հաջորդ անգամ!

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