- Material som krävs:
- Kretsschema:
- Använda regressionsmetod för att beräkna dB från ADC-värde:
- Arduino-program för att mäta ljudnivån i dB:
- Arbetning av Arduino Sound Level Meter:
- Förstärkare med filterkrets:
Bullerföroreningar har verkligen börjat få betydelse på grund av hög befolkningstäthet. Ett normalt mänskligt öra kunde höra ljudnivåer från 0dB till 140dB där ljudnivåer från 120dB till 140dB anses vara buller. Ljudnivåer eller ljudnivåer mäts vanligtvis i decibel (dB), vi har några instrument som kan mäta ljudsignalerna i dB men dessa mätare är lite dyra och tyvärr har vi ingen sensormodul för att mäta ljudnivåer i decibel. Och det är inte ekonomiskt att köpa dyra mikrofoner för ett litet Arduino-projekt som ska mäta ljudnivån i ett litet klassrum eller vardagsrum.
Så i det här projektet kommer vi att använda en vanlig Electret-kondensatormikrofon med Arduino och försöka mäta ljud- eller ljudföroreningsnivån i dB så nära det verkliga värdet som möjligt. Vi använder en vanlig förstärkarkrets för att förstärka ljudsignalerna och mata den till Arduino där vi använder regressionsmetod för att beräkna ljudsignalerna i dB. För att kontrollera om de erhållna värdena är korrekta kan vi använda Android Sound-applikationen, om du har en bättre mätare kan du använda den för kalibrering. Observera att detta projekt inte syftar till att mäta dB exakt och bara kommer att ge värden så nära det verkliga värdet som möjligt.
Material som krävs:
- Arduino UNO
- Mikrofon
- LM386
- 10K variabel POT
- Motstånd och kondensatorer
Kretsschema:
Krets för denna Arduino ljudnivåmätare är en mycket enkel där vi har använt LM386 ljudförstärkarkrets för att förstärka signalerna från en kondensatormikrofon och leverera den till den analoga porten på Arduino. Vi har redan använt den här LM386 IC för att bygga en lågspänningsförstärkarkrets och kretsen är mer eller mindre densamma.
Förstärkningen för denna speciella op-amp kan ställas in från 20 till 200 med hjälp av ett motstånd eller kondensator över stift 1 och 8. Om de lämnas lediga kommer förstärkningen att ställas in som 20 som standard. För vårt projekt har vi den maximala förstärkningen som är möjlig av denna krets, så vi använder en kondensator med värdet 10uF mellan stiften 1 och 8, notera att denna stift är polaritetskänslig och den negativa stiftet på kondensatorn ska anslutas till stift 8. Hela förstärkaren kretsen drivs av 5V-stiftet från Arduino.
Kondensatorn C2 används för att filtrera DC-bruset från mikrofonen. I grund och botten när mikrofonen känner av ljud kommer ljudvågorna att omvandlas till växelströmssignaler. Denna växelströmssignal kan ha något likströmsbrus kopplat till den som filtreras av denna kondensator. På samma sätt, även efter förstärkning, används en kondensator C3 för att filtrera eventuellt likströmsbrus som kan ha lagts till under förstärkningen.
Använda regressionsmetod för att beräkna dB från ADC-värde:
När vi är redo med vår krets kan vi ansluta Arduino till datorn och ladda upp "Analog Read Serial" Exempelprogram från Arduino för att kontrollera om vi får giltiga ADC-värden från vår mikrofon. Nu måste vi konvertera dessa ADC-värden till dB.
Till skillnad från andra värden som att mäta temperatur eller luftfuktighet är dB-mätning inte en enkel uppgift. Eftersom värdet på dB inte är linjärt med värdet på ADC. Det finns få sätt att nå fram till, men alla möjliga steg jag försökte gav mig inte bra resultat. Du kan läsa igenom detta Arduino-forum här om du vill prova.
För min applikation behövde jag inte mycket noggrannhet när jag mätte dB-värdena och bestämde mig därför för att använda ett enklare sätt att direkt kalibrera ADC-värdena med dB-värden. För den här metoden behöver vi en SPL-mätare (En SPL-mätare är ett instrument som kan läsa dB-värden och visa det), men tyvärr hade jag inte en och de flesta av oss kommer inte att göra det. Så vi kan använda Android-applikationen "Sound meter" som kan laddas ner från Play Store gratis. Det finns många sådana typer av applikationer och du kan ladda ner allt du väljer. Dessa applikationer använder telefonens inbyggda mikrofon för att upptäcka ljudnivån och visa den på vår mobil. De är inte så exakta, men skulle säkert fungera för vår uppgift. Så låt oss börja med att installera Android-applikationen, min när den öppnades såg ut så här nedan
Som jag sa tidigare kommer förhållandet mellan dB och analoga värden inte att vara linjära, därför måste vi jämföra dessa två värden med olika intervall. Anteckna bara värdet på ADC som visas på skärmen för olika dB som visas på din mobiltelefon. Jag tog cirka 10 avläsningar och de såg ut så här nedan, du kan variera lite
Öppna en excelsida och skriv in dessa värden, för nu använder vi Excel för att hitta regressionsvärdena för ovanstående nummer. Innan det låt oss plotta en graf och kontrollera hur de båda relaterar till, mina såg ut så här nedan.
Som vi kan se är värdet av dB inte linjärt relaterat till ADC, vilket innebär att du inte kan ha en gemensam multiplikator för alla ADC-värden för att få dess motsvarande dB-värden. I sådana fall kan vi använda metoden "linjär regression". I grund och botten kommer den att omvandla denna oregelbundna blå linje till närmast möjliga rak linje (svart linje) och ge oss ekvationen för den raka linjen. Denna ekvation kan användas för att hitta det ekvivalenta värdet av dB för varje värde av ADC som Arduino mäter.
I Excel har vi ett plugin-program för dataanalys som automatiskt kommer att beräkna regressionen för din uppsättning värden och publicera dess data. Jag tänker inte täcka hur man gör det med Excel eftersom det ligger utanför projektets omfattning, det är också lätt för dig att Google och lära sig det. När du har beräknat regressionen för värdet kommer excel att ge några värden som visas nedan. Vi är bara intresserade av siffrorna som markeras nedan.
När du har fått dessa siffror kommer du att kunna bilda nedanstående ekvation som
ADC = (11,003 * dB) - 83,2073
Från vilken du kan härleda dB att vara
dB = (ADC + 83,2073) / 11,003
Du kan behöva köra din egen ekvation eftersom kalibreringen kan skilja sig åt. Håll dock detta värde säkert för vi kommer att behöva det när du programmerar Arduino.
Arduino-program för att mäta ljudnivån i dB:
Det fullständiga programmet för att mäta dB ges nedan, några viktiga rader förklaras nedan
I dessa ovanstående två rader läser vi ADC-värdet för stift A0 och konverterar det till dB med hjälp av den ekvation som vi just härledde. Detta dB-värde kanske inte är korrekt med det sanna dB-värdet, men förblir ganska nära de värden som visas i mobilapplikationen.
adc = analogRead (MIC); // Läs ADC-värdet från förstärkaren dB = (adc + 83.2073) / 11.003; // Konvertera ADC-värde till dB med hjälp av regressionsvärden
För att kontrollera om programmet fungerar ordentligt har vi också lagt till en LED till den digitala stiftet 3 som görs hög i 1 sek när Arduino mäter ett högt ljud på över 60dB.
om (dB> 60) {digitalWrite (3, HIGH); // slå på lysdioden (HÖG är spänningsnivån) fördröjning (1000); // vänta på en andra digitalWrite (3, LOW); }
Arbetning av Arduino Sound Level Meter:
När du är redo med koden och hårdvaran laddar du bara upp koden och öppnar din seriella bildskärm för att titta på dB-värdena som uppmätts av din Arduino. Jag testade den här koden i mitt rum där det inte var mycket buller förutom trafiken utanför och jag fick värdena nedan på min seriella bildskärm och Android-applikationen visade också något nära detta
Det fullständiga arbetet med projektet finns i videon i slutet av denna sida. Du kan använda för att projicera för att upptäcka ljud i rummet och kontrollera om det finns någon aktivitet eller hur mycket buller som genereras i varje klassrum eller något liknande. Jag har precis gjort en lysdiod för att gå hög i 2 sekunder om det finns ljud inspelat över 60 dB.
Arbetet är konstigt tillfredsställande, men kan säkert användas för projekt och andra grundläggande prototyper. Med några fler grävningar upptäckte jag att problemet faktiskt var med hårdvaran, vilket fortfarande gav mig ljud då och då. Så jag testade andra kretsar som används i gnistan roliga mikrofonkort som har ett lågpass- och högpassfilter. Jag har förklarat kretsen nedan så att du kan försöka.
Förstärkare med filterkrets:
Här har vi använt lågpass- och högpassfilter med förstärkare för att minska bruset i denna ljudnivåmätkrets så att noggrannheten kan ökas.
I denna krets ovan har vi använt den populära LM358-förstärkaren för att förstärka signalerna från mikrofonen. Tillsammans med förstärkaren har vi också använt två filter, högpassfiltret bildas av R5, C2 och lågpassfiltret används av C1 och R2. Dessa filter är utformade för att endast tillåta frekvens från 8Hz till 10KHz, eftersom lågpassfiltret filtrerar allt under 8Hz och High Pass-filtret filtrerar allt över 15KHz. Detta frekvensområde väljs beror på att min kondensatormikrofon bara fungerar från 10Hz till 15KHZ som visas i databladet nedan.
Om ditt frekvensbehov ändras kan du använda formlerna nedan för att beräkna värdet på motstånd och kondensator för önskad frekvens.
Frekvens (F) = 1 / (2πRC)
Observera också att värdet på motståndet som används här också kommer att påverka förstärkarens förstärkning. Beräkning av värdet på motstånd och kondensator som används i denna krets visas nedan. Du kan hämta excel-arket härifrån för att ändra värdena för Frekvens och beräkna regressionsvärdena.
Den tidigare kretsen fungerade tillfredsställande för mina förväntningar, så jag försökte aldrig den här. Om du råkar prova den här kretsen, låt mig veta om den fungerar bättre än den tidigare genom kommentarerna.