Come realizzare un fonometro con Arduino

L’inquinamento acustico ha iniziato a guadagnare sempre più importanza. I livelli sonori o di rumore sono comunemente misurati in decibel (dB). Un normale orecchio umano può sentire livelli sonori da 0 dB a 140 dB, ma i livelli sonori da 120 dB a 140 dB sono considerati “rumore”. Esistono strumenti che potrebbero misurare i segnali sonori in dB ma questi misuratori sono leggermente costosi e purtroppo non esiste un modulo sensore per misurare i livelli sonori in decibel. Ecco quindi come realizzare un piccolo fonometro con Arduino che può misurare il livello del suono ad es. in una piccola classe o in un salotto.

Il suono è costituito da una serie di onde che si propagano dalla sorgente di vibrazione a seguito di cambiamenti di densità e anche di pressione dell’aria. Il suono può essere definito, quindi, come una serie di onde di vibrazione meccanica nell’aria o nei solidi e può essere ascoltato dall’orecchio umano, in condizioni normali, a frequenze che vanno da 20 a 20.000 Hz. Tuttavia, in generale più una persona è anziana, e più è incapace di sentire i suoni ad alta frequenza.

Il rumore può essere definito come un suono indesiderato la cui durata, intensità e qualità portano a vari impatti sulla fisiologia o psicologia dell’uomo e delle altre creature. Esistono due principali fonti di rumore, in base alla sua posizione: (a) il rumore interno (indoor) proviene da esseri umani, elettrodomestici o macchine edili; (b) il rumore esterno (outdoor) è una fonte rumorosa derivata da traffico, trasporti, industria, utensili meccanici, lavori stradali, attività sportive e altre all’aperto.

Un fonometro commerciale in vendita su Internet. Ne trovi diversi qui.

L’effetto principale del rumore è sui sensi dell’ascoltatore, dove il danno che si verifica consiste in: 1) perdita temporanea dell’udito, che può essere recuperato se si può evitare il rumore; 2) le persone diventano immune al rumore; 3) ronzio nelle orecchie, e 4) udito perso e non recuperato. Inoltre, il rumore provoca anche la perdita di concentrazione e aumento della fatica a basse frequenze sonore, mentre ad alta frequenza può causare interpretazioni errate quando si parla con gli altri.

La misurazione del suono e del rumore

Il livello sonoro è collegato, naturalmente, all’energia delle onde sonore. L’intensità del suono è l’energia trasportata dalle onde sonore per unità di tempo attraverso una unità di area (I = P/A). L’intensità è paragonabile all’ampiezza dell’onda e ha come unità di misura il Watt/metro quadro (W/m2). È noto che l’orecchio umano è sensibile a varie intensità del suono. Quindi viene utilizzata una scala di intensità logaritmica (β), che è definita dalla seguente equazione:

In questa equazione, I0 è l’intensità del rumore di riferimento specificato di 10-12 W/m2, basato su una soglia uditiva minima umana a 1000 Hz. Il livello di intensità del suono è espresso in decibel (dB). Il valore di un decibel è uguale a un decimo di bel. Il bel (simbolo B) è una misura del rapporto tra due quantità omogenee, cioè due quantità dello stesso tipo, come due intensità, due potenze, due pressioni, etc. Non è possibile misurare in dB il rapporto tra due grandezze non omogenee.

Livello di intensità di alcune comuni sorgenti di rumore.

Per la misurazione del rumore si usa uno strumento chiamato “fonometro”, o misuratore del livello sonoro. Questo strumento viene utilizzato per misurare il rumore tra 30-130 dB e nell’intervallo di frequenza 20-20.000 Hz. Il fonometro viene utilizzato per misurare il livello di intensità del suono. Le tipiche parti che compongono un misuratore di livello sonoro commerciale (o uno autocostruito buono) sono costituite da microfoni, amplificatori, alcuni tipi di circuiti e una calibrazione.

Quando scegli un microfono per Arduino, puoi comprare uno dei “moduli microfonici” disponibili sul mercato che combinano un microfono con un amplificatore o qualche altra logica su un piccolo PCB. Puoi anche creare il tuo “modulo” (come nel secondo progetto di questo articolo), il che ha l’ulteriore vantaggio di poter controllare tutti i diversi aspetti del microfono e dell’amplificazione. Spesso, acquistare un modulo già pronto (ad esempio qui) risulta molto più facile e veloce che crearne uno proprio.

Non tutti i moduli microfonici che trovi su Internet sono la scelta giusta per misurare il volume del suono: ad esempio, alcuni segnalano solo (con un livello “1”) se un suono supera una certa soglia, mentre altri hanno un guadagno variabile (ad es. il MAX9814). Per misurare il volume del suono con un fonometro, è necessario usare un modulo in cui il guadagno è prevedibile: non significa che il guadagno sia fisso, ma solo che il guadagno sia configurabile da te e non cambi automaticamente.

Alcuni dei moduli microfonici per Arduino acquistabili sul web, ad es. qui.

Esempi di moduli amplificatori microfonici abbinati a un microfono a elettrete sono il MAX9812 e il MAX4446 di Adafruit. Mentre il primo ha un guadagno fisso di 20 dB, del secondo puoi regolare con un cacciavite il potenziometro del guadagno dell’amplificatore da 25x a 125x. Vale la pena notare che un design specifico potrebbe essere sul mercato con nomi diversi, poiché diversi produttori realizzano le proprie versioni del design con i propri nomi e numeri di modello.

Il segnale audio in uscita dall’amplificatore è una tensione variabile. Per misurare il livello del suono, dobbiamo in generale prendere più misurazioni per trovare l’estensione minima e massima o “ampiezza picco-picco” del segnale. Scegliamo, ad esempio, una finestra di 50 millisecondi, sufficiente per misurare livelli sonori di frequenze fino a 20 Hz, il limite inferiore dell’udito umano. Dopo aver trovato i campioni minimo e massimo in tale finestra, calcoliamo la differenza e la convertiamo in volt.

La tensione differenza fra i campioni minimo e massimo mostrata dal monitor seriale di Arduino.

Puoi scaricare da qui un codice (sketch) per Arduino che acquisisce il segnale dal modulo microfonico – nello specifico il modulo di amplificatore microfonico MAX4466 – ed effettua le operazioni appena illustrate. Possiamo prendere la misurazione picco-picco ottenuta con questo sketch e usarla per realizzare un fonometro quantitativo con Arduino oppure, ad esempio, uno un po’ più qualitativo pilotando una serie di led (o una matrice LED bicolore) per visualizzare il livello del suono.

Un misuratore di volume o decibel a led

Sono sicuro che conosci quei misuratori di volume che troviamo principalmente negli studi di registrazione professionali. Questo è lo scopo di questo progetto, un semplice misuratore di volume (o decibel) realizzato con Arduino, un microfono e pochi LED colorati. Questo semplice progetto basato su Arduino ti aiuterà a monitorare il livello del rumore o del suono misurando la pressione sonora.

Il materiale necessario per questo progetto.

Ecco i materiali occorrenti per realizzarlo:

  • Microfono per Arduino
  • Scheda Arduino Uno
  • Cavi jumper
  • Cruscotto
  • 5 x LED verde
  • 3 x LED giallo
  • 2 x LED rosso
  • 10 Resistenze da 200-220 Ohm
  • Una breadboard

Collegamento dei componenti in questo progetto.

Il colore dei led non ha molta importanza, ma è più bello averne di colori diversi. Il microfono deve avere un’uscita analogica. Fondamentalmente, puoi usare tutti i microfoni compatibili con Arduino assicurandoti che abbiano un’uscita analogica. Effettua i collegamenti come mostrato nella figura usando la breadboard e assicurati di collegare correttamente i LED con le resistenze. Usa cavi maschio-maschio per collegare tutto. Anche il modulo microfono può venire inserito nella breadboard.

Poi scarica il codice (sketch) per Arduino da qui e fai un copia e incolla dello sketch sul software di Arduino (IDE), dopodiché caricalo sulla scheda Arduino Uno. Il primo loop del codice è per la configurazione dei LED e il secondo è per controllare i LED. Nota che è possibile personalizzare a piacimento la sensibilità del misuratore modificando il valore nella funzione “mappa”. In pratica, puoi modificare il valore dove vedi 700: più piccolo per più sensibile o più grande per meno sensibile.

