Ben ritrovati su 9minuti.it, oggi parleremo di un modulo microfono che, a differenza degli altri venduti nei vari kit, funziona.
Questo sensore sonoro stato progettato dai mitici ragazzi di Adafruit ed è stato reso open source, quindi si trovano anche i cloni a poco prezzo.
Ogni tanto però sarebbe anche giusto supportarli, non credete?

Il collegamento del Microfono Adafruit MAX9814 con Arduino
Bisogna solo collegare Vdd, Gnd e la porta Out a un’entrata analogica.
Se volessimo abbassare i db massimi captati dal modulo bisogna connettere Gain a Gnd o a Vdd, c’è tutto scritto sul modulo stesso ed è piuttosto intuitivo.

Lo sketch
Questo sketch non l’ho scritto io ma l’ho preso da sito della Adafruit ed è stato scritto appositamente per il microfono Adafruit MAX9814 con Arduino.
Vediamo il codice riga per riga per utilizzare il microfono come sensore di rumore.
/****************************************
Example Sound Level Sketch for the
Adafruit Microphone Amplifier
****************************************/
const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long startMillis = millis(); // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(0);
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax)
{
signalMax = sample; // save just the max levels
}
else if (sample < signalMin)
{
signalMin = sample; // save just the min levels
}
}
}
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
double volts = (peakToPeak * 5.0) / 1024; // convert to volts
Serial.println(volts);
}
Il commento
6 – Dichiarazione della costante intera sampleWindow che sarà il tempo espresso in millisecondi fra una lettura e l’altra
7 – Dichiarazione di un intero unsigned di nome sample
9 – Apertura del Setup
11 – Inizializziamo la porta seriale
15 – Apertura del ciclo Loop
17 – Salviamo i millis attuali nella variabile startMillis di tipo long unsigned
18 – Creazione della variabile peakToPeak usata per salvare dentro la differenza fra il segnale minimo e il massimo
20 – signalMax è il valore massimo
21 – signalMin è il valore minimo
24 – Finché il contatore di millisecondi da quando è stato acceso Arduino, a cui sottraggo i millisecondi contenuti in startMillis, sono superiori alla nostra sampleWindow, allora eseguiamo il codice all’interno del ciclio while
26 – Salviamo all’interno della variabile sample il valore letto sull’entrata analogica 0
27 – Se il valore di sample è inferiore a 1024, ovvero il valore massimo leggibile sulla porta analogica
29 – Se il valore di sample è maggiore del valore massimo riscontrato salvato dentro signalMax
31 – Aggiorna il valore massimo con quello contenuto in sample
33 – Altrimenti, se il valore di sample è inferiore a signalMin
35 – Aggiornamento del valore di signalMin con il valore contenuto in sample
39 – peakToPeak è la variabile che conterrà la differenza tra il valore massimo e il valore minimo riscontrato
40 – Il valore peakToPeak viene moltiplicato per 5 che è il voltaggio con cui funziona Arduino e poi diviso per 1024 perché la porta analogica può andare da 0 a 1024.
42 – Stampa della variabile volts che conterrà il nostro valore!
Spero via sia piaciuto e che vogliate condividere questo articolo per supportare il blog.
Per questo tutorial è tutto e spero che vi sia stato utile e se avete bisogno di aiuto rimango a disposizione.
Come sempre vi chiedo se potete gentilmente commentare o condividere questo articolo per aiutarmi nella manutenzione del sito web.
Grazie mille,
Alessandro