Turinys:

Dainų kūrimas naudojant „Arduino“ir nuolatinės srovės variklį: 6 žingsniai
Dainų kūrimas naudojant „Arduino“ir nuolatinės srovės variklį: 6 žingsniai

Video: Dainų kūrimas naudojant „Arduino“ir nuolatinės srovės variklį: 6 žingsniai

Video: Dainų kūrimas naudojant „Arduino“ir nuolatinės srovės variklį: 6 žingsniai
Video: Линейный блок питания. Действительно линейный? 2024, Lapkritis
Anonim
Dainų kūrimas naudojant „Arduino“ir nuolatinės srovės variklį
Dainų kūrimas naudojant „Arduino“ir nuolatinės srovės variklį

Kitą dieną, naršydamas kai kuriuos straipsnius apie „Arduino“, pastebėjau įdomų projektą, kuriame buvo naudojamos „Arduino“valdomi žingsniniai varikliai trumpoms melodijoms kurti. „Arduino“naudojo PWM (impulso pločio moduliacijos) kaištį, kad paleistų žingsninį variklį tam tikrais dažniais, atitinkančiais muzikines natas. Laiku nustatant, kokie dažniai grojo, iš žingsninio variklio buvo galima išgirsti aiškią melodiją.

Tačiau kai pats išbandžiau, pastebėjau, kad mano turimas žingsninis variklis negali suktis pakankamai greitai, kad sukurtų toną. Vietoj to aš naudojau nuolatinės srovės variklį, kurį palyginti paprasta užprogramuoti ir prijungti prie „Arduino“. Įprastas L293D IC gali būti naudojamas lengvai varyti variklį iš „Arduino PWM“kaiščio, o „Arduino“vietinio tono () funkcija gali generuoti reikiamą dažnį. Mano nuostabai, internete neradau jokių pavyzdžių ar projektų, naudojančių nuolatinės srovės variklį, todėl ši instrukcija yra mano atsakas į tai. Pradėkime!

P. S. Manau, kad jūs jau turite tam tikrą patirtį su „Arduino“ir esate susipažinęs su jo programavimo kalba ir aparatine įranga. Turėtumėte žinoti, kas yra masyvai, kas yra PWM ir kaip jį naudoti, ir kaip veikia įtampa ir srovė. Jei dar nesate ar tik pradėjote „Arduino“, nesijaudinkite: išbandykite šį pradžios puslapį iš oficialios „Arduino“svetainės ir grįžkite, kai būsite pasiruošę.:)

Prekės

  • „Arduino“(aš naudojau UNO, bet jei norite, galite naudoti kitą „Arduino“)
  • Standartinis 5 V nuolatinės srovės variklis, pageidautina tas, prie kurio galima prijungti ventiliatorių (žr. Paveikslėlį „Grandinės surinkimas“)
  • L293D IC
  • Tiek daug mygtukų, kiek norimų paleisti dainos pastabų
  • Bandomoji Lenta
  • Trumpieji laidai

1 žingsnis: apžvalga

Projektas veikia taip: „Arduino“tam tikru dažniu sukurs kvadratinę bangą, kurią perduos L293D. „L293D“yra prijungtas prie išorinio maitinimo šaltinio, kurį jis naudoja varikliui maitinti tokiu dažniu, kokį nurodo „Arduino“. Neleidžiant nuolatinės srovės variklio velenui suktis, galima girdėti, kaip variklis išsijungia ir įsijungia tokiu dažniu, kuris skleidžia toną ar pastabą. Mes galime užprogramuoti „Arduino“groti užrašus paspaudus mygtukus arba automatiškai juos paleisti.

2 žingsnis: grandinės surinkimas

Grandinės surinkimas
Grandinės surinkimas
Grandinės surinkimas
Grandinės surinkimas

Norėdami surinkti grandinę, tiesiog sekite aukščiau pateiktą Fritzing diagramą.

Patarimas: Pastaba iš variklio geriausiai girdima, kai velenas nesisuka. Aš uždėjau ventiliatorių ant variklio veleno ir naudoju tam tikrą lipnią juostą, kad ventiliatorius nejudėtų, kol variklis veikia (žr. Paveikslėlį). Tai neleido velenui pasisukti ir sukėlė aiškų, girdimą toną. Jums gali tekti šiek tiek pakoreguoti, kad iš variklio gautumėte švarų toną.

3 žingsnis: Kaip veikia grandinė

Kaip veikia grandinė
Kaip veikia grandinė

L293D yra IC, naudojamas santykinai aukštos įtampos, didelės srovės įtaisams, tokiems kaip relės ir varikliai, valdyti. „Arduino“negali vairuoti daugumos variklių tiesiai iš savo išėjimo (o variklio galinis EMF gali sugadinti jautrią „Arduino“skaitmeninę grandinę), todėl tokį IC kaip L293D galima naudoti su išoriniu maitinimo šaltiniu, kad būtų galima lengvai valdyti nuolatinės srovės variklį. Įvedus signalą į L293D, tas pats signalas bus perduotas nuolatinės srovės varikliui, nerizikuojant sugadinti „Arduino“.

