- Potrebni materiali:
- Shema vezja:
- Uporaba regresijske metode za izračun dB iz vrednosti ADC:
- Program Arduino za merjenje ravni zvoka v dB:
- Delovanje merilnika ravni zvoka Arduino:
- Ojačevalnik s filtrskim vezjem:
Hrupno onesnaževanje je zaradi velike gostote prebivalstva zares začelo pridobivati na pomenu. Običajno človeško uho lahko sliši raven zvoka od 0 dB do 140 dB, pri čemer se raven zvoka od 120 dB do 140 dB šteje za hrup. Glasnost ali raven zvoka se običajno meri v decibelih (dB), imamo nekaj instrumentov, ki bi lahko merili zvočne signale v dB, vendar so ti merilniki rahlo dragi in na žalost nimamo modula senzorja za merjenje ravni zvoka v decibelih. In ni ekonomično kupiti drage mikrofone za majhen projekt Arduino, ki naj bi meril raven zvoka v majhni učilnici ali dnevni sobi.
Torej bomo v tem projektu uporabili običajen mikrofon Electret Condenser z Arduino in poskusili izmeriti raven onesnaženosti z zvokom ali hrupom v dB čim bližje dejanski vrednosti. Uporabili bomo običajno ojačevalno vezje za ojačanje zvočnih signalov in njegovo dovajanje v Arduino, v katerem bomo z izračunom zvočnih signalov v dB uporabili regresijsko metodo. Če želite preveriti, ali so dobljene vrednosti pravilne, lahko uporabimo aplikacijo za merjenje zvoka za android, če imate boljši merilnik, ga lahko uporabite za kalibracijo. Upoštevajte, da ta projekt ni namenjen natančnemu merjenju dB in bo dal vrednosti, čim bližje dejanski vrednosti.
Potrebni materiali:
- Arduino UNO
- Mikrofon
- LM386
- 10K spremenljivka POT
- Upori in kondenzatorji
Shema vezja:
Vezje tega merilnika nivoja zvoka Arduino je zelo preprosto, v katerem smo uporabili vezje avdio ojačevalnika LM386 za ojačanje signalov iz kondenzatorskega mikrofona in njegovo dovajanje v analogna vrata Arduino. Ta IC LM386 smo že uporabili za izdelavo nizkonapetostnega avdio ojačevalnega vezja in vezje je bolj ali manj enako.
Dobiček tega posebnega ojačevalnika lahko nastavite od 20 do 200 z uporabo upora ali kondenzatorja na nogah 1 in 8. Če ostanejo prosti, bo ojačanje privzeto nastavljeno na 20. Za naš projekt smo uporabili največji možni dobiček tega vezja, zato med zatiči 1 in 8 uporabljamo kondenzator vrednosti 10uF. Upoštevajte, da je ta zatič občutljiv na polarnost in da mora biti negativni zatič kondenzatorja priključen na zatič 8. Kompletni ojačevalnik vezje napaja 5V pin iz Arduina.
Kondenzator C2 se uporablja za filtriranje enosmernega šuma iz mikrofona. Ko mikrofon zazna zvok, se zvočni valovi pretvorijo v izmenične signale. Ta AC signal ima lahko nekaj enosmernega šuma, ki ga bo ta kondenzator filtriral. Podobno se tudi po ojačitvi s kondenzatorjem C3 filtrira morebitni enosmerni šum, ki bi bil morda dodan med ojačevanjem.
Uporaba regresijske metode za izračun dB iz vrednosti ADC:
Ko smo pripravljeni z našim vezjem, lahko Arduino povežemo z računalnikom in naložimo primer programa »Analog Read Serial« iz Arduina, da preverimo, ali iz našega mikrofona prejemamo veljavne vrednosti ADC. Zdaj moramo pretvoriti te vrednosti ADC v dB.
Za razliko od drugih vrednosti, kot sta merjenje temperature ali vlažnosti, merjenje dB ni enostavna naloga. Ker vrednost dB ni linearna z vrednostjo ADC-jev. Obstaja le nekaj načinov, na katere lahko pridete, vendar mi vsak poskusen korak ni prinesel dobrih rezultatov. Tu lahko preberete ta forum Arduino, če želite poskusiti.
Za svojo aplikacijo pri merjenju vrednosti dB nisem potreboval veliko natančnosti, zato sem se odločil za enostavnejši način neposrednega umerjanja vrednosti ADC z vrednostmi dB. Za to metodo bomo potrebovali merilnik SPL (merilnik SPL je instrument, ki lahko bere vrednosti dB in ga prikaže), a na žalost ga nisem imel in prepričan, da ga večina ne bo. Tako lahko uporabimo android aplikacijo, imenovano “Sound meter”, ki jo lahko brezplačno prenesete iz trgovine za predvajanje. Obstaja veliko takšnih vrst aplikacij in lahko prenesete karkoli po svoji izbiri. Te aplikacije uporabljajo vgrajeni mikrofon telefona, da zaznajo raven hrupa in ga prikažejo na našem mobilnem telefonu. Niso zelo natančni, a bi zagotovo delali za našo nalogo. Začnimo torej z namestitvijo aplikacije za Android, moja, ko se je odprla, je bila spodaj videti nekako tako
Kot sem že rekel, razmerje med dB in analognimi vrednostmi ne bo linearno, zato moramo ti dve vrednosti primerjati v različnih intervalih. Zapišite si samo vrednost ADC, ki je prikazana na zaslonu za različne dB, prikazane na vašem mobilnem telefonu. Vzel sem približno 10 odčitkov in spodaj so izgledali tako, morda se nekoliko razlikujete
Odprite stran excel in vnesite te vrednosti, za zdaj bomo z Excelom našli regresijske vrednosti za zgornjo številko. Pred tem si narišimo graf in preverimo, kako sta oba povezana, moj je bil spodaj videti tako.
Kot lahko vidimo, da vrednost dB ni linearno povezana z ADC, kar pomeni, da ne morete imeti skupnega množitelja za vse vrednosti ADC, da bi dobili enakovredne vrednosti dB. V takem primeru lahko uporabimo metodo "linearne regresije". V bistvu bo to nepravilno modro črto pretvoril v najbližjo možno ravno črto (črna črta) in nam dal enačbo te ravne črte. To enačbo lahko uporabimo za iskanje enakovredne vrednosti dB za vsako vrednost ADC, ki jo meri Arduino.
V Excelu imamo vtičnik za analizo podatkov, ki samodejno izračuna regresijo za vaš nabor vrednosti in objavi njegove podatke. Ne bom opisoval, kako to narediti z excelom, saj je to zunaj obsega tega projekta, prav tako je enostavno, da ga poiščete in se ga naučite. Ko izračunate regresijo za vrednost, bo Excel dal nekaj vrednosti, kot je prikazano spodaj. Zanimajo nas le številke, ki so poudarjene spodaj.
Ko dobite te številke, boste lahko oblikovali spodnjo enačbo, kot je
ADC = (11,003 * dB) - 83,2073
Iz česar lahko izpeljete dB
dB = (ADC + 83.2073) / 11.003
Morda boste morali voziti svojo enačbo, saj se umerjanje lahko razlikuje. Vendar naj bo ta vrednost varna, saj jo bomo potrebovali med programiranjem Arduina.
Program Arduino za merjenje ravni zvoka v dB:
Celoten program za merjenje dB je podan spodaj, nekaj pomembnih vrstic je pojasnjenih spodaj
V teh zgornjih dveh vrsticah preberemo vrednost ADC zatiča A0 in jo pretvorimo v dB z uporabo enačbe, ki smo jo pravkar izpeljali. Te vrednosti dB morda ne bomo natančno določili prave vrednosti dB, vendar ostaja precej blizu vrednosti, prikazanih v mobilni aplikaciji.
adc = analogRead (MIC); // preberemo vrednost ADC iz ojačevalnika dB = (adc + 83.2073) / 11.003; // Pretvorimo vrednost ADC v dB z uporabo vrednosti regresije
Da bi preverili, ali program deluje pravilno, smo na digitalni zatič 3 dodali tudi LED, ki je 1 sekundo visoko nastavljen, ko Arduino meri glasen hrup nad 60 dB.
if (dB> 60) {digitalWrite (3, HIGH); // vklop LED (HIGH je nivo napetosti) zakasnitev (1000); // čakamo na drugi digitalWrite (3, LOW); }
Delovanje merilnika ravni zvoka Arduino:
Ko ste pripravljeni na kodo in strojno opremo, samo naložite kodo in odprite serijski monitor, da si ogledate vrednosti dB, ki jih izmeri vaš Arduino. To kodo sem preizkušal v svoji sobi, kjer ni bilo veliko hrupa, razen zunanjega prometa, na serijskem monitorju pa sem dobil spodnje vrednosti, aplikacija Android pa je prikazala tudi nekaj blizu tega
Celotno delo projekta najdete v videoposnetku na koncu te strani. Z njim lahko projicirate, da zaznate zvok v sobi in preverite, ali je kakšna dejavnost ali koliko hrupa nastaja v vsaki učilnici ali kaj podobnega. Pravkar sem naredil LED, da se dvigne za 2 sekundi, če je zvok posnet nad 60 dB.
Delo je nenavadno zadovoljivo, vendar se zagotovo lahko uporablja za projekte in druge osnovne prototipe. Z nekaj več kopanja sem ugotovil, da je težava dejansko v strojni opremi, ki mi je še vedno tu in tam povzročala hrup. Tako sem preizkusil druga vezja, ki se uporabljajo na iskrah zabavnih mikrofonskih ploščah, ki imajo nizko in visokofrekvenčni filter. Spodaj sem razložil, da poskusite.
Ojačevalnik s filtrskim vezjem:
Tu smo uporabili nizko- in visokofrekvenčne filtre z ojačevalnikom za zmanjšanje hrupa v tem vezju za merjenje ravni zvoka, da lahko povečamo natančnost.
V tem zgornjem vezju smo za ojačanje signalov iz mikrofona uporabili priljubljeni ojačevalnik LM358. Skupaj z ojačevalnikom smo uporabili tudi dva filtra, visokofrekvenčni filter tvorijo R5, C2, nizkofrekvenčni filter pa C1 in R2. Ti filtri so zasnovani tako, da omogočajo frekvenco le od 8 Hz do 10 KHz, saj bo nizkofrekvenčni filter filtriral vse, kar je pod 8 Hz, visokofrekvenčni filter pa vse, kar je več kot 15 KHz. To frekvenčno območje je izbrano, ker moj kondenzatorski mikrofon deluje le od 10Hz do 15KHZ, kot je prikazano v spodnjem obrazcu.
Če se vaše povpraševanje po frekvenci spremeni, lahko s spodnjimi formulami izračunate vrednost upora in kondenzatorja za želeno frekvenco.
Frekvenca (F) = 1 / (2πRC)
Upoštevajte tudi, da bo vrednost upora upora tukaj vplivala tudi na ojačanje ojačevalnika. Izračun vrednosti upora in kondenzatorja, uporabljenega v tem vezju, je prikazan spodaj. Od tu lahko prenesete excel list za spreminjanje vrednosti frekvence in izračun regresijskih vrednosti.
Nekdanji krog je deloval zadovoljivo glede na moja pričakovanja, zato tega nisem nikoli poskusil. Če slučajno preizkusite to vezje, mi v komentarjih sporočite, ali deluje bolje kot prejšnje.