Tento zvukový senzor pro Arduino poskytuje digitální výstup OUT, tedy informaci sepnuto-nesepnuto. Hranici pro detekci požadované hladiny hluku je možné nastavit pomocí trimru, který je umístěn přímo na modulu. Nejdůležitější součástkou modulu je samozřejmě elektretový mikrofon společně s operačním zesilovačem LM393. Deska pro zvukový senzor také obsahuje indikační červenou LED diodu, která se rozsvítí při hluku přesahujícím nastavenou hranici. Vzhledem k této vlastnosti zvukového senzoru ho tedy lze využít jako detektor hluku v okolí, například pro kontrolu běhu motoru či zavzdušnění čerpadla, nebo také pro detekci klepání či tlesknutí.
Tento modul se zvukovým senzorem má 3 propojovací piny. Propojení s Arduinem je jednoduché a uvedené na obrázku níže. Stačí tedy připojit Gnd na zem, OUT na libovolný digitální pin a +5V na 5V napájení Arduino desky. Signál OUT je v klidovém režimu roven napájecímu napětí a při detekování hluku se přepne do log0, tedy napětí rovnému přibližně Gnd (0-0,2 V).
Ukázkový kód pro zapojení a vyzkoušení zvukového senzoru obsahuje jako první inicializaci digitálního vstupu zvukového senzoru a proměnných, které slouží pro detekci sepnutí nastavené hladiny hluku, sepnutí Alarm módu, měření času od sepnutí a nastavení počtu milisekund pro uvedení do klidového režimu od narušení. V podprogramu setup nejprve nastavíme komunikaci po sériové lince s rychlostí 9600 baud a poté nastavíme vstup ze zvukového senzoru jako digitální. V loop smyčce se nachází příkazy, které při každém průběhu načtou hodnotu digitálního vstupu do proměnné „hluk“ a poté kontrolují, jestli nebylo detekováno překročení nastavené hranice hluku. Při detekci je pak do proměnné „casSepnuti“ uložen pomocí funkce „millis()“ aktuální čas od zapnutí Arduina při neaktivovaném Alarmu je vytištěna zpráva „Detekce hluku!“. Po této zprávě se následně nastaví proměnná pro Alarm jako splněná a neopakuje se tedy při nové detekci tištění informace. Při novém průběhu smyčkou loop je v případě klidového režimu zkontrolována doba mezi aktuálním časem a časem uloženým při posledním sepnutí. V případě, že rozdíl těchto časů je větší, než jsme si nastavili v proměnné „pauzaPoSepnuti“, a zároveň byl v předchozím případě spuštěn Alarm, dojde k vytištění zprávy o přepnutí do klidového režimu a je vynulována proměnná Alarm.
// Arduino zvukový senzor // číslo pinu připojeného senzoru const int senzor = 2; // proměnná pro detekci sepnutí // nastavené hladiny hluku int hluk = HIGH; // proměnná pro sepnutí Alarm módu boolean Alarm = false; // časová proměnná pro měřeni času sepnutí unsigned long casSepnuti; // časová proměnná pro nastavení počtu milisekund // pro uvedení do klidového stavu od narušení int pauzaPoSepnuti = 500; void setup () { // komunikace přes sériovou linku rychlosti 9600 baud Serial.begin(9600); // inicializace digitálního vstupu pinMode (senzor, INPUT); } void loop () { // načtení hodnoty digitálního vstupu hluk = digitalRead (senzor); // při detekci nastavené hladiny hluku if (hluk == LOW) { // uložení času sepnutí casSepnuti = millis(); // při první detekci vytiskne zprávu o detekci hluku // pro nové tisknutí musí proběhnout vrácení do klidového režimu if (!Alarm){ Serial.println("Detekce hluku!"); Alarm = true; } } // při klidovém režimu udělej následující else { // pokud je rozdíl mezi časem sepnutí a aktuálním časem // vetší než nastavená pauzaPoSepnuti a zároveň byl sepnuty Alarm, // vytiskni informaci o klidovém režimu a nastav Alarm pro nové použití if( (millis()-casSepnuti) > pauzaPoSepnuti && Alarm){ Serial.println("Klidovy rezim."); Alarm = false; } } }
Po nahrání programu do Arduino desky si můžeme otevřít Sériový monitor a sledovat informace o detekci nastavené hladiny hluku při jejím narušení a následném klidu. Musíme však počítat s tím, že bude nutné umístit celý modul blízko detekovaného objektu, aby jsme zamezili falešným spuštěním od nežádoucích zdrojů.
Seznam použitých komponent:
http://dratek.cz/arduino/883-arduino-zvukovy-senzor-1420494561.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/844-arduino-nepajive-pole.html
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1063-arduino-vodice-samec-samec-40-kusu.html