Viršuje yra „L293D“kontaktinė/funkcinė schema iš jos duomenų lapo. Kadangi vairuojame tik 1 variklį (L293D gali vairuoti 2), mums reikia tik vienos IC pusės. 8 kaištis yra galia, 4 ir 5 kaiščiai yra GND, 1 kaištis yra PWM išėjimas iš „Arduino“, o 2 ir 7 kaiščiai kontroliuoja variklio kryptį. Kai 2 kaištis yra AUKŠTAS, o 7 - ŽEMAS, variklis sukasi viena kryptimi, o kai 2 kaištis yra ŽEMAS, o 7 kaištis yra AUKŠTAS, variklis sukasi į kitą pusę. Kadangi mums nerūpi, kuria kryptimi sukasi variklis, nesvarbu, ar 2 ir 7 kaiščiai yra ŽEMI, ar AUKŠTI, jei jie skiriasi vienas nuo kito. 3 ir 6 kaiščiai jungiami prie variklio. Jei norite, galite viską prijungti prie kitos pusės (9-16 kaiščiai), tačiau atminkite, kad maitinimo ir PWM kaiščiai keičia vietas.

Pastaba: jei naudojate „Arduino“, kuriame nėra pakankamai kaiščių kiekvienam mygtukui, galite naudoti rezistorių tinklą, kad visus jungiklius prijungtumėte prie vieno analoginio kaiščio, kaip nurodyta šioje instrukcijoje. Kaip tai veikia, šis projektas neapima, tačiau jei kada nors naudojote R-2R DAC, turėtumėte jį pažinti. Atminkite, kad naudojant analoginį kaištį reikės perrašyti dideles kodo dalis, nes mygtukų bibliotekos negalima naudoti su analoginiais kaiščiais.

4 žingsnis: kaip veikia kodas

Kad būtų lengviau valdyti visus mygtukus, naudojau biblioteką, kurią madleech pavadino „Button“. Pirmą kartą įtraukiau biblioteką. Toliau 8–22 eilutėse aš apibrėžiau natų, reikalingų „Twinkle“, „Twinkle“, „Little Star“(pavyzdinei dainai), dažnį, kaištį, kurį naudosiu L293D, ir mygtukus.

Sąrankos funkcijoje inicijavau seriją, mygtukus ir nustatiau L293D tvarkyklės kaištį į išvesties režimą.

Galiausiai pagrindinėje kilpoje patikrinau, ar nebuvo paspaustas mygtukas. Jei yra, „Arduino“groja atitinkamą natą ir spausdina užrašo pavadinimą į serijinį monitorių (naudinga žinoti, kurios natos yra jūsų duonos lentoje). Išleidus natą, arduino sustabdo bet kokį garsą be noTone ().

Deja, dėl bibliotekos struktūros aš negalėjau rasti būdo patikrinti, ar mygtukas buvo paspaustas ar paleistas mažiau žodžiu, nei naudojant 2 sąlygas vienai pastabai. Kitas šio kodo trūkumas yra tas, kad jei vienu metu paspausite du mygtukus ir atleisite vieną iš jų, abi natos bus sustabdytos, nes noTone () sustabdo bet kokių užrašų generavimą, neatsižvelgiant į tai, kuri pastaba jį suaktyvino.

5 žingsnis: dainos programavimas

Užuot naudoję mygtukus pastaboms leisti, taip pat galite užprogramuoti „Arduino“automatiškai paleisti melodiją. Čia yra modifikuota pirmojo eskizo versija, kurioje ant variklio groja „Twinkle“, „Twinkle“, „Little Star“. Pirmoji eskizo dalis yra ta pati - natos dažnis ir tonas „Pin“. Prie naujos dalies pasiekiame bpm = "100". Aš nustatiau dūžių per minutę (bpm) skaičių, o paskui naudoju tam tikrą matematiką, kad išsiaiškinčiau, kiek milisekundžių per taktą lygios bpm. Norėdami tai padaryti, aš naudoju metodą, vadinamą matmenų analize (nesijaudinkite - tai nėra taip sunku, kaip skamba). Jei kada nors lankėte chemijos kursus vidurinėje mokykloje, jūs tikrai panaudojote matmenų analizę, kad konvertuotumėte tarp vienetų. Plūdės () yra skirtos užtikrinti, kad niekas lygtyje nebūtų suapvalintas iki galo, siekiant tikslumo.

Gavę ms/ritmo skaičių, aš jį atitinkamai padalinau arba padauginau, kad surastų muzikoje rastų skirtingų natų trukmių milisekundes reikšmes. Tada aš padarau masyvą kiekvienos natos chronologine tvarka, o kitą - su kiekvienos natos trukme. Labai svarbu, kad kiekvienos natos rodyklė atitiktų jos trukmės indeksą, kitaip jūsų melodija skambės. Čia kaip pavyzdį įdėjau „Twinkle“, „Twinkle“, „Little Star“užrašus, tačiau galite išbandyti bet kokią norimą dainą ar užrašų seką.

Tikroji magija vyksta ciklo funkcijoje. Kiekvienai natai groju toną, kurį nurodiau „beat_values“masyve. Užuot čia naudojęs atidėjimą, dėl kurio tonas nebūtų leidžiamas, aš įrašiau laiką nuo programos pradžios su funkcija „millis“() ir atėmiau jį iš dabartinio laiko. Kai laikas viršija laiką, kurį nurodžiau pastabai „beat_values“masyve, sustabdau užrašą. Vėlavimas po ciklo „for“yra skirtas pridėti tarpą tarp natų, užtikrinant, kad tolesnio to paties dažnio pastabos nesimaišytų.

6 žingsnis: grįžtamasis ryšys

Tai šiam projektui. Jei kažko nesuprantate arba turite pasiūlymų, nedvejodami susisiekite su manimi. Kadangi tai yra mano pirmosios instrukcijos, būčiau labai dėkingas už komentarus ir pasiūlymus, kaip pagerinti šį turinį. Pasimatysim kitą kartą!

Rekomenduojamas: