Hardware | Pojďme programovat elektroniku | Programování

Pojďme programovat elektroniku: Naučíme Arduino zpívat

  • Dnes proměníme elektrické pulzy ve zvuk
  • Připojíme jednoduchý piezoměnič
  • A zahrajeme si písničku
Pojďme programovat elektroniku: Naučíme Arduino zpívat

Už jsme pomocí arduin a některých dalších mikropočítačů ovládali infračerveným signálem stropní klimatizaci, rozblikávali z webového prohlížeče diodu nebo třeba ovládali reálný čas pomocí modulu RTC s vlastní malou baterií.

Dnes se podíváme na jeden ze základních smyslů každého živého tvora, naučíme totiž arduino vyluzovat zvuk. Když se podíváte na eBay (jen zopakuji, že eBay používám jako jakýsi referenční ceník i pro ostatní asijské e-shopy), najdete v jeho nabídce nepřeberné množství kompletních zvukových modulů se vším všudy.

Je libo MP3 přehrávač nebo třeba FM rádio?

Arduino v takovém případě slouží spíše jen jako ovladač, ale nikoliv jako samotný zpracovatel zvuku. Typickým příkladem jsou třeba drobné destičky DFPlayer Mini v ceně okolo stovky, které obsahují slot na paměťovou kartu s nahrávkami, čip zvukového dekodéru, který si poradí s MP3, WMA i WAV, a nakonec i audio jack připojení sluchátek.

Klepněte pro větší obrázek
eBay je plný modulů MP3 přehrávače včetně slotu pro SD

Svého času uměl každý bastlíř postavit z drobných elektrických komponent rádio. Doba se ale mění, stejně jako v případě MP3 přehrávače tak na eBay seženete nespočet modulů již hotových FM přijímačů TEA5767 včetně antény. I v tomto případě platí, že arduino bude zpravidla skrze sběrnici I2C ovládat jen nastavení přijímací frekvence a o zbytek se již zcela samostatně postará drobný modul o velikosti větší mince.

Klepněte pro větší obrázek
Modul FM rádia

Prask, prask, prask

Pokud jsem však v úvodu zmínil, že dnes naučíme arduino vyluzovat zvuk, myslel jsem tím opravdu zvuk sám o sobě – primitivní elektrické pulzy, které se pak v reproduktoru nebo velkém počítači promění v tón připomínající bzučáky na základních deskách starých počítačů.

Nejprve si připomeňme, co je to vlastně tón. Napoví Wikipedie:

„Za tón je v akustice považován každý zvuk se stálou frekvencí. V hudbě je tón základním stavebním kamenem.“

Abychom rozkmitali membránu reproduktoru, musíme do ní tedy poslat elektrický signál s určitou frekvencí. V našem seriálu Pojďme programovat elektroniku jsme již mnohokrát použili funkci digitalWrite, která na daný pin pošle buď silný, nebo slabý elektrický signál.

Když bych tedy na pin 8 připojil třeba červenou LED diodu a napsal příkaz digitalWrite(8, HIGH), obvod bude pod dostatečným napětím a LED dioda se rozsvítí. Když naopak napíšu digitalWrite(8, LOW), napětí klesne a dioda zhasne.

Klepněte pro větší obrázek
Piezoměnič poslouží jako jednoduchý bzučák s hlasitostí okolo 90 dB

Pokud bych na piny 8 a GND namísto LED diody připojil třeba jednoduchý reproduktor – piezoměnič, který seženete v každém českém elektroobchodě za pár desetikorun, mohl bych pak ve smyčce napsat třeba tento kód:

digitalWrite(8, HIGH);
delayMicroseconds(100);
digitalWrite(8, LOW);
delayMicroseconds(20000);

Bzučákem tedy bude po dobu 100 mikrosekund procházet elektrický proud, který dostatečně vychýlí membránu, aby vytvořila zvukovou vlnu. Vše se projeví hlasitým prasknutím. Následovat bude 20ms pauza a vše se zopakuje.

Klepněte pro větší obrázek
Bzučák připojený k Arduino UNO

Kdybych délku elektrického pulzu zkrátil třeba na 10 mikrosekund, membrána se nestačí pořádně vychýlit, takže vytvoří slabší zvukovou vlnu. Opět se ozve prasknutí, ale bude tišší. Délkou pulzu tedy mohu ovládat hlasitost.

Praskání se mění v tón

Jak jsem však napsal výše, budu tyto čtyři řádky kódu opakovat ve smyčce stále dokola, takže neuslyším jedno prasknutí, ale rovnou 50 prasknutí za sekundu. To je již dostatečná rychlost k tomu, aby lidský sluch přestal rozlišovat jednotlivé prodlevy, a rychlý praskot si vyloží jako relativně souvislý zvuk – tón s frekvencí asi 50 Hz.

Takový tón c malé oktávy má frekvenci 130,8 Hz, čili stačí zkrátit prodlevu mezi elektrickými pulzy, abych dosáhl této rychlosti, a postupně si mohu zahrát celou stupnici.

