- Potřebné materiály:
- Kruhový diagram:
- Použití metody regrese k výpočtu dB z hodnoty ADC:
- Program Arduino pro měření hladiny zvuku v dB:
- Práce s měřičem hladiny zvuku Arduino:
- Zesilovač s obvodem filtrů:
Hlukové znečištění skutečně začalo získávat na důležitosti díky vysoké hustotě obyvatelstva. Normální lidské ucho mohlo slyšet hladiny zvuku od 0 dB do 140 dB, ve kterých jsou hladiny zvuku od 120 dB do 140 dB považovány za šum. Hlasitost nebo hladina zvuku se běžně měří v decibelech (dB), máme nějaké přístroje, které by dokázaly měřit zvukové signály v dB, ale tyto měřiče jsou mírně drahé a bohužel nemáme out of box senzorový modul pro měření hladiny zvuku v decibelech. A není ekonomické kupovat drahé mikrofony pro malý projekt Arduino, který by měl měřit hladinu zvuku v malé učebně nebo obývacím pokoji.
V tomto projektu tedy použijeme normální mikrofon Electret Condenser s Arduinem a pokusíme se měřit hladinu akustického nebo hlukového znečištění v dB co nejblíže skutečné hodnotě. K zesílení zvukových signálů použijeme normální obvod zesilovače a přivedeme jej do Arduina, ve kterém použijeme regresní metodu pro výpočet zvukových signálů v dB. Abychom zkontrolovali, zda jsou získané hodnoty správné, můžeme použít aplikaci „Sound Meter“ pro Android, pokud máte lepší měřič, můžete jej použít pro kalibraci. Nezapomeňte, že tento projekt nemá za cíl měřit dB přesně a dá pouze hodnoty co nejblíže skutečné hodnotě.
Potřebné materiály:
- Arduino UNO
- Mikrofon
- LM386
- 10K variabilní POT
- Rezistory a kondenzátory
Kruhový diagram:
Obvod pro tento měřič úrovně zvuku Arduino je velmi jednoduchý, ve kterém jsme použili obvod zesilovače zvuku LM386 k zesílení signálů z kondenzátorového mikrofonu a jeho dodání do analogového portu Arduino. Tento integrovaný obvod LM386 jsme již použili k vytvoření nízkonapěťového zvukového zesilovače Circuit a obvod víceméně zůstává stejný.
Zisk tohoto konkrétního operačního zesilovače lze nastavit od 20 do 200 pomocí odporu nebo kondenzátoru přes pin 1 a 8. Pokud jsou ponechány volné, bude zisk nastaven jako 20 ve výchozím nastavení. Pro náš projekt jsme dosáhli maximálního možného zisku tohoto obvodu, proto používáme mezi piny 1 a 8 kondenzátor s hodnotou 10uF, všimněte si, že tento pin je citlivý na polaritu a záporný pin kondenzátoru by měl být připojen k pinu 8. obvod je napájen 5V pinem z Arduina.
Kondenzátor C2 se používá k filtrování stejnosměrného šumu z mikrofonu. V podstatě, když mikrofon snímá zvuk, zvukové vlny budou převedeny na střídavé signály. S tímto AC signálem může být spojen nějaký stejnosměrný šum, který bude filtrován tímto kondenzátorem. Podobně i po zesílení se kondenzátor C3 používá k filtrování jakéhokoli stejnosměrného šumu, který by mohl být přidán během zesílení.
Použití metody regrese k výpočtu dB z hodnoty ADC:
Jakmile jsme připraveni na náš obvod, můžeme připojit Arduino k počítači a nahrát ukázkový program „Analog Read Serial“ z Arduina, abychom zkontrolovali, zda z mikrofonu dostáváme platné hodnoty ADC. Nyní musíme převést tyto hodnoty ADC na dB.
Na rozdíl od jiných hodnot, jako je měření teploty nebo vlhkosti, není měření dB přímým úkolem. Protože hodnota dB není lineární s hodnotou ADC. Existuje několik způsobů, jak můžete dosáhnout, ale každý možný krok, který jsem zkoušel, mi nepřinesl dobré výsledky. Toto fórum Arduino si můžete přečíst zde, pokud si to chcete vyzkoušet.
Pro svou aplikaci jsem nepotřeboval větší přesnost při měření hodnot dB, a proto jsem se rozhodl použít jednodušší způsob přímé kalibrace hodnot ADC s hodnotami dB. Pro tuto metodu budeme potřebovat měřič SPL (měřič SPL je nástroj, který dokáže číst hodnoty dB a zobrazit je), ale bohužel jsem ho neměl a určitě většina z nás nebude. Můžeme tedy použít aplikaci pro Android nazvanou „Sound meter“, kterou lze zdarma stáhnout z obchodu Play. Existuje mnoho takových typů aplikací a můžete si stáhnout cokoli podle vašeho výběru. Tyto aplikace používají vestavěný mikrofon telefonu k detekci úrovně šumu a zobrazení na našem mobilním telefonu. Nejsou příliš přesné, ale určitě by fungovaly pro náš úkol. Začněme tedy instalací aplikace pro Android, dole při otevření vypadalo něco jako níže
Jak jsem řekl dříve, vztah mezi dB a analogovými hodnotami nebude lineární, a proto musíme tyto dvě hodnoty porovnávat v různých intervalech. Stačí si poznamenat hodnotu ADC zobrazovaného na obrazovce pro různé dB zobrazené na vašem mobilním telefonu. Vzal jsem asi 10 čtení a vypadaly takto níže, můžete se trochu lišit
Otevřete stránku aplikace Excel a zadejte tyto hodnoty, prozatím budeme používat Excel k nalezení regresních hodnot pro výše uvedené číslo. Předtím pojďme vykreslit graf a zkontrolovat, jak se oba týkají, moje vypadala takto níže.
Jak vidíme, hodnota dB nesouvisí lineárně s ADC, což znamená, že nemůžete mít společný multiplikátor pro všechny hodnoty ADC, abyste získali ekvivalentní hodnoty dB. V takovém případě můžeme použít metodu „lineární regrese“. V zásadě převede tuto nepravidelnou modrou čáru na nejbližší možnou přímku (černou čáru) a dá nám rovnici této přímky. Tuto rovnici lze použít k nalezení ekvivalentní hodnoty dB pro každou hodnotu ADC, kterou Arduino měří.
V aplikaci Excel máme modul plug-in pro analýzu dat, který automaticky vypočítá regresi pro vaši sadu hodnot a zveřejní její data. Nebudu se zabývat tím, jak to udělat s aplikací Excel, protože je mimo rámec tohoto projektu, je také snadné pro vás Google a naučit se to. Jakmile vypočítáte regresi pro danou hodnotu, aplikace Excel poskytne některé hodnoty, jak je uvedeno níže. Zajímají nás pouze čísla, která jsou zvýrazněna níže.
Jakmile získáte tato čísla, budete moci vytvořit následující rovnici jako
ADC = (11,003 * dB) - 83,2073
Od kterého můžete odvodit dB, které mají být
dB = (ADC + 83,2073) / 11,003
Možná budete muset řídit svou vlastní rovnici, protože kalibrace se může lišit. Udržujte však tuto hodnotu v bezpečí, protože ji budeme potřebovat při programování Arduina.
Program Arduino pro měření hladiny zvuku v dB:
Kompletní program pro měření dB je uveden níže, níže je vysvětleno několik důležitých řádků
V těchto dvou řádcích načteme hodnotu ADC pinu A0 a převedeme ji na dB pomocí rovnice, kterou jsme právě odvodili. Tato hodnota dB nemusí být přesná na skutečnou hodnotu dB, ale zůstává do značné míry blízká hodnotám zobrazeným v mobilní aplikaci.
adc = analogRead (MIC); // Odečtěte hodnotu ADC ze zesilovače dB = (adc + 83,2073) / 11,003; // Převést hodnotu ADC na dB pomocí hodnot regrese
Abychom zkontrolovali, zda program funguje správně, přidali jsme také LED k digitálnímu kolíku 3, který má svítit vysoko po dobu 1 s, když Arduino měří hlasitý zvuk nad 60 dB.
if (dB> 60) {digitalWrite (3, HIGH); // rozsvítí LED (HIGH je úroveň napětí) delay (1000); // čekání na druhou digitalWrite (3, LOW); }
Práce s měřičem hladiny zvuku Arduino:
Jakmile jste připraveni na kód a hardware, jednoduše nahrajte kód a otevřete sériový monitor a podívejte se na hodnoty dB měřené vaším Arduino. Testoval jsem tento kód v mém pokoji, kde nebyl příliš hluk, kromě provozu venku, a dostal jsem níže uvedené hodnoty na svém sériovém monitoru a aplikace pro Android také zobrazila něco podobného
Kompletní fungování projektu lze najít na videu na konci této stránky. Můžete použít k promítání k detekci zvuku v místnosti a ke kontrole, zda existuje nějaká aktivita nebo kolik hluku je generováno v každé třídě nebo něco takového. Právě jsem udělal LED, aby šla vysoko na 2 sekundy, pokud je zvuk zaznamenán nad 60 dB.
Práce je podivně uspokojivá, ale lze ji určitě použít pro projekty a další základní prototypy. Po několika dalších kopáních jsem zjistil, že problém byl ve skutečnosti s hardwarem, který mi stále občas způsoboval hluk. Takže jsem vyzkoušel další obvody, které se používají v deskách mikrofonů s jiskrovou zábavou, které mají dolní propust a horní propust. Vysvětlil jsem vám níže uvedený obvod, který můžete vyzkoušet.
Zesilovač s obvodem filtrů:
Zde jsme použili zesilovače pro dolní propust a horní propust pro snížení šumu v tomto obvodu měření hladiny zvuku, aby bylo možné zvýšit přesnost.
V tomto výše uvedeném obvodu jsme použili populární zesilovač LM358 k zesílení signálů z mikrofonu. Spolu se zesilovačem jsme také použili dva filtry, horní propust je tvořen R5, C2 a dolní propust je používán C1 a R2. Tyto filtry jsou navrženy tak, aby umožňovaly frekvenci pouze od 8 Hz do 10 KHz, protože dolní propust filtruje cokoli pod 8 Hz a horní propust filtruje cokoli nad 15 kHz. Tento kmitočtový rozsah je vybrán proto, že můj kondenzátorový mikrofon pracuje pouze od 10 Hz do 15 kHz, jak je uvedeno v datovém listu níže.
Pokud se váš požadavek na frekvenci změní, můžete pomocí níže uvedených vzorců vypočítat hodnotu rezistoru a kondenzátoru pro požadovanou frekvenci.
Frekvence (F) = 1 / (2πRC)
Všimněte si také, že zde použitá hodnota rezistoru také ovlivní zisk zesilovače. Níže je uveden výpočet hodnoty rezistoru a kondenzátoru použitého v tomto obvodu. Zde si můžete stáhnout list aplikace Excel pro úpravu hodnot frekvence a výpočet regresních hodnot.
Bývalý okruh fungoval podle mých očekávání uspokojivě, takže jsem tento nikdy nezkoušel. Pokud jste náhodou vyzkoušeli tento obvod, dejte mi vědět, jestli funguje lépe než ten předchozí, pomocí komentářů.