- Būtina aparatinė įranga:
- Suprasti „ Arduino“ funkciją Tone () :
- Antraštės failas „ pitches.h“ :
- Groja muzikines natas „Arduino“:
- Schema ir techninė įranga:
- „Arduino“ programos paaiškinimas:
- Šios melodijos grotuvo „Arduino“ grandinės darbas:
„Arduino“ yra puikus būdas supaprastinti ir pagreitinti jūsų mikrovaldiklių projektus dėka savo kūrėjų bendruomenės, kurios beveik viskas atrodė paprasta. Čia yra daugybė „Arduino“ projektų, kuriuos galite išbandyti ir linksmintis. Kai kuriems jūsų projektams gali prireikti tam tikrų garsų veiksmų, kad apie ką nors praneštumėte arba tiesiog sužavėtumėte žiūrovus. Ką daryti, jei aš pasakysiu, kad beveik visas temines dainas, kurias galima groti pianinu, „Arduino“ galite imituoti paprastos programos ir pigaus „Piezo“ garsiakalbio pagalba?
Šioje pamokoje sužinosime, kaip paprasta ir lengva groti melodiją „Piezo Buzzer“ arba „Speaker“ naudojant „Arduino tone ()“ funkciją. Šios pamokos pabaigoje galėsite groti keletą garsių Karibų jūros piratų, „Crazy Frog“, „Super Mario“ ir „Titanic“ tonų. Taip pat sužinosite, kaip groti bet kurį fortepijono muzikos kūrinį su „Arduino“. Pabaigoje patikrinkite vaizdo įrašą.
Būtina aparatinė įranga:
- „Arduino“ (bet kuri versija - čia naudojama UNO)
- Pjezo garsiakalbis / „Buzzer“ ar bet kuris kitas 8 ohm garsiakalbis.
- Bandomoji Lenta
- Laidų sujungimas
- Paspauskite mygtukus
- 1k rezistorius (pasirinktinai)
Suprasti „ Arduino“ funkciją Tone () :
Kad galėtume suprasti, kaip veikia tonas (), turėtume žinoti, kaip veikia „Piezo“ garsinis signalas. Apie Piezo kristalus galėjome sužinoti savo mokykloje, tai yra tik kristalas, kuris paverčia mechanines vibracijas elektra arba atvirkščiai. Čia mes naudojame kintamą srovę (dažnį), kuriai kristalas vibruoja, taip sukurdamas garsą. Taigi, norėdami priversti Pjezo garsinį signalą kelti triukšmą, turime priversti Pjezo elektrinį kristalą vibruoti, triukšmo aukštis ir tonas priklauso nuo to, kaip greitai kristalas vibruoja. Taigi toną ir aukštį galima valdyti keičiant srovės dažnį.
Gerai, tai kaip mes gauname kintamą dažnį iš „Arduino“ ? Čia atsiranda funkcija tone (). Tonas () gali sukurti tam tikrą dažnį konkrečiame kaište. Jei reikia, taip pat galima paminėti laiko trukmę. Tono () sintaksė yra
Sintaksės tono (kaištis, dažnis) tonas (kaištis, dažnis, trukmė) Parametrų smeigtukas: kaištis, kuriame generuojamas tono dažnis: tono dažnis hercais - nepasirašyta int trukmė: tono trukmė milisekundėmis (nebūtina) - nepasirašytas ilgas
PIN kodas gali būti bet kuris jūsų skaitmeninis kaištis. Aš čia naudojau PIN kodą 8. Generuojamas dažnis priklauso nuo laikmačio dydžio jūsų „Arduino“ lentoje. UNO ir daugumos kitų įprastų plokščių atveju minimalus dažnis, kurį galima pagaminti, yra 31Hz, o didžiausias - 65535Hz. Tačiau mes, žmonės, girdime tik 2000–5000 Hz dažnius.
Antraštės failas „ pitches.h“ :
Dabar mes žinome, kaip sukelti tam tikrą triukšmą naudojant „ arduino tone“) funkciją . Bet kaip mes žinome, koks tonas bus generuojamas kiekvienam dažniui?
„Arduino“ pateikė mums natų lentelę, kurioje kiekvienas dažnis prilyginamas tam tikram muzikinių natų tipui. Šią užrašų lentelę iš pradžių parašė Brettas Hagmanas, kurio darbu buvo pagrįsta komanda tone () . Šią užrašų lentelę naudosime žaisdami savo temas. Jei esate susipažinęs su natomis, turėtumėte sugebėti suprasti šią lentelę, kitiems, tokiems kaip aš, tai tik dar vienas kodo blokas.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define 58define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_Define__22define_A2 110 # #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define 23_d3 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_D5ine #define NOTE_D5 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_Define 13_Define 13_Define #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_Define #Define NOTE_Define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Šiame ZIP faile aukščiau pateiktas kodas yra pitches.h antraštės faile , jums tiesiog reikia atsisiųsti ir įtraukti šį failą į mūsų „Arduino“ kodą, pateiktą šios pamokos pabaigoje, arba naudoti kodą, nurodytą ZIP faile.
Groja muzikines natas „Arduino“:
Norėdami groti padorią melodiją naudodami „Arduino“, turėtume žinoti, kas yra šios melodijos. Trys pagrindiniai veiksniai, reikalingi norint sužaisti temą, yra
- Užrašo vertė
- Pastaba Trukmė
- Tempo
Mes turime „ pitches.h“ antraštės failą, kad galėtume atkurti bet kokią užrašo vertę, dabar turėtume sužinoti jo konkrečią natos trukmę, kad ją paleistume. „Tempo“ yra ne kas kita, kaip greita melodija. Sužinoję užrašo vertę ir užrašo trukmę, galite juos naudoti naudodami toną (), pavyzdžiui,
tonas („pinName“, „Note“ reikšmė, „Note“ trukmė);
Dėl tonų, grojamų šioje pamokoje, aš suteikiau jums pastabą „Vertė“ ir „Užrašo trukmė“ antraštės faile „themes.h“, kurią naudodami galite juos atkurti savo projektuose. Bet jei turite kokį nors konkretų toną savo kasykloje ir norite jį paleisti savo projekte, skaitykite toliau… Kitaip praleiskite šią temą ir pereikite prie kitos.
Norėdami groti bet kokį konkretų toną, turite gauti šios muzikos natas ir konvertuoti natas į „Arduino“ eskizą, nuskaitydami iš jų natos vertę ir trukmę. Jei esate muzikos studentas, tai būtų torto gabalas jums, dar praleidote šiek tiek laiko ir palaužėte galvą taip, kaip aš. Tačiau dienos pabaigoje, kai jūsų tonas skamba „Piezo“ garsiakalbiu, rasite savo pastangų verta.
Kai turėsite užrašo vertę ir užrašo trukmę, įkelkite juos į programą antraštės faile „themes.h“, kaip parodyta žemiau
// ############## ** "HE IS A PIRATE" Karibų piratų tema tema ############### // int Pirates_note = {PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_4 PASTABA_A3, PASTABA_C4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_E4, PASTABA_F4, PASTABA_F4, PASTABA_F4, PASTABA_4, PASTABA_E4, PASTABA_E4, PASTABA_D4, PASTABA_C4, PASTABA_C4, PASTABA_D4, 0, PASTABA_A4, PASTABA_4, PASTABA_4 PASTABA_C4, PASTABA_C4, PASTABA_C4, PASTABA_C4, PASTABA_D4, PASTABA_C4, PASTABA_D4, 0, 0, PASTABA_3, PASTABA_C4, PASTABA_D4, PASTABA_D4, PASTABA_D4, PASTABA_F4, PASTABA_4, PASTABA_4, PASTABA_, A4, PASTABA_,4 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Piratų trukmė = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,4,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### „He of the Pirate“ daina ############## //
Pirmiau pateiktas kodo blokas rodo filmo „Karibų piratai“ temos „Jis yra piratas“ natos vertę ir trukmę. Galite pridėti savo temą panašiai kaip šis.
Schema ir techninė įranga:
Šio „ Arduino Tone Generator Project“ projekto schema parodyta žemiau esančiame paveikslėlyje:
Ryšys yra gana paprastas, mes turime „Piezo“ garsiakalbį, kuris yra prijungtas prie „Arduino“ 8 kontakto ir „Ground“ per 1K rezistorių. Šis 1k rezistorius yra srovę ribojantis rezistorius, naudojamas išlaikyti srovę saugiose ribose. Taip pat turime keturis jungiklius norimai melodijai pasirinkti. Vienas jungiklio galas yra prijungtas prie žemės, o kitas galas - atitinkamai prie 2, 3, 4 ir 5 kaiščių. Jungikliai turės įsijungti rezistorius, įgalintus viduje naudojant programinę įrangą. Kadangi grandinė yra gana paprasta, ją galima prijungti naudojant duonos lentą, kaip parodyta žemiau:
„Arduino“ programos paaiškinimas:
Kai suprasite sąvoką, „Arduino“ programa yra gana tiesi. Visas kodas pateikiamas mokymo programos pabaigoje. Jei nežinote, kaip pridėti antraštės failus, galite čia atsisiųsti kodą kaip ZIP failą ir tiesiogiai įkelti jį į „Arduino“.
Pirmiau nurodyti du yra antraštės failai, kuriuos reikia pridėti. „Pitches.h“ naudojamas kiekvienai muzikos natai prilyginti tam tikram dažniui, o „themes.h“ yra visų keturių tonų natos vertė ir natos trukmė.
#include "pitches.h" #include "themes.h"
Sukurta funkcija, leidžianti groti kiekvieną toną, kai to reikia. Čia, kai funkcija „ Play_Pirates“ () bus vadinama „Jis yra piratas“, bus grojama. Ši funkcija susideda iš tono funkcijos, kuri sukuria dažnį kaiščio 8 numeriu. „ NoTone“ (8) iškviečiama sustabdyti muziką, kai ji grojama. Jei norite žaisti savo toną, pakeisti Pirates_note ir Pirates_duration į naują pastabą ir trukmę vertybių, kad jūs išsaugojote "themes.h" vertė
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // konvertuoti trukmę į laiko uždelsimo toną (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1,05; // Čia 1.05 yra tempas, padidinkite, kad paleistumėte lėčiau. (PauseBetweenNotes); „noTone“ (8); }}
2, 3, 4 ir 5 kaiščiai naudojami tam, kad būtų galima groti. Šie kaiščiai pagal numatytuosius nustatymus yra aukšti, naudojant vidinius traukimo rezistorius, naudojant aukščiau nurodytą kodo eilutę. Paspaudus mygtuką, jis nuleidžiamas ant žemės.
„pinMode“ (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Žemiau esantis kodo blokas naudojamas dainai paleisti paspaudus mygtuką. Jis nuskaito kiekvieno mygtuko skaitmeninę vertę ir, kai jis tampa žemas (nulis), jis daro prielaidą, kad mygtukas yra paspaustas, ir skambina atitinkamu tonu, iškviesdamas reikiamą funkciją.
if (digitalRead (2) == 0) {Serial.println ("Pasirinktas -> 'Jis yra piratas'"); „Play_Pirates“ (); } if (digitalRead (3) == 0) {Serial.println ("Pasirinkta -> 'Pašėlusi varlė' '); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Pasirinkta -> 'Mario UnderWorld'"); „Play_MarioUW“ (); } if (digitalRead (5) == 0) {Serial.println ("Pasirinktas -> 'Jis yra piratas'"); „Play_Pirates“ (); }
Šios melodijos grotuvo „Arduino“ grandinės darbas:
Kai jūsų kodas ir aparatinė įranga bus paruošta, tiesiog įrašykite programą į „Arduino“ ir turėtumėte galėti atkurti toną paprasčiausiai paspausdami mygtukus. Jei turite kokių nors problemų, pažvelkite į savo serijinį monitorių, kaip derinti, arba naudokite komentarų skyrių, kad praneštumėte apie problemą, ir aš mielai jums padėsiu.
Visas projekto darbas parodytas žemiau esančiame vaizdo įraše. Tikiuosi, kad jums patiko projektas ir jį panaudosite kai kuriuose savo projektuose arba sukursite naują savo projekto toną. Jei taip, nedvejodami pasidalykite savo darbu komentarų skiltyje.