- Nødvendige materialer:
- Kredsløbsdiagram:
- Brug af regressionsmetode til at beregne dB fra ADC-værdi:
- Arduino-program til måling af lydniveau i dB:
- Arbejd af Arduino lydniveaumåler:
- Forstærker med filtre kredsløb:
Støjforurening er virkelig begyndt at få betydning på grund af høj befolkningstæthed. Et normalt menneskeligt øre kunne høre lydniveauer fra 0dB til 140dB, hvor lydniveauer fra 120dB til 140dB betragtes som støj. Loudness eller lydniveauer måles almindeligvis i decibel (dB), vi har nogle instrumenter, der kan måle lydsignalerne i dB, men disse målere er lidt dyre, og vi har desværre ikke et sensormodul til at måle lydniveauer i decibel. Og det er ikke økonomisk at købe dyre mikrofoner til et lille Arduino-projekt, der skal måle lydniveauet i et lille klasseværelse eller stue.
Så i dette projekt bruger vi en normal Electret kondensatormikrofon med Arduino og prøver at måle lyd- eller støjforureningsniveauet i dB så tæt som muligt på den faktiske værdi. Vi bruger et normalt forstærkerkredsløb til at forstærke lydsignalerne og føre det til Arduino, hvor vi vil bruge regressionsmetode til at beregne lydsignalerne i dB. For at kontrollere om de opnåede værdier er korrekte, kan vi bruge “Sound Meter” android-applikationen. Hvis du har en bedre måler, kan du bruge den til kalibrering. Vær opmærksom på, at dette projekt ikke har til formål at måle dB nøjagtigt og blot vil give værdier så tæt som muligt på den faktiske værdi.
Nødvendige materialer:
- Arduino UNO
- Mikrofon
- LM386
- 10K variabel POT
- Modstande og kondensatorer
Kredsløbsdiagram:
Kredsløb til denne Arduino Sound Level Meter er en meget enkel, hvor vi har brugt LM386 Audio forstærker kredsløb til at forstærke signalerne fra en kondensatormikrofon og levere den til den analoge port på Arduino. Vi har allerede brugt denne LM386 IC til at opbygge en lavspændings lydforstærker Circuit og kredsløbet forbliver mere eller mindre det samme.
Forstærkningen af denne særlige op-amp kan indstilles fra 20 til 200 ved hjælp af en modstand eller kondensator på tværs af pin 1 og 8. Hvis de efterlades fri, indstilles forstærkningen som 20 som standard. For vores projekt har vi den maksimale forstærkning, der er mulig ved dette kredsløb, så vi bruger en kondensator med værdi 10uF mellem benene 1 og 8, bemærk at denne pin er polaritetsfølsom, og den negative pin på kondensatoren skal tilsluttes pin 8. Den komplette forstærker kredsløb er drevet af 5V pin fra Arduino.
Kondensator C2 bruges til at filtrere jævnstrømsstøj fra mikrofon. Dybest set når mikrofonen registrerer lyd, konverteres lydbølgerne til AC-signaler. Dette vekselstrømssignal kan have en vis jævnstrømsstøj forbundet med det, som filtreres af denne kondensator. Tilsvarende, selv efter forstærkning anvendes en kondensator C3 til at filtrere enhver DC-støj, der muligvis er blevet tilføjet under forstærkning.
Brug af regressionsmetode til at beregne dB fra ADC-værdi:
Når vi er klar med vores kredsløb, kan vi forbinde Arduino til computeren og uploade "Analog Read Serial" -eksempelprogrammet fra Arduino for at kontrollere, om vi får gyldige ADC-værdier fra vores mikrofon. Nu skal vi konvertere disse ADC-værdier til dB.
I modsætning til andre værdier som måling af temperatur eller fugtighed er måling af dB ikke en ligetil opgave. Fordi værdien af dB ikke er lineær med værdien af ADC'er. Der er få måder, hvorpå du kan nå frem, men hvert muligt trin, jeg prøvede, gav mig ikke gode resultater. Du kan læse igennem dette Arduino-forum her, hvis du vil prøve det.
Til min anvendelse havde jeg ikke brug for meget nøjagtighed, mens jeg målte dB-værdierne, og besluttede derfor at bruge en lettere måde til direkte kalibrering af ADC-værdierne med dB-værdier. Til denne metode har vi brug for et SPL-meter (Et SPL-meter er et instrument, der kan læse dB-værdier og vise det), men desværre havde jeg ikke en, og de fleste af os vil ikke have det. Så vi kan bruge Android-applikationen kaldet "Sound meter", som kan downloades gratis fra Play Store. Der er mange sådanne applikationstyper, og du kan downloade alt efter eget valg. Disse applikationer bruger telefonens indbyggede mikrofon til at registrere støjniveauet og vise det på vores mobil. De er ikke særlig nøjagtige, men vil helt sikkert fungere for vores opgave. Så lad os begynde med at installere Android-applikationen, min, når den blev åbnet, så ud som denne nedenfor
Som jeg sagde tidligere, vil forholdet mellem dB og analoge værdier ikke være lineære, hvorfor vi skal sammenligne disse to værdier med forskellige intervaller. Bare noter værdien af ADC, der vises på skærmen for forskellige dB, der vises på din mobiltelefon. Jeg tog omkring 10 aflæsninger, og de så sådan ud nedenfor, du kan variere lidt
Åbn en excelside, og skriv disse værdier, for nu bruger vi Excel til at finde regressionsværdierne for ovenstående nummer. Før det skal vi plotte en graf og kontrollere, hvordan de begge forholder sig til, min lignede sådan nedenfor.
Som vi kan se, er værdien af dB ikke relateret lineært med ADC, hvilket betyder at du ikke kan have en fælles multiplikator for alle ADC-værdier for at opnå dens ækvivalente dB-værdier. I et sådant tilfælde kan vi bruge den "lineære regression" -metode. Dybest set vil det konvertere denne uregelmæssige blå linje til den tættest mulige lige linje (sort linje) og give os ligningen af den lige linje. Denne ligning kan bruges til at finde den ækvivalente værdi af dB for hver værdi af ADC, som Arduino måler.
I excel har vi et plug-in til dataanalyse, der automatisk beregner regressionen for dit sæt værdier og offentliggør dens data. Jeg vil ikke dække, hvordan man gør det med excel, da det er uden for dette projekts anvendelsesområde, det er også nemt for dig at Google og lære det. Når du har beregnet regressionen for værdien, vil excel give nogle værdier som vist nedenfor. Vi er kun interesseret i de numre, der er fremhævet nedenfor.
Når du først har fået disse tal, kan du danne nedenstående ligning som
ADC = (11,003 * dB) - 83,2073
Hvorfra du kan udlede dB til at være
dB = (ADC + 83,2073) / 11,003
Du skal muligvis køre din egen ligning, da kalibreringen kan variere. Hold dog denne værdi sikker, for vi får brug for den, mens du programmerer Arduino.
Arduino-program til måling af lydniveau i dB:
Det komplette program til måling af dB er angivet nedenfor, nogle få vigtige linjer forklares nedenfor
I disse ovennævnte to linjer læser vi ADC-værdien for pin A0 og konverterer den til dB ved hjælp af ligningen, som vi lige har afledt. Denne dB-værdi er måske ikke nøjagtige til den sande dB-værdi, men forbliver temmelig tæt på de værdier, der vises på mobilapplikationen.
adc = analogRead (MIC); // Læs ADC-værdien fra forstærker dB = (adc + 83.2073) / 11.003; // Konverter ADC-værdi til dB ved hjælp af regressionsværdier
For at kontrollere, om programmet fungerer korrekt, har vi også tilføjet en LED til digital pin 3, der får højt til i 1 sek, når Arduino måler en høj støj på over 60dB.
hvis (dB> 60) {digitalWrite (3, HIGH); // tænd lysdioden (HIGH er spændingsniveauet) forsinkelse (1000); // vent på en anden digitalWrite (3, LOW); }
Arbejd af Arduino lydniveaumåler:
Når du er klar med koden og hardware, skal du bare uploade koden og åbne din serielle skærm for at se på dB-værdier målt af din Arduino. Jeg testede denne kode på mit værelse, hvor der ikke var meget støj undtagen trafikken udenfor, og jeg fik nedenstående værdier på min serielle skærm, og Android-applikationen viste også noget tæt på dette
Den komplette bearbejdning af projektet kan findes i videoen, der er vist i slutningen af denne side. Du kan bruge til at projicere for at registrere lyd i rummet og kontrollere, om der er nogen aktivitet, eller hvor meget støj der genereres i hvert klasseværelse eller noget lignende. Jeg har lige lavet en LED til at gå højt i 2 sekunder, hvis der er lyd optaget over 60 dB.
Arbejdet er underligt tilfredsstillende, men kan sikkert bruges til projekter og andre grundlæggende prototyper. Med få flere grave fandt jeg ud af, at problemet faktisk var med hardwaren, som stadig gav mig støj nu og da. Så jeg prøvede andre kredsløb, som bruges i gnistsjove mikrofonkort, der har et lavpas- og højpasfilter. Jeg har forklaret nedenstående kredsløb, som du kan prøve.
Forstærker med filtre kredsløb:
Her har vi brugt lavpas- og højpasfiltre med forstærker til at reducere støj i dette lydniveaumålingskredsløb, så nøjagtigheden kan øges.
I dette ovenstående kredsløb har vi brugt den populære LM358 forstærker til at forstærke signalerne fra mikrofonen. Sammen med forstærkeren har vi også brugt to filtre, højpasfilteret dannes af R5, C2, og lavpasfilteret bruges af C1 og R2. Disse filtre er designet til kun at tillade frekvens fra 8Hz til 10KHz, da lavpasfiltret filtrerer noget under 8Hz, og High Pass-filteret filtrerer alt over 15KHz. Dette frekvensområde vælges, fordi min kondensatormikrofon kun fungerer fra 10Hz til 15KHZ som vist i databladet nedenfor.
Hvis dit frekvensbehov ændres, kan du bruge nedenstående formler til at beregne værdien af modstand og kondensator til din krævede frekvens.
Frekvens (F) = 1 / (2πRC)
Bemærk også, at værdien af modstanden, der bruges her, også vil påvirke forstærkerens forstærkning. Beregning af værdien af modstand og kondensator, der anvendes i dette kredsløb, er vist nedenfor. Du kan downloade Excel-ark herfra for at ændre værdierne for Frekvens og beregne regressionsværdierne.
Det tidligere kredsløb fungerede tilfredsstillende efter mine forventninger, så jeg prøvede aldrig denne. Hvis du tilfældigvis prøver dette kredsløb, så lad mig det vide, om det fungerer bedre end det foregående gennem kommentarerne.