Pokud jste někdy obdivovali, jak se světlo rozsvítí tlesknutím nebo jiným hlasitým zvukem, možná vás napadlo postavit si něco podobného také. A proč ne? Se snímačem zvuku a Arduinem můžeme vytvořit třeba světlo reagující na tlesknutí, jednoduchý alarm nebo zvukový indikátor.
V tomto návodu si ukážeme, jak funguje elektretový mikrofon, jaký je rozdíl mezi analogovým a digitálním výstupem snímače a jak oba způsoby využít v jednoduchém Arduino projektu.
Jak funguje elektretový mikrofon?
Srdcem našeho snímače je elektretový mikrofon. Uvnitř najdeme velmi tenkou pružnou membránu a pevnou elektrodu, které společně fungují podobně jako malý kondenzátor. Když na mikrofon dopadne zvuková vlna, membrána se rozkmitá a mění se její vzdálenost od pevné elektrody. Tím se mění kapacita a vzniká elektrický signál odpovídající zachycenému zvuku.
Označení elektretový pochází od materiálu, který v sobě dokáže dlouhodobě uchovávat elektrický náboj. Mikrofon proto nepotřebuje vysoké polarizační napětí jako klasický kondenzátorový mikrofon. Uvnitř mikrofonní kapsle bývá také malý tranzistor FET, který pomáhá velmi slabý signál z mikrofonu předat dalšímu obvodu.
Samotný mikrofon ale ještě není celý náš snímač. Na malé desce jsou další součástky, které nám umožní signál jednoduše připojit k Arduinu.
Co najdeme na modulu snímače zvuku?
Na modulu najdeme čtyři vývody označené AO, G, + a DO. Dva slouží k napájení a další dva představují různé možnosti, jak informaci o zachyceném zvuku dostat do Arduina.
- + – napájení modulu, v našem případě 5 V
- G – zem, připojíme na GND Arduina
- AO (Analog Output) – analogový výstup s okamžitou hodnotou signálu z mikrofonu
- DO (Digital Output) – digitální výstup, který se přepne po překročení nastaveného prahu
Pozor na písmeno O a číslici 0! Na modulu označuje AO „Analog Output“, zatímco na Arduinu budeme tento výstup připojovat například na analogový pin A0 (A nula).
Na desce je také víceotáčkový potenciometr (proměnlivý rezistor). Ten nenastavuje analogový výstup AO ani skutečnou citlivost samotného mikrofonu. Slouží k nastavení prahové hodnoty pro digitální výstup DO. O porovnání signálu s touto hodnotou se stará komparátor LM393.
Teď už víme, co jednotlivé piny dělají. Vyzkoušíme si nejdříve analogový výstup a potom jednodušší digitální variantu.
Analogové zapojení snímače zvuku
Pomocí analogového výstupu můžeme sledovat, jak se signál z mikrofonu mění. Arduino převede napětí na analogovém vstupu na číslo v rozsahu 0 až 1023 a my s touto hodnotou můžeme dále pracovat.
Co budeme potřebovat?
- řídicí desku Arduino UNO nebo jinou kompatibilní desku Arduino s USB konektorem
- snímač zvuku s elektretovým mikrofonem
- LED
- rezistor 220 Ω
- propojovací vodiče M/M
- nepájivé kontaktní pole
- USB kabel A–B
Komponenty zapojíme podle následujícího schématu.