Vše usnadní funkce tone

V případě Arduina se o toto citlivé časování jednotlivých pulzů nemusíme příliš starat, k dispozici totiž máme dvě funkce tone a noTone.

Kdybych tedy chtěl vyloudit výše zmíněné c, stačí napsat třeba:

tone(8,131);
delay(5000);
noTone(8);

Pokud bude na pinu 8 stále připojený třeba jednoduchý piezoměnič, vyloudí pět sekund trvající tón c.

No a to už jsme na dobré cestě k tomu, abychom si skutečně zapípali nějakou souvislejší melodii. Třeba tuto z jednoho z mnoha příkladů na webu arduino.cc.

Pojďme se tedy opět podívat na komentovaný kód, jak by to mohlo celé fungovat.

/*
Nejprve si nadefinujeme zakladni tony a jejich frekvence pro nasi melodii.
*/

#define c 261
#define d 294
#define e 329
#define f 349 
#define g 392
#define a 440 
#define h 493 
#define C 523

// Pole po sobe jdoucich tonu nasi melodie
int melodieTony[] = {C, h, g, C, h, e, C, c, g, a, C};

// Doby jednotlivych tonu
int melodieDoby[] = {16, 16, 16, 8, 8, 16, 16, 16, 16, 8, 8};

// Tempo (cim vyssi hodnota, tim delsi budou doby jednotlivych tonu a melodie tahlejsi)
int tempo = 3;

// Funkce, ktera projde obe pole a postupne vygeneruje elektricke pulzy pro reproduktor
void zahrajZnelku(){
 for(int i = 0; i < sizeof(melodieTony)/2; i++){
 tone(9, melodieTony[i]);
 delay(melodieDoby[i] * tempo * 10);
 }
 noTone(9);
}

// Nic nenastavujeme, takze setup bude tentokrat prazdny
void setup(){}

// Zahraj melodii, pockej 10 sekund a vse opakuj
void loop(){
 zahrajZnelku();
 delay(10000);
}

Primitivní bzučák tedy bez problému vyloudí poměrně hlasitou melodii a ve spojení s naším předchozím dílem, ve kterém jsem se věnoval RTC hodinám, by mohl třeba sloužit jako jednoduchý zvukový budík.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Namísto bzučáku modul audio jacku a jednoduchý zvukový čip AY-3-8910A , na který se podíváme příště

Zároveň můžete bzučák vyměnit za modul audio jacku a Arduino pak připojit třeba k reprobedýnkám. To už by si ale zasloužilo nějaký zajímavější zvuk. A na něj se podíváme v dalším pokračování, z dalekého východu totiž dorazila další žlutá obálka, ve které se skrýval jednoduchý zvukový čip AY-3-8910A. Příště si tedy uděláme poctivou osmibitovou diskotéku.

Diskuze (2) Další článek: Tesla uvádí solární střechy a vylepšené baterie Powerwall 2 pro domy

Témata článku: Hardware, Pojďme programovat elektroniku, Programování, Arduino, Infračervený signál, Jednoduchý reproduktor, FM Radio, GME, GND, Předchozí díl, Obálka, Mini destička, Elektrický signál, Audio jack, Puls, Pauza, Nahrávka, Pulse, Drobný modul, FM rádio, Budík, Slabé Wi-fi, Osmibit, Elektrický proud, Dekodér


Určitě si přečtěte

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

David Polesný | 38

Týden Živě: Zapomeňte na širokoúhlý televizor. Budoucnost patří vertikálním

Týden Živě: Zapomeňte na širokoúhlý televizor. Budoucnost patří vertikálním

** Vertikální televizory do každé rodiny ** Desítky budou mít problém s počítači s malými disky ** Facebook se chlubil novinkami na F8

David Polesný, Jakub Čížek | 24

10 nejtragičtějších leteckých nehod od roku 2000. Jedna je stále záhadou

10 nejtragičtějších leteckých nehod od roku 2000. Jedna je stále záhadou

** Letecká doprava patří k nejbezpečnějším způsobům cestování ** Čerstvá aféra s Boeingy Max důvěru v bezpečnost létání narušila ** Připomeňme si největší nedávné letecké nehody. Každá ale přispěje k bezpečnosti dalších letů

Karel Kilián | 33

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

** Získejte děti pro matematiku a základy techniky ** Kupte jim hračku nebo stavebnici, které vdechnou vlastní život ** Vybrali jsme 16 stavebnic pro nejmenší caparty i vás samotné

Jakub Čížek | 17

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

** Je lepší nabušený Photoshop, nebo program s jedním tlačítkem? ** Photolemur si myslí to druhé ** Tento fotoeditor neumí skoro nic, a přitom (skoro) všechno

Jakub Čížek | 23



Aktuální číslo časopisu Computer

Velký test fotolabů

Oklamali jsme rozpoznání obličeje

13 tipů pro rychlejší Wi-Fi

Test NVMe SSD 500 GB