- Potrebna strojna oprema:
- Razumevanje funkcije Tone () Arduina:
- Pitches.h glava datoteke:
- Predvajanje glasbenih not na Arduinu:
- Shema in strojna oprema:
- Pojasnilo programa Arduino:
- Delovanje tega Arduino vezja predvajalnika melodij:
Arduino je odličen način za poenostavitev in pospešitev projektov mikrokrmilnika, zahvaljujoč svoji skupnosti razvijalcev, ki so naredili skoraj vse preprosto. Obstaja veliko Arduino projektov, kjer lahko poskusite in se zabavate. Nekateri vaši projekti bodo morda potrebovali nekaj zvočnih dejanj, da vas bodo o nečem obvestili ali pa bodo samo navdušili gledalce. Kaj pa, če bi vam povedal, da lahko skoraj vse tematske pesmi, ki bi jih lahko predvajali na klavir, posnamete na vašem Arduinu s pomočjo preprostega programa in poceni zvočnika Piezo?
V tej vadnici bomo izvedeli, kako enostavno in enostavno je predvajati melodijo na Piezo zvočniku ali zvočniku s pomočjo funkcije Arduino tone (). Na koncu te vadnice boste lahko igrali nekaj znanih tonov Pirates of Caribbean, Crazy Frog, Super Mario in Titanic. Naučili se boste tudi, kako z Arduinom predvajati kateri koli del klavirske glasbe. Preverite video na koncu.
Potrebna strojna oprema:
- Arduino (katera koli različica - tukaj se uporablja UNO)
- Piezo zvočnik / zvočni signal ali kateri koli drug 8ohm zvočnik.
- Breadboard
- Povezovanje žic
- Tipke
- 1k upor (neobvezno)
Razumevanje funkcije Tone () Arduina:
Preden lahko razumemo, kako deluje ton (), moramo vedeti, kako deluje zvočni signal Piezo. O Piezo kristalih smo se morda že naučili v naši šoli, ni nič drugega kot kristal, ki mehanske vibracije pretvarja v elektriko ali obratno. Tu uporabimo spremenljiv tok (frekvenco), za katerega kristal vibrira in tako proizvaja zvok. Da bi Piezo zvočnik sprožil nekaj hrupa, moramo Piezo električni kristal vibrirati, višina in ton hrupa pa sta odvisna od tega, kako hitro kristal vibrira. Zato lahko ton in višino uravnavamo s spreminjanjem frekvence toka.
V redu, kako naj torej dobimo spremenljivo frekvenco od Arduina ? Tu nastopi funkcija tone (). Ton () lahko ustvari določeno frekvenco na določenem zatiču. Po potrebi lahko navedemo tudi trajanje časa. Sintaksa za tone () je
Sintaksni ton (pin, frekvenca) ton (pin, frekvenca, trajanje) Parametri pin: pin, na katerem se generira frekvenca tona: frekvenca tona v hercih - unsigned int duration: trajanje tona v milisekundah (neobvezno) - nepodpisano dolgo
Vrednosti pin-a so lahko kateri koli digitalni pin. Tu sem uporabil zatič številka 8. Pogostost, ki jo je mogoče ustvariti, je odvisna od velikosti časovnika na plošči Arduino. Za UNO in večino drugih običajnih plošč je najmanjša frekvenca, ki jo je mogoče proizvesti, 31Hz, največja frekvenca, ki jo je mogoče proizvesti, pa je 65535Hz. Vendar ljudje slišimo le frekvence med 2000Hz in 5000 Hz.
Pitches.h glava datoteke:
Zdaj vemo, kako ustvariti nekaj šuma s pomočjo funkcije arduino tone () . Kako pa vemo, kakšen ton bo ustvarjen za vsako frekvenco?
Arduino nam je dal tabelo not, ki enači vsako frekvenco do določene vrste glasbenih not. To tabelo z opombami je prvotno napisal Brett Hagman, na delu katere je temeljil ukaz tone () . To tabelo z opombami bomo uporabili za igranje naših tem. Če poznate notno gradivo, bi morali tabelo razumeti, saj so za druge, kot sem jaz, to le še en blok kode.
#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 NOTE_A1 55 #define NOTE_AS1 58 #define 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_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #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 NOTE_AS3 233 #define NOTE_B3 247 #define 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_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define NOTE_Define Nondefdendef 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 11Ef # 12 #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_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #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
Zgornja koda je podana v datoteki glave pitches.h te zip datoteke , samo datoteko morate prenesti in vključiti v našo kodo Arduino, kot je podana na koncu te vadnice, ali uporabiti kodo, navedeno v zip datoteki.
Predvajanje glasbenih not na Arduinu:
Za predvajanje dostojne melodije z uporabo Arduina bi morali vedeti, kaj sestavljajo te melodije. Trije glavni dejavniki, ki so potrebni za predvajanje teme, so
- Vrednost opombe
- Opomba Trajanje
- Tempo
Za predvajanje poljubne vrednosti note imamo datoteko glave pitches.h , zdaj pa bi morali ugotoviti njeno trajanje, da jo predvajamo. Tempo ni nič drugega kot hitrost predvajanja melodije. Ko poznate vrednost in trajanje note, ju lahko uporabite s tonom (), kot je
ton (pinName, vrednost opombe, trajanje opombe);
Za melodije, ki se predvajajo v tej vadnici, sem vam dal opombo Vrednost in trajanje opombe v zaglavni datoteki »themes.h«, s katero jih lahko predvajate v svojih projektih. Če pa imate v svojem rudniku kakšen poseben ton in ga želite predvajati v svojem projektu, preberite naprej… V nasprotnem primeru preskočite to temo in se spustite na naslednjo.
Če želite predvajati kateri koli določen ton, morate pridobiti notno noto določene glasbe in jo pretvoriti v skico Arduino, tako da iz nje preberete vrednost note in trajanje note. Če ste študent glasbe, bi bil to kos torte, drugače bi preživel nekaj časa in si zlomil glavo, kot sem se. Toda ob koncu dneva, ko bo vaš ton zaslišal na zvočniku Piezo, se vam bo vaš trud splačal.
Ko dobite vrednost opombe in trajanje opombe, ju naložite v program znotraj zaglavne datoteke »themes.h«, kot je prikazano spodaj
// ############## ** "ON JE PIRAT" Tematska pesem Karibskih piratov ** ############## // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOT_, NOT_, NOT_, NOT_, NOT_, NOT_ NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_4, NOT__4, NOT__4, NOT__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 Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,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}; // ########### End of He je piratska pesem ############# //
Zgornji blok kode prikazuje vrednost note in trajanje note teme "On je pirat" iz filma Pirati s Karibov. Podobno lahko dodate svojo temo.
Shema in strojna oprema:
Shema tega projekta Arduino Tone Generator Project je prikazana na spodnji sliki:
Povezava je precej preprosta, imamo zvočnik Piezo, ki je povezan z zatičem 8 in Ground of Arduino prek upora 1K. Ta upor 1k je upor za omejevanje toka, ki se uporablja za ohranjanje toka v varnih mejah. Za izbiro zahtevane melodije imamo tudi štiri stikala. En konec stikala je priključen na maso, drugi konec pa na nožice 2, 3, 4 in 5. Stikala bodo imela vlečne upore, ki so omogočeni interno s pomočjo programske opreme. Ker je vezje precej preprosto, ga lahko povežete s pomočjo plošče za kruh, kot je prikazano spodaj:
Pojasnilo programa Arduino:
Ko enkrat razumete koncept, je program Arduino precej naravnost naprej. Popolna koda je podana na koncu vadnice. Če niste seznanjeni z dodajanjem datotek glave, lahko kodo prenesete kot datoteko ZIP od tukaj in jo neposredno naložite na svoj Arduino.
Zgornji dve sta datoteki glave, ki ju je treba dodati. »Pitches.h« se uporablja za enačenje vsake glasbene note z določeno frekvenco, »themes.h« pa vsebuje vrednost note in trajanje note vseh štirih tonov.
#include "pitches.h" #include "themes.h"
Po potrebi se ustvari funkcija za predvajanje vsakega tona. Tukaj, ko se pokliče funkcija Play_Pirates (), se predvaja ton »On je pirat«. Ta funkcija je sestavljena iz tonske funkcije, ki ustvarja frekvenco na številki nožice 8. NoTone (8) se pokliče, da ustavi glasbo, ko se predvaja. Če želite predvajati svoj ton, spremenite Pirates_note in Pirates_duration na novi vrednosti note in trajanja, ki ste ju shranili v vrednost »themes.h«.
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // pretvori trajanje v ton zakasnitve (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1,05; // Tu je 1,05 tempo, povečajte, da predvajate počasnejšo zakasnitev (pauseBetweenNotes); noTone (8); }}
Pin 2, 3, 4 in 5 se uporabljajo za izbiro določenega tona za predvajanje. Ti zatiči se privzeto držijo visoko z uporabo notranjih uporov z uporabo zgornje vrstice kode. Ko pritisnete gumb, ga povlečete na tla.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Spodnji blok kode se uporablja za predvajanje skladbe, ko pritisnete gumb. Prebere digitalno vrednost vsakega gumba in ko postane nizka (nič), domneva, da je gumb pritisnjen in predvaja ustrezen ton s klicem zahtevane funkcije.
if (digitalRead (2) == 0) {Serial.println ("Izbrano -> 'On je pirat'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Izbrano -> 'Nora žaba'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Izbrano -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Izbrano -> 'On je pirat'"); Play_Pirates (); }
Delovanje tega Arduino vezja predvajalnika melodij:
Ko je vaša koda in strojna oprema pripravljena, preprosto zapišite program v svoj Arduino in ton boste lahko predvajali s pritiskom na gumbe. Če imate kakršne koli težave, si oglejte svoj serijski monitor za odpravljanje napak ali v razdelku s komentarji prijavite težavo in z veseljem vam bom pomagal.
Popolno delovanje projekta je prikazano v spodnjem videu. Upam, da vam je bil projekt všeč in bi ga uporabili v nekem projektu ali ustvarili nov ton za vaš projekt. Če je odgovor pritrdilen, delite svoje delo v oddelku za komentarje.