Come appare il progetto una volta ultimato.

Un fonometro fai-da-te basato su Arduino

In questo progetto useremo un normale microfono a condensatore a elettrete con Arduino e proveremo a misurare il livello di inquinamento acustico in dB il più vicino possibile al valore reale. Useremo un normale circuito amplificatore per amplificare i segnali sonori e inviarlo ad Arduino, ed infine useremo il metodo di regressione per calcolare i segnali sonori in dB. Si noti che questo progetto non mira a misurare accuratamente i dB e fornirà solo valori “il più vicino possibile” al valore reale.

Ecco il materiale necessario per realizzare questo progetto:

  • Scheda Arduino UNO
  • Microfono
  • Circuito integrato LM386
  • Potenziometro variabile da 10 kOhm.
  • Resistenze e condensatori vari (vedi schema del circuito)

Il circuito per questo misuratore di livello sonoro basato su Arduino è un sistema molto semplice in cui abbiamo utilizzato il circuito di amplificazione audio LM386 per amplificare i segnali da un microfono a condensatore e fornirlo alla porta analogica di Arduino. Questo circuito integrato LM386 è spesso usato per costruire un circuito amplificatore audio a bassa tensione (piuttosto simile). Il circuito completo dell’amplificatore è alimentato dal pin a 5V di Arduino.

Lo schema del circuito e dei collegamenti da realizzare.

Il guadagno di questo particolare amplificatore operazionale può essere impostato da 20 a 200 usando una resistenza o un condensatore attraverso i pin 1 e 8. Se vengono lasciati liberi, il guadagno verrà impostato come 20 per impostazione predefinita. Per il nostro progetto vogliamo il massimo guadagno possibile da questo circuito, quindi usiamo un condensatore di valore 10 μF tra i pin 1 e 8, si noti che questo pin è sensibile alla polarità e al pin 8 va collegato il pin negativo del condensatore.

Il condensatore C2 viene utilizzato per filtrare il rumore in CC dal microfono. Fondamentalmente, quando il microfono rileva il suono, le onde sonore verranno convertite in segnali in CA. Tale segnale in CA potrebbe avere un po’ di rumore CC accoppiato ad esso che verrà filtrato da questo condensatore. Allo stesso modo, anche dopo l’amplificazione viene utilizzato un condensatore C3 per filtrare qualsiasi rumore in CC che potrebbe essere stato aggiunto durante l’amplificazione.

Se non hai voglia di realizzare un circuito di amplificazione con tutti questi componenti puoi usare una scorciatoia: collegare ad Arduino una modulo con microfono in elettrete e amplificatore microfonico, oppure collegare un microfono al modulo di amplificatore audio LM386, che è compatibile con Arduino. Anche questo modulo, naturalmente, si basa sul circuito integrato di amplificazione audio LM386 usato in questo progetto. Insomma, vi sono davvero molte strade.

Il circuito implementato con un Arduino Nano e una app usata per la calibrazione.

Una volta che siamo pronti con il nostro circuito, possiamo collegare Arduino al computer e caricare il programma di esempio “Analog Read Serial” da Arduino per verificare se stiamo ottenendo valori ADC validi dal nostro microfono. Ora dobbiamo convertire questi valori ADC in dB. A differenza di altri valori come la misurazione della temperatura o dell’umidità, misurare dB non è un compito semplice. Questo perché il valore di dB non varia in modo lineare con il valore di tensione o ADC.

Calibrazione del fonometro molto istruttiva

Se non avete bisogno di molta precisione durante la misurazione dei valori in dB, potete utilizzare un modo semplice per calibrare direttamente i valori ADC con valori in dB. Per questo metodo avremo bisogno di un contatore SPL (un contatore SPL è uno strumento in grado di leggere i valori in dB e visualizzarli), ma purtroppo non ne avevo uno e sicuramente molti di noi non lo avranno. Quindi possiamo usare l’app Android chiamata “Sound meter”, che può essere scaricata gratis dal Play Store.

Una schermata dell’app Sound meter per Android ed, alla sua sinistra, i valori ottenuti sul monitor seriale di Arduino con il fonometro illustrato nel testo.

