Flašinet

Tato lekce bude vyvrcholením předchozích lekcí arduina, které se týkají práce se zvukem a pak vám již s tímto tématem dám pokoj (možná, uvidíme :-)). Již jsme si řekli, jak vydat z arduina zvuk o určité frekvenci a také jsme si řekli jaký je rozdíl mezi harmonickým hudebním tónem a prachobyčejným zvukem (kdo zapomněl, nechť si osvěží zde).

Pokusím se vysvětlit, jak dostat písničku z notové osnovy do arduina, aby mohly krátké melodie případně oživit nějaké naše konstrukce. Ze zapojení z minulé lekce si vytvoříme jednoduchý přehrávač, který jsem vtipně nazval flašinet. Doufám, že zde není nikdo, kdo by nevěděl co je to flašinet. Pro případné neznalce flašinetího tématu přidávám odkaz na wikipedii (wiki zde), kde je flašinetí téma podrobně rozebráno. Naše konstrukce nebude ale mechanická, jak u starého původního flašinetu, ale elektronická.

Notový zápis

Notový zápis

Hudbu je možné zapsat stejně jako text v knize. Zapisuje se prostřednictvím not do notové osnovy. Ale stejně jako se dá snadno přečíst text v knížce, málokdo umí číst hudbu z notových linek. Protože ale chceme naučit arduino zahrát nějakou tu jednoduchou melodii, musíme se naučit tuto melodii přečíst z notové osnovy a arduinu ji pak přeložit do jeho programového jazyka.

Pokud chceme programovat tóny víme, že musíme využít funkci note() a v závorce uvést dva parametry – frekvenci a délku tónu. Zápis do notové osnovy v podstatě funguje podobně, akorát že o trošku složitěji. Ale v podstatě z notové osnovy zjistíme hlavně výšku tónu (to je naše stará dobrá frekvence tónu) a délku tónu.

Frekvence tónu

Frekvence tónu – výška tónu

Pro zápis not, což jsou vlastně jednotlivé tóny ze kterých se skládá melodie používáme notovou osnovu – to je těch pět linek na které se zapisují tóny. Lidské ucho umí slyšet a lidské hlasivky, popřípadě hudební nástroje umí reprodukovat hudbu o poměrně velkém rozsahu. Kdybychom zapisovali tóny, které nám přijdou rozdílné pouze na pět linek, moc bychom jich tam nesvedli napsat (a melodie by tím pádem byla jen velmi chuďoučká). Naši předkové ale byli koumáci a tak vymysleli způsob, jak zapsat do notové osnovy i poměrně velký rozsah tónů.

Pokud se podíváte na začátek řádku, naleznete tam podivnou značku/klikyhák, který označuje skupinu tónů o určitém rozsahu. Tomuto znaku se říká klíč – asi nejznámější klíč je klíč houslový, kterýžto naleznete hned na prvních pěti linkách ze začátku. Pak stačí jen sledovat umístění noty na lince, nebo mezi linkami a zjistit si podle obrázku které notě odpovídá která frekvence.

Pokud zadáváme hodnotu frekvence ve funkci tone() pomocí čísla, je to hned to první číslo (parametr), který v závorce napíšeme.

Duration – délka tónu

Délka tónu podle obrázku noty

Délku tónu určíme podle grafiky noty (viz. obrázek). Ve funkci ji zadáme ve formě druhého parametru – čísla v závorce funkce tone(). Na notu čtvrťovou používám délku 250, na notu půlovou 500 (celou bych volil jako 1000 a osminovou jako 125). Tato délka odpovídá 4/4 taktu.

Převod prvních tří taktů písně maličká su z not do arduina

Podle tohoto systému tedy můžeme tedy převést jednotlivé noty do frekvencí a délek tónů, což již můžeme vtělit do programu pro naše arduino (předchozí obrázek snadno napoví). V programu je ještě použita proměnná pausa, kterou využívám jednak na oddělení jednotlivých tónů (schválně si zkuste zadat její hodnotu 0 a pochopíte proč tam musí být) a pak také na pauzu mezi takty, já zadávám 300 milisekund.

Projekt Flašinet

