- Požadovaný hardvér:
- Pochopenie funkcie Tone () Arduina:
- Pitches.h hlavičky súboru:
- Prehrávanie hudobných nôt na Arduine:
- Schéma a hardvér:
- Vysvetlenie programu Arduino:
- Fungovanie tohto obvodu Melody Player Arduino:
Arduino je vynikajúci spôsob, ako zjednodušiť a zrýchliť vaše projekty mikrokontrolérov, vďaka svojej komunite vývojárov, vďaka ktorej vyzerá takmer všetko jednoducho. Existuje veľa projektov Arduino, ktoré si môžete vyskúšať a zabaviť sa. Niektoré z vašich projektov môžu vyžadovať zvukovú akciu, aby o niečom upozornili alebo len aby zapôsobili na divákov. Čo keby som vám povedal, že takmer všetky tematické piesne, ktoré je možné hrať na klavíri, je možné na vašom Arduine napodobniť pomocou jednoduchého programu a lacného reproduktora Piezo?
V tomto tutoriále sa dozvieme, aké jednoduché a ľahké je hrať melódiu na piezo bzučiaku alebo reproduktore pomocou funkcie Arduino tone (). Na konci tohto tutoriálu budete môcť hrať niektoré známe tóny Pirátov z Karibiku, Crazy Frog, Super Mario a Titanic. Naučíte sa tiež, ako hrať s Arduinom akúkoľvek klavírnu hudbu. Skontrolujte video na konci.
Požadovaný hardvér:
- Arduino (ľubovoľná verzia - tu sa používa UNO)
- Piezo reproduktor / bzučiak alebo akýkoľvek iný 8ohmový reproduktor.
- Nepál
- Pripojenie drôtov
- Tlačidlá
- 1k rezistor (voliteľný)
Pochopenie funkcie Tone () Arduina:
Skôr ako pochopíme, ako funguje tón (), mali by sme vedieť, ako funguje piezoelektrický bzučiak. O kryštáloch Piezo sme sa v našej škole mohli dozvedieť, nie je to nič iné ako kryštál, ktorý premieňa mechanické vibrácie na elektrinu alebo naopak. Tu aplikujeme premenlivý prúd (frekvenciu), pre ktorý kryštál vibruje, čím vytvára zvuk. Preto, aby bol piezoelektrický bzučiak vydaný nejaký hluk, musíme urobiť, aby elektrický kryštál piezo vibroval, výška a tón šumu závisí od toho, ako rýchlo kryštál vibruje. Tón a výšku tónu je teda možné ovládať zmenou frekvencie prúdu.
Dobre, tak ako získame premennú frekvenciu od Arduina ? Tu prichádza na rad funkcia tone (). Tón () môže generovať konkrétnu frekvenciu na konkrétnom kolíku. V prípade potreby je možné uviesť aj časovú dĺžku. Syntax pre tone () je
Syntax tón (pin, frekvencia) tón (pin, frekvencia, doba trvania) Parametre pin: pin, na ktorom sa má generovať frekvencia tónu: frekvencia tónu v hertzoch - nepodpísaná int doba trvania: doba tónu v milisekundách (voliteľné) - dlho nepodpísané
Hodnoty špendlíka môžu byť ktorékoľvek z vašich digitálnych špendlíkov. Použil som tu pin číslo 8. Frekvencia, ktorú je možné generovať, závisí od veľkosti časovača na vašej doske Arduino. Pre UNO a väčšinu ostatných bežných dosiek je minimálna frekvencia, ktorá sa dá vytvoriť, 31 Hz a maximálna frekvencia, ktorá sa dá vytvoriť, 65535 Hz. My ľudia však môžeme počuť iba frekvencie medzi 2 000 Hz a 5 000 Hz.
Pitches.h hlavičky súboru:
Teraz vieme, ako generovať šum pomocou funkcie arduino tone () . Ako však vieme, aký druh tónu bude generovaný pre každú frekvenciu?
Arduino nám dalo notovú tabuľku, ktorá každú frekvenciu prirovnáva k určitému typu hudobnej noty. Túto tabuľku poznámok pôvodne napísal Brett Hagman, na ktorého práci bol založený príkaz tone () . Túto tabuľku poznámok použijeme na hranie našich tém. Ak ste oboznámení s notami, mali by ste byť schopní porozumieť tejto tabuľke, pre ostatných ako ja je to len ďalší blok kódu.
#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_A__ 55 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_A2 110 #define #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 23 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#definine 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_DS5 6228 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_DS6 1245 #define 13_de6 #definine 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_E7 2637 #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
Vyššie uvedený kód je uvedený v hlavičkovom súbore pitches.h v tomto zip súbore , stačí si stiahnuť a zahrnúť tento súbor do nášho Arduino kódu, ako je uvedený na konci tohto tutoriálu, alebo použiť kód uvedený v zip súbore.
Prehrávanie hudobných nôt na Arduine:
Ak chcete hrať slušnú melódiu pomocou Arduina, mali by sme vedieť, čo tieto melódie predstavuje. Tri hlavné faktory potrebné na hranie témy sú
- Hodnota poznámky
- Trvanie poznámky
- Tempo
Máme súbor záhlavia pitches.h na prehrávanie ľubovoľnej hodnoty noty, teraz by sme mali zistiť jeho konkrétnu dobu trvania noty. Tempo nie je nič iné ako rýchlosť melódie. Akonáhle budete poznať dĺžku Note hodnotu a Všimnite si ich môžete použiť s tónom () ako
tón (pinName, hodnota poznámky, doba trvania poznámky);
Za tóny hrané v tomto tutoriále som vám dal poznámku Hodnota a Trvanie poznámky v hlavičkovom súbore „themes.h“, pomocou ktorých ich môžete hrať vo svojich projektoch. Ale ak máte v bani nejaký konkrétny tón a chcete ho zahrnúť do svojho projektu, čítajte ďalej… Inak preskočte túto tému a prepadnite k ďalšej.
Ak chcete prehrať akýkoľvek konkrétny tón, musíte získať noty konkrétnej hudby a previesť noty na skicu Arduino tak, že z nej prečítate hodnotu noty a trvanie noty. Ak ste študentom muzikálu, bolo by to pre vás hračkou, inak by ste strávili nejaký čas a zlomili ste hlavu ako ja. Ale na konci dňa, keď váš tón zaznie na bzučiaku Piezo, zistíte, že vaše úsilie stojí za to.
Keď budete mať hodnotu noty a trvanie noty, načítajte ich do programu v hlavičkovom súbore „themes.h“, ako je uvedené nižšie
// ############### ** „ON JE PIRÁT“ Ústredná pieseň Pirátov z Karibiku ** ############### // 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, __4_ 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, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_D4,_4_ 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_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, POZNÁMKA_4, NOTE_44 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,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############## //
Vyššie uvedený blok kódu zobrazuje hodnotu noty a trvanie noty z témy „Je to pirát“ z filmu Piráti z Karibiku. Svoju tému môžete pridať podobne.
Schéma a hardvér:
Schéma tohto projektu projektu Arduino Tone Generator Project je znázornená na nasledujúcom obrázku:
Pripojenie je dosť jednoduché, máme piezo reproduktor, ktorý je pripojený k pinu 8 a uzemneniu Arduina cez rezistor 1K. Tento rezistor 1k je rezistor obmedzujúci prúd, ktorý sa používa na udržanie prúdu v bezpečných medziach. Máme tiež štyri prepínače na výber požadovanej melódie. Jeden koniec spínača je pripojený k zemi a druhý koniec je pripojený k pólu 2, 3, 4 a 5. Prepínače budú mať pull-up rezistory interne povolené pomocou softvéru. Pretože obvod je dosť jednoduchý, je možné ho pripojiť pomocou chleba, ako je uvedené nižšie:
Vysvetlenie programu Arduino:
Keď pochopíte tento koncept, program Arduino je vcelku jasný. Celý kód je uvedený na konci tutoriálu. Ak nepoznáte pridávanie hlavičkových súborov, môžete si odtiaľto stiahnuť kód ako súbor ZIP a priamo ho nahrať do svojho Arduina.
Vyššie uvedené dva sú hlavičkové súbory, ktoré je potrebné pridať. „Pitches.h“ sa používa na priradenie každej noty k určitej frekvencii a „themes.h“ obsahuje hodnotu noty a trvanie noty všetkých štyroch tónov.
#include "pitches.h" #include "themes.h"
Je vytvorená funkcia na prehranie každého tónu, keď je to potrebné. Tu, keď sa funkcia Play_Pirates () volá, zaznie tón „Je to pirát“. Táto funkcia pozostáva z funkcie tónu, ktorá vytvára frekvenciu na kolíku číslo 8. Ozve sa signál noTone (8), ktorý zastaví prehrávanie hudby. Ak chcete hrať svoj vlastný tón, zmeňte Pirates_note a Pirates_duration k novým hodnotám poznámky a trvanie, ktoré ste uložili v "themes.h" hodnotu
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // previesť trvanie na tón časového oneskorenia (8, Pirates_note, noteDuration)); int pauseB BetweenNotes = noteDuration * 1,05; // Tady je 1,05 tempo, zväčšite, aby sa hralo pomalšie oneskorenie (pauseB BetweenNotes); noTone (8); }}
Kolíky 2, 3, 4 a 5 sa používajú na výber konkrétneho tónu, ktorý sa má prehrať. Tieto piny sú štandardne držané vysoko pomocou interných pull up rezistorov pomocou vyššie uvedeného riadku kódu. Po stlačení tlačidla sa stiahne na zem.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Nižšie uvedený blok kódu sa používa na prehrávanie skladby po stlačení tlačidla. Načíta digitálnu hodnotu každého tlačidla a pri poklese (nula) predpokladá, že je stlačené tlačidlo a prehrá príslušný tón vyvolaním požadovanej funkcie.
if (digitalRead (2) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Vybraté -> 'Crazy Frog'")); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Vybraté -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); }
Fungovanie tohto obvodu Melody Player Arduino:
Keď je váš kód a hardvér pripravený, program jednoducho napálite do svojho Arduina a tón by ste mali vedieť prehrať jednoduchým stlačením tlačidiel. Ak máte nejaké problémy, pozrite sa na ladenie vášho sériového monitora alebo nahláste problém pomocou sekcie komentárov. Radi vám pomôžeme.
Kompletné fungovanie projektu je zobrazené na videu nižšie. Dúfam, že sa vám projekt páčil a využili by ste ho v niektorých svojich projektoch alebo vytvorili nový tón pre váš projekt. Ak áno, neváhajte a zdieľajte svoju prácu v sekcii komentárov.