Esistono molti di questi tipi di app e puoi scaricare qualsiasi cosa tu scelga. Queste applicazioni utilizzano il microfono integrato del telefono per rilevare il livello di rumore e visualizzarlo sul nostro cellulare. Non sono molto precise, ma sicuramente funzionerebbero per il nostro compito. Quindi, iniziamo installando l’applicazione Android. Come ho detto prima, la relazione tra i valori in dB e analogici non sarà lineare, quindi è necessario confrontare questi due valori a intervalli diversi.

In pratica, basta annotare il valore di ADC visualizzato sullo schermo per diversi dB visualizzati sul telefono cellulare. Ho preso circa 10 letture e sembravano così come mostrato nella tabella qui sotto, nel tuo caso potrebbe variare un po’. Apri una pagina del foglio elettronico Excel e digita questi valori, in quanto ora useremo Excel per trovare i valori di regressione per i valori trovati. Prima di far questo, tracciamo un grafico e controlliamo come si relazionano entrambe le variabili.

La tabella di calibrazione illustrata nel testo e il rispettivo grafico.

Come vediamo, il valore di dB non è correlato linearmente con il valore dell’ADC, per cui non è possibile avere un moltiplicatore comune per tutti i valori ADC per avere valori equivalenti in dB. In tal caso, possiamo usare il metodo della “regressione lineare”, che convertirà questa linea blu irregolare nella linea retta più vicina possibile (linea nera) e ci darà l’equazione di tale linea retta. Questa equazione può essere usata per trovare il valore equivalente in dB per ogni valore di ADC misurato da Arduino.

In Excel abbiamo un plug-in per l’analisi dei dati che calcolerà automaticamente la regressione per il tuo set di valori e pubblicherà i suoi dati. Non ho intenzione di illustrare come farlo con Excel poiché non rientra nell’ambito di questo progetto, è anche facile per te per Google e impararlo. Una volta calcolata la regressione per i valori che hai inserito sul foglio, Excel fornirà alcuni valori come mostrato di seguito. Siamo interessati solo ai numeri che sono evidenziati di seguito.

La retta di regressione lineare determinata da Excel con i dati da noi forniti.

Una volta ottenuti questi numeri, sarai in grado di formare l’equazione seguente che lega i valori delle due variabili (è la semplice equazione di una retta): ADC = (11,003 * dB) – 83,2073, da cui è possibile derivare il livello sonoro in dB: dB = (ADC + 83,2073) / 11,003. Potrebbe essere necessario adeguare la propria equazione, poiché la calibrazione nel tuo caso potrebbe differire. Tuttavia, mantieni questo valore al sicuro perché ne avremo bisogno durante la programmazione di Arduino.

Puoi scaricare il codice (sketch) completo per misurare il livello sonoro in dB da qui, per poi fare un copia e incolla su Arduino. Una volta che sei pronto con il codice e l’hardware, basta caricare il codice sulla scheda Arduino e aprire il tuo monitor seriale per vedere i valori in dB misurati dal tuo Arduino. Per verificare se il programma funziona correttamente abbiamo anche aggiunto un LED al pin 3 digitale che viene fatto salire per 1 secondo quando Arduino misura un rumore forte superiore a 60 dB.

Il codice legge il valore ADC del pin A0 e lo converte in dB usando l’equazione che abbiamo appena derivato. Questo valore in dB potrebbe non essere accurato rispetto al valore dB reale, ma rimane pressoché vicino ai valori visualizzati sull’applicazione mobile. Il vantaggio, rispetto all’uso di uno smartphone è che con questo fonometro possiamo registrare le variazioni nel corso del tempo e graficare comodamente i dati raccolti sul nostro computer grazie ad Arduino.

Il funzionamento del fonometro è soddisfacente, e può essere usato per altri progetti. Puoi ulteriormente migliorarlo aggiungendo un filtro passa-basso e passa-alto (realizzabili con degli opportuni circuiti RC) per eliminare eventuali rumori spurii che si dovessero presentare di tanto in tanto. Infatti, riducendo il rumore in questo circuito di misurazione del livello sonoro, si può aumentare la precisione. La figura mostra i filtri passa-basso e passa-alto per far passare le frequenze fra 8 Hz e 15 kHz.

Il circuito elettronico con l’aggiunta di filtri passa-basso e passa-alto.