- Požadovaný hardware:
- Pochopení funkce Tone () Arduina:
- Pitches.h záhlaví souboru:
- Přehrávání not na Arduinu:
- Schéma a hardware:
- Vysvětlení programu Arduino:
- Práce na tomto obvodu Melody Player Arduino:
Arduino je vynikající způsob, jak zjednodušit a zrychlit vaše projekty mikrokontrolérů, díky své komunitě vývojářů, díky nimž téměř všechno vypadá jednoduše. Existuje spousta projektů Arduino, které si můžete vyzkoušet a pobavit se. Některé z vašich projektů mohou potřebovat akci zvuků, aby něco informovaly, nebo jen aby zapůsobily na diváky. Co kdybych vám řekl, že téměř všechny tematické písně, které lze hrát na klavír, lze na vašem Arduinu napodobit pomocí jednoduchého programu a levného reproduktoru Piezo?
V tomto tutoriálu se naučíme, jak snadné a snadné je hrát melodii na piezo bzučáku nebo reproduktoru pomocí funkce Arduino tone (). Na konci tohoto tutoriálu budete moci hrát některé slavné tóny Pirátů z Karibiku, Crazy Frog, Super Mario a Titanic. Naučíte se také hrát jakoukoli hudbu na klavír s Arduinem. Na konci zkontrolujte video.
Požadovaný hardware:
- Arduino (libovolná verze - zde se používá UNO)
- Piezo reproduktor / bzučák nebo jakýkoli jiný 8ohmový reproduktor.
- Nepájivá deska
- Připojení vodičů
- Tlačítka
- 1k rezistor (volitelný)
Pochopení funkce Tone () Arduina:
Než pochopíme, jak funguje tone (), měli bychom vědět, jak funguje bzučák Piezo. Možná jsme se v naší škole dozvěděli o krystalech Piezo, není to nic jiného než krystal, který převádí mechanické vibrace na elektřinu nebo naopak. Zde aplikujeme proměnný proud (frekvenci), pro který krystal vibruje, čímž vytváří zvuk. Proto, aby piezoelektrický bzučák vydával nějaký hluk, musíme dát elektrickému krystalu piezo vibrovat, výška a tón šumu závisí na tom, jak rychle vibruje krystal. Tón a výšku tónu lze tedy regulovat změnou frekvence proudu.
Dobře, tak jak získáme proměnnou frekvenci od Arduina ? Tady přichází funkce tón (). Tón () může generovat určitou frekvenci na konkrétním pinu. V případě potřeby lze také uvést dobu trvání. Syntaxe pro tone () je
Syntaxe tón (pin, frekvence) tón (pin, frekvence, doba trvání) Parametry pin: pin, na kterém se má generovat frekvence tónu: frekvence tónu v hertzích - unsigned int duration: doba trvání tónu v milisekundách (volitelně) - dlouho nepodepsáno
Hodnoty kolíku mohou být kterékoli z vašich digitálních kolíků. Zde jsem použil pin číslo 8. Frekvence, kterou lze generovat, závisí na velikosti časovače na vaší desce Arduino. Pro UNO a většinu ostatních běžných desek je minimální frekvence, kterou lze vytvořit, 31 Hz a maximální frekvence, kterou lze vyrobit, 65535 Hz. My lidé však můžeme slyšet pouze frekvence mezi 2 000 Hz a 5 000 Hz.
Pitches.h záhlaví souboru:
Nyní víme, jak vytvořit nějaký šum pomocí funkce arduino tone () . Jak ale víme, jaký druh tónu bude generován pro každou frekvenci?
Arduino nám dalo notovou tabulku, která srovnává každou frekvenci s konkrétním typem notové noty. Tuto tabulku poznámek původně napsal Brett Hagman, na jehož práci byl založen příkaz tone () . Tuto tabulku poznámek použijeme k přehrávání našich témat. Pokud jste někomu obeznámeni s notami, měli byste být schopni pochopit tuto tabulku, pro ostatní, jako jsem já, je to jen další 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_A1 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 POZNÁMKA_D2 #define NOTE_C3 131 #definovat 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#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_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_E6_45 #define NOTE_G6 1568 #definovat 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
Výše uvedený kód je uveden v hlavičkovém souboru pitches.h v tomto zip souboru , stačí si stáhnout a zahrnout tento soubor do našeho Arduino kódu, jak je uveden na konci tohoto tutoriálu, nebo použít kód uvedený v zip souboru.
Přehrávání not na Arduinu:
Chcete-li hrát slušnou melodii pomocí Arduina, měli bychom vědět, co tyto melodie tvoří. Tři hlavní faktory potřebné k hraní tématu jsou
- Hodnota poznámky
- Doba trvání poznámky
- Tempo
Máme soubor záhlaví pitches.h, který přehrává jakoukoli hodnotu noty, nyní bychom měli zjistit jeho konkrétní dobu trvání noty, abychom ji mohli přehrát. Tempo není nic jiného než to, jak rychle by melodie měla hrát. Jakmile budete znát délku Note hodnotu a Všimněte si je můžete použít s tónem () jako
tón (pinName, hodnota poznámky, doba trvání poznámky);
Pro tóny hrané v tomto tutoriálu jsem vám dal notu Hodnota a doba trvání noty v hlavičkovém souboru „themes.h“, pomocí kterých je můžete přehrávat ve svých projektech. Ale pokud máte v dolu nějaký konkrétní tón a chcete jej zahrnout do svého projektu, čtěte dál… Jinak toto téma přeskočte a přejděte k dalšímu.
Chcete-li přehrát jakýkoli konkrétní tón, musíte získat noty konkrétní hudby a převést noty do náčrtu Arduino přečtením hodnoty noty a délky noty z ní. Pokud jste student hudby, bylo by to pro vás hračkou, jinak byste strávili nějaký čas a zlomili jste hlavu jako já. Ale na konci dne, kdy váš tón zazní na bzučáku Piezo, zjistíte, že vaše úsilí stojí za to.
Jakmile budete mít hodnotu noty a dobu trvání noty, načtěte je do programu v hlavičkovém souboru „themes.h“, jak je uvedeno níže
// ############### ** "ON JE PIRÁT" Ústřední melodie Pirátů 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, POZNÁMKA_D4, POZNÁMKA_D4, POZNÁMKA_D4, POZNÁMKA_D4, POZNÁMKA_D4, POZNÁMKA_D4, POZNÁMKA_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, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_D4, POZNÁMKA_D4, NOTE_D4, POZNÁMKA 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, NOTE_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,8,8,8,8,4,4,8,8}; // ############ End of He is a Pirate song ############## //
Výše uvedený blok kódu ukazuje hodnotu noty a délku noty motivu „On je pirát“ z filmu Piráti z Karibiku. Podobně můžete přidat svůj motiv.
Schéma a hardware:
Schéma tohoto projektu projektu Arduino Tone Generator Project je znázorněno na následujícím obrázku:
Připojení je docela jednoduché, máme piezo reproduktor, který je připojen k pinu 8 a uzemnění Arduina přes 1K rezistor. Tento 1k rezistor je rezistor omezující proud, který se používá k udržení proudu v bezpečných mezích. Máme také čtyři přepínače pro výběr požadované melodie. Jeden konec spínače je připojen k zemi a druhý konec je připojen k kolíku 2, 3, 4 a 5. Přepínače budou mít interně pomocí softwaru aktivované odpory. Vzhledem k tomu, že obvod je velmi jednoduchý, lze jej připojit pomocí desky s chlebem, jak je znázorněno níže:
Vysvětlení programu Arduino:
Jakmile pochopíte tento koncept, program Arduino je docela přímočarý. Celý kód je uveden na konci tohoto kurzu. Pokud nejste obeznámeni s přidáváním hlavičkových souborů, můžete si odtud stáhnout kód jako soubor ZIP a přímo jej nahrát do svého Arduina.
Výše uvedené dva jsou soubory záhlaví, které je třeba přidat. „Pitches.h“ se používá k přirovnání každé noty k určité frekvenci a „themes.h“ obsahuje hodnotu noty a délku noty všech čtyř tónů.
#include "pitches.h" #include "themes.h"
Je vytvořena funkce pro přehrávání každého tónu, je-li to požadováno. Tady, když se funkce Play_Pirates () nazývá tón „Bude to pirát“, zazní tón. Tato funkce se skládá z funkce tónu, která produkuje frekvenci na pinu číslo 8. Volá se noTone (8), který zastaví přehrávání hudby. Pokud chcete hrát svůj vlastní tón, změňte Pirates_note a Pirates_duration na nové hodnoty not a trvání, které jste uložili v hodnotě „themes.h“
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // převést dobu trvání na tón zpoždění (8, Pirates_note, noteDuration); int pauseB BetweenNotes = noteDuration * 1,05; // Tady je 1,05 tempo, zvyšte ho, aby se hrálo pomalejší zpoždění (pauseB BetweenNotes); noTone (8); }}
Pin 2, 3, 4 a 5 se používají k výběru konkrétního tónu, který má být přehrán. Tyto piny jsou standardně drženy vysoko pomocí interních pull up rezistorů pomocí výše uvedeného řádku kódu. Když je tlačítko stisknuto, je staženo na zem.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Níže uvedený blok kódu slouží k přehrávání skladby po stisknutí tlačítka. Přečte digitální hodnotu každého tlačítka a při poklesu (nule) předpokládá, že je tlačítko stisknuto, a přehraje příslušný tón vyvoláním požadované funkce.
if (digitalRead (2) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Vybráno -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Vybráno -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selected -> 'He is a Pirate'"); Play_Pirates (); }
Práce na tomto obvodu Melody Player Arduino:
Jakmile je váš kód a hardware připraven, jednoduše vypálte program do svého Arduina a tón byste měli být schopni přehrát pouhým stisknutím tlačítek. Pokud máte nějaké problémy, podívejte se na svůj sériový monitor pro ladění nebo použijte sekci komentářů k nahlášení problému a já vám rád pomůžu.
Kompletní fungování projektu je uvedeno ve videu níže. Doufám, že se vám projekt líbil a využili byste jej v některém ze svých projektů nebo vytvořili nový tón pro svůj projekt. Pokud ano, neváhejte se podělit o svou práci v sekci komentářů.