- Nødvendige materialer:
- Kretsdiagram:
- Ved hjelp av regresjonsmetode for å beregne dB fra ADC-verdi:
- Arduino-program for å måle lydnivået i dB:
- Arbeid av Arduino lydnivåmåler:
- Forsterker med filterkrets:
Støyforurensning har virkelig begynt å få betydning på grunn av høy befolkningstetthet. Et normalt menneskelig øre kunne høre lydnivåer fra 0dB til 140dB der lydnivåer fra 120dB til 140dB anses å være støy. Lydstyrke eller lydnivåer blir ofte målt i desibel (dB), vi har noen instrumenter som kan måle lydsignalene i dB, men disse målere er litt dyre, og dessverre har vi ikke en out of box sensormodul for å måle lydnivået i desibel. Og det er ikke økonomisk å kjøpe dyre mikrofoner til et lite Arduino-prosjekt som skal måle lydnivået i et lite klasserom eller stue.
Så i dette prosjektet vil vi bruke en vanlig Electret kondensatormikrofon med Arduino og prøve å måle lyd- eller støyforurensningsnivået i dB så nær den faktiske verdien som mulig. Vi vil bruke en normal forsterkerkrets for å forsterke lydsignalene og mate den til Arduino der vi vil bruke regresjonsmetode for å beregne lydsignalene i dB. For å sjekke om de oppnådde verdiene er riktige, kan vi bruke Android Sound-applikasjonen. Hvis du har en bedre måler, kan du bruke den til kalibrering. Vær oppmerksom på at dette prosjektet ikke tar sikte på å måle dB nøyaktig og bare vil gi verdier så nær som mulig den faktiske verdien.
Nødvendige materialer:
- Arduino UNO
- Mikrofon
- LM386
- 10K variabel POT
- Motstander og kondensatorer
Kretsdiagram:
Krets for denne Arduino lydnivåmåleren er veldig enkel der vi har brukt LM386 lydforsterkerkrets for å forsterke signalene fra en kondensatormikrofon og levere den til den analoge porten på Arduino. Vi har allerede brukt denne LM386 IC til å bygge en lavspent lydforsterker Circuit og kretsen forblir mer eller mindre den samme.
Forsterkningen til denne spesifikke op-amp kan stilles fra 20 til 200 ved hjelp av en motstand eller kondensator over pin 1 og 8. Hvis de blir igjen, blir forsterkningen satt til 20 som standard. For vårt prosjekt har vi den maksimale forsterkningen som er mulig av denne kretsen, så vi bruker en kondensator med verdi 10uF mellom pinnene 1 og 8, merk at denne pinnen er polaritetsfølsom og den negative pinnen på kondensatoren skal kobles til pinne 8. Den komplette forsterkeren kretsen drives av 5V-pinnen fra Arduino.
Kondensator C2 brukes til å filtrere DC-støy fra mikrofon. I utgangspunktet når mikrofonen registrerer lyd, blir lydbølgene konvertert til vekselstrømssignaler. Dette vekselstrømssignalet kan ha noe jevn støy kombinert med det som vil bli filtrert av denne kondensatoren. Tilsvarende, selv etter forsterkning, brukes en kondensator C3 til å filtrere DC-støy som kan ha blitt lagt til under forsterkning.
Ved hjelp av regresjonsmetode for å beregne dB fra ADC-verdi:
Når vi er klare med kretsen vår, kan vi koble Arduino til datamaskinen og laste opp “Analog Read Serial” -eksempelprogrammet fra Arduino for å sjekke om vi får gyldige ADC-verdier fra mikrofonen vår. Nå må vi konvertere disse ADC-verdiene til dB.
I motsetning til andre verdier som å måle temperatur eller fuktighet, er ikke måling av dB en grei oppgave. Fordi verdien av dB ikke er lineær med verdien av ADC. Det er få måter du kan komme til, men alle mulige trinn jeg prøvde, ga meg ikke gode resultater. Du kan lese gjennom dette Arduino-forumet her hvis du vil prøve.
For søknaden min trengte jeg ikke mye nøyaktighet mens jeg målte dB-verdiene, og bestemte meg derfor for å bruke en enklere måte å direkte kalibrere ADC-verdiene med dB-verdier. For denne metoden trenger vi en SPL-måler (En SPL-måler er et instrument som kan lese dB-verdier og vise det), men dessverre hadde jeg ikke en, og sikker på at de fleste av oss ikke vil. Så vi kan bruke Android-applikasjonen kalt “Sound meter” som kan lastes ned gratis fra spillbutikken. Det er mange slike applikasjoner, og du kan laste ned alt du ønsker. Disse applikasjonene bruker telefonens innebygde mikrofon for å oppdage støynivået og vise det på mobilen vår. De er ikke veldig nøyaktige, men vil sikkert fungere for vår oppgave. Så la oss begynne med å installere Android-applikasjonen, min når den ble åpnet så ut som dette nedenfor
Som jeg sa tidligere, vil ikke forholdet mellom dB og analoge verdier være lineære, derfor må vi sammenligne disse to verdiene med forskjellige intervaller. Bare noter verdien av ADC som vises på skjermen for forskjellige dB som vises på mobiltelefonen din. Jeg tok omtrent 10 målinger, og de så slik ut nedenfor, du kan variere litt
Åpne en excelside og skriv inn disse verdiene, for nå skal vi bruke Excel for å finne regresjonsverdiene for det ovennevnte tallet. Før det la oss tegne en graf og sjekke hvordan de begge forholder seg til, mine så ut slik nedenfor.
Som vi kan se, er verdien av dB ikke relatert lineært med ADC, noe som betyr at du ikke kan ha en felles multiplikator for alle ADC-verdiene for å oppnå dens likeverdige dB-verdier. I slike tilfeller kan vi bruke "lineær regresjon" -metoden. I utgangspunktet vil den konvertere denne uregelmessige blå linjen til nærmest mulig rett linje (svart linje) og gi oss ligningen til den rette linjen. Denne ligningen kan brukes til å finne den ekvivalente verdien av dB for hver verdi av ADC som Arduino måler.
I Excel har vi en plugin-modul for dataanalyse som automatisk beregner regresjonen for verdisettet ditt og publiserer dataene. Jeg kommer ikke til å dekke hvordan jeg gjør det med excel siden det er utenfor omfanget av dette prosjektet, det er også enkelt for deg å Google og lære det. Når du har beregnet regresjonen for verdien, vil excel gi noen verdier som vist nedenfor. Vi er bare interessert i tallene som er uthevet nedenfor.
Når du har fått disse tallene, vil du kunne danne ligningen nedenfor
ADC = (11,003 * dB) - 83,2073
Fra hvilken du kan utlede dB å være
dB = (ADC + 83,2073) / 11,003
Du må kanskje kjøre din egen ligning siden kalibreringen kan variere. Men hold denne verdien trygg, for vi trenger den mens du programmerer Arduino.
Arduino-program for å måle lydnivået i dB:
Det komplette programmet for å måle dB er gitt nedenfor, noen viktige linjer er forklart nedenfor
I disse ovennevnte to linjene leser vi ADC-verdien til pin A0 og konverterer den til dB ved hjelp av ligningen vi nettopp har utledet. Denne dB-verdien stemmer kanskje ikke overens med den sanne dB-verdien, men er ganske nær verdiene som vises i mobilapplikasjonen.
adc = analogRead (MIC); // Les ADC-verdien fra forsterker dB = (adc + 83,2073) / 11,003; // Konverter ADC-verdi til dB ved hjelp av regresjonsverdier
For å sjekke om programmet fungerer som det skal, har vi også lagt til en LED til den digitale pin 3 som er laget for å gå høyt i 1 sek når Arduino måler en høy lyd på over 60 dB.
hvis (dB> 60) {digitalWrite (3, HIGH); // slå lysdioden på (HØY er spenningsnivået) forsinkelse (1000); // vent på en annen digitalWrite (3, LOW); }
Arbeid av Arduino lydnivåmåler:
Når du er klar med koden og maskinvaren, er det bare å laste opp koden og åpne seriell skjerm for å se på dB-verdiene målt av Arduino. Jeg testet denne koden på rommet mitt der det ikke var mye støy bortsett fra trafikken utenfor, og jeg fikk verdiene nedenfor på min serielle skjerm og Android-applikasjonen viste også noe i nærheten av dette
Fullstendig bearbeiding av prosjektet finner du i videoen som er gitt på slutten av denne siden. Du kan bruke til å projisere for å oppdage lyd i rommet og sjekke om det er noen aktivitet eller hvor mye støy som genereres i hvert klasserom eller noe sånt. Jeg har nettopp laget en LED til å gå høyt i 2 sekunder hvis det er lyd tatt opp over 60 dB.
Arbeidet er merkelig tilfredsstillende, men kan sikkert brukes til prosjekter og andre grunnleggende prototyper. Med noen flere graver fant jeg ut at problemet faktisk var med maskinvaren, som fremdeles ga meg støy innimellom. Så jeg prøvde ut andre kretser som brukes i gnistmikrofonkortene som har et lavpass- og høypassfilter. Jeg har forklart kretsen nedenfor slik at du kan prøve.
Forsterker med filterkrets:
Her har vi brukt lavpass- og høypassfiltre med forsterker for å redusere støyen i denne lydnivåmålekretsen slik at nøyaktigheten kan økes.
I denne kretsen ovenfor har vi brukt den populære LM358 forsterkeren til å forsterke signalene fra mikrofonen. Sammen med forsterkeren har vi også brukt to filtre, høypassfilteret er dannet av R5, C2 og lavpassfilteret brukes av C1 og R2. Disse filtrene er designet for kun å tillate frekvens fra 8Hz til 10KHz, siden lavpassfilteret vil filtrere noe under 8Hz og High Pass-filteret vil filtrere noe over 15KHz. Dette frekvensområdet er valgt fordi kondensatormikrofonen min fungerer bare fra 10Hz til 15KHZ som vist i databladet nedenfor.
Hvis frekvensbehovet ditt endres, kan du bruke formlene nedenfor til å beregne verdien på motstand og kondensator for ønsket frekvens.
Frekvens (F) = 1 / (2πRC)
Vær også oppmerksom på at verdien på motstanden som brukes her, også vil påvirke forsterkeren. Beregning av verdien på motstanden og kondensatoren som brukes i denne kretsen er vist nedenfor. Du kan laste ned Excel-arket herfra for å endre verdiene til Frekvens og beregne regresjonsverdiene.
Den tidligere kretsen fungerte tilfredsstillende for mine forventninger, så jeg prøvde aldri denne. Hvis du tilfeldigvis prøver denne kretsen, gi meg beskjed om den fungerer bedre enn den forrige gjennom kommentarene.