Schéma zapojení vytvořeno v programu Fritzing (fritzing.org).
Důležité je správně připojit také napájení: vývod + snímače připojíme na 5 V Arduina a vývod G na GND. Analogový výstup AO připojíme na pin A0. LED ovládáme z digitálního pinu 13 přes rezistor 220 Ω.
Program pro analogové zapojení mikrofonu
Program je poměrně jednoduchý. Z analogového pinu A0 čteme hodnotu pomocí funkce analogRead() a ukládáme ji do proměnné sensorValue. Arduino UNO převede naměřené napětí na číslo v rozsahu 0 až 1023.
Hodnotu potom porovnáváme s proměnnou threshold, tedy s naším nastaveným prahem. Hodnota 500 je pouze výchozí příklad – správnou hodnotu je nejlepší zjistit přímo při měření.
Po nahrání programu otevřete Serial Monitor a sledujte hodnoty nejprve v tichu a potom při tlesknutí nebo jiném hlasitém zvuku. U tohoto typu modulu je analogový signál invertovaný, takže silnější zvuk může způsobit pokles naměřené hodnoty. Proto v našem programu testujeme, zda je hodnota menší než nastavený práh.
Potenciometrem na modulu tuto analogovou hodnotu nenastavujeme – potenciometr využijeme až u digitálního výstupu DO.
// pin, kam je připojený výstup AO mikrofonu int sensorPin = A0; // pin pro připojení LED int ledPin = 13; // proměnná pro naměřenou hodnotu int sensorValue = 0; // nastavení prahové hodnoty int threshold = 500; void setup() { // nastavení ledPinu jako výstupu pinMode(ledPin, OUTPUT); // spuštění sériové komunikace Serial.begin(9600); } void loop() { // přečtení analogové hodnoty na A0 a uložení do sensorValue sensorValue = analogRead(sensorPin); // výpis hodnoty do Serial Monitoru Serial.println(sensorValue); // pokud hodnota klesne pod nastavený práh if (sensorValue < threshold) { // zapnutí LED digitalWrite(ledPin, HIGH); delay(2000); } else { // vypnutí LED digitalWrite(ledPin, LOW); } }
Pokud vám LED reaguje příliš často, nebo naopak vůbec, změňte hodnotu proměnné threshold podle toho, co vidíte v Serial Monitoru. Každý modul a každé prostředí se mohou trochu lišit.
Digitální zapojení snímače zvuku
Druhá možnost je ještě jednodušší. Tentokrát nebudeme zkoumat konkrétní analogovou hodnotu, ale necháme rozhodnutí na samotném modulu. Výstup DO může nabývat pouze dvou stavů – LOW nebo HIGH.
Potenciometrem na modulu nastavíme prahovou úroveň. Komparátor LM393 potom porovnává signál z mikrofonu s touto hodnotou. Jakmile je nastavený práh překročen, digitální výstup DO se u našeho modulu přepne do stavu HIGH. Aktivaci digitálního výstupu zároveň signalizuje LED přímo na modulu.
Zapojení je téměř stejné jako v předchozím příkladu. Napájení + a G zůstává připojené na 5 V a GND, pouze místo analogového výstupu AO použijeme výstup DO, který připojíme na digitální pin D2.

Schéma zapojení vytvořeno v programu Fritzing (fritzing.org).
Program pro digitální zapojení mikrofonu
U digitálního výstupu už nemusíme pracovat s hodnotami od 0 do 1023. Arduino pouze zjišťuje, zda je na pinu stav LOW (0), nebo HIGH (1). Hranici, při které se výstup přepne, tentokrát nastavujeme potenciometrem přímo na modulu.
Otáčejte potenciometrem postupně a sledujte indikační LED na snímači. Cílem je nastavit práh tak, aby modul nereagoval na běžný hluk v místnosti, ale zareagoval například na tlesknutí.
// pin, kam je připojený výstup DO mikrofonu int sensorPin = 2; // pin pro připojení LED int ledPin = 13; // proměnná pro stav digitálního vstupu int val = 0; void setup() { // nastavení ledPinu jako výstupu pinMode(ledPin, OUTPUT); // nastavení sensorPinu jako vstupu pinMode(sensorPin, INPUT); // spuštění sériové komunikace Serial.begin(9600); } void loop() { // načtení stavu digitálního vstupu val = digitalRead(sensorPin); // výpis hodnoty do Serial Monitoru Serial.println(val); // při překročení nastaveného prahu if (val == HIGH) { // zapnutí LED digitalWrite(ledPin, HIGH); } else { // vypnutí LED digitalWrite(ledPin, LOW); } }
Pokud LED při krátkém zvuku jen rychle problikne, je to v pořádku – digitální výstup reaguje pouze v okamžiku, kdy je nastavený práh překročen.
Co můžeme se snímačem zvuku postavit?
Teď už umíme pracovat s oběma výstupy snímače. AO využijeme tam, kde chceme sledovat změny signálu podrobněji, zatímco DO je ideální pro jednoduché rozhodnutí: zvuk překročil nastavený práh, nebo nepřekročil.
Snímač můžeme využít třeba pro světlo reagující na tlesknutí, jednoduchý zvukový alarm, indikátor hluku nebo světelné efekty reagující na hudbu. Pozor ale na jednu věc – tento modul nerozeznává slova ani hlasové příkazy. Dokáže reagovat na změnu nebo úroveň zvuku, ale nepozná rozdíl mezi povelem „rozsviť“ a tlesknutím.
A co nahrávání skutečného zvuku? Analogový výstup sice obsahuje měnící se signál z mikrofonu, ale Arduino UNO a tento jednoduchý snímač nejsou ideální kombinací pro kvalitní záznam řeči nebo hudby. Pro skutečné nahrávání zvuku je vhodnější použít mikrofonní modul určený pro audio a řešit správnou vzorkovací frekvenci, převod signálu a ukládání dat.
A je hotovo!
Teď už víte, jak funguje elektretový mikrofon, jaký je rozdíl mezi výstupy AO a DO a jak oba připojit k Arduinu. Vyzkoušeli jsme si také dva způsoby zpracování zvuku – vlastní porovnání analogové hodnoty v programu a jednoduchou detekci pomocí komparátoru na modulu.
Teď už zbývá vymyslet, na jaký zvuk bude reagovat váš vlastní projekt. Další inspiraci najdete v našich návodech HWKITCHEN.