Projekt flašinet má fungovat tak, že po stisku tlačítka na elektronickém obvodu se na arduinu spustí program, který přehraje nějakou melodii. Pro zapojení použijeme soustavu součástek z minulé lekce. Teoreticky bychom mohli přehrát osm různých melodií. Sestavte tuto sestavu součástek.

klavírek - flašinet
Využijeme zapojení z projektu klavírek – osm tlačítek a reproduktor, nebo buzzer s ochranným odporem

Na desku arduina odešlete následující kód. Otevřete v příkladech cestu Soubor – Příklady – Digital – toneMelody. Otevřou se vám dvě karty (dvě okénka se záložkami). V jedné bude soubor toneMelody, což je vzorový kód jak zadávat hudbu od autorů programu arduino, a ve druhém je knihovna pitches.h.

Zde bude asi dobré si říci co jsou to knihovny. Knihovny jsou soubory, jejichž obsah se přikládá při překladu programu na desku arduina (k programu, který odesíláme na desku). Knihovny jsou totiž soubory, které poskytují předpřipravené funkce pro tvorbu programů. Knihovna pitches.h nám poskytuje předdefinované frekvence pro jednotlivé tóny (takže nemusíme do funkce tone vkládat hodnoty frekvencí). Shledal jsem to pohodlnější a myslím, že se to tímto způsobem snadněji naučíte.

Do souboru toneMelody si vkopírujte následující kód a uložte ho pod jménem flašinet. Knihovnu pitches.h nechte bez zásahu tak jak je. Kód ze souboru flašinet odešlete na desku. Pokud vyšlo vše jak mělo, měl by „flašinet“ po stisku prvých dvou tlačítek přehrát melodie. Zbývající tlačítka čekají na naprogramování melodie na vás.

/*
Soubor pro projekt fla3inet vzu69vaj9c9 knihovnz pitches.h – viz příklady
Digital – toneMelody
*/
//Vložení knihovny pitches.h
include „pitches.h“
//Proměnná pausa – prodleva mezi tóny
int pausa = 300;
//Inicializace nastavení desky – tlačítka
void setup() {
pinMode (2, INPUT_PULLUP);
pinMode (3, INPUT_PULLUP);
}

//Nekonečná smyčka – flašinet pokaždé přehraje naprogramovanou melodii
void loop() {
//Načtení stavu tlačítek – jsou-li stisknutá
int tlacitko1 = digitalRead(2);
int tlacitko2 = digitalRead(3);

//Naprogramovaná reakce na stisk tlačítka
if (tlacitko1==0)
{
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_B4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_C5, 500);
delay(pausa);
delay(pausa);

tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_G5, 250);
delay(pausa);
tone(13, NOTE_E5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_C5, 500);
delay(pausa);
tone(13, NOTE_B4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_F5, 250);
delay(pausa);
tone(13, NOTE_F5, 250);
delay(pausa);
tone(13, NOTE_E5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_D5, 500);
delay(pausa);
tone(13, NOTE_C5, 500);
delay(pausa);
tone(13, NOTE_A4, 1000);
}
if (tlacitko2==0)
{

tone(13, NOTE_D4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_D4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_D4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_E4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_E4, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_D5, 500);
delay(pausa);
tone(13, NOTE_E5, 250);

delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_B4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_D4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_D4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_D4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_E4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_E4, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_B4, 250);

delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_D5, 500);
delay(pausa);
tone(13, NOTE_E5, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);

tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_B4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 500);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_A4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
delay(pausa);

tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_G4, 250);
delay(pausa);
tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_B4, 500);
delay(pausa);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
tone(13, NOTE_B4, 250);
delay(pausa);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_D5, 250);
delay(pausa);
tone(13, NOTE_C5, 250);
delay(pausa);

tone(13, NOTE_A4, 250);
delay(pausa);
tone(13, NOTE_G4, 1000);
delay(pausa);
}
else
{
noTone(13);
}
}
Program Flašinet

Kód programu sice vypadá dlouhý a složitý, ale v podstatě se jedná pouze o načtení stavu tlačítek a reakci programu na načtené hodnoty.

Úkoly:

1, Zkuste si doprogramovat melodii z písně Maličká su. Na videu máte předvedený začátek.

2, najděte si nějakou jednoduchou melodii z not na google a zkuste ji doprogramovat do flašinetu

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *