Microfono con Arduino e indicatore LED del volume
Usiamo un microfono amplificato per leggere il livello sonoro con Arduino e accendere progressivamente sei LED, creando un semplice indicatore visivo del volume.
Cosa imparerai
- come leggere un microfono amplificato con Arduino;
- come usare un valore di base per compensare il rumore di fondo;
- come creare più soglie di accensione;
- come gestire una barra a 6 LED;
- come usare il Monitor Seriale per la calibrazione;
- perché il progetto non misura direttamente i decibel reali.
Il progetto
Il progetto realizza un indicatore a sei LED che si accendono progressivamente in funzione del livello sonoro rilevato. I LED sono tre verdi, due gialli e uno rosso.
Microfono amplificato utilizzato Nel progetto.
Materiale necessario
🧰 Kit Arduino consigliato
Molti progetti del sito utilizzano LED, resistenze, breadboard e moduli sensore. Un kit completo può essere comodo per iniziare.
👉 Guarda il kit Arduino consigliatoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema del circuito
Schema di collegamento del progetto. era visualizzato a circa 696 px.
Pin utilizzati
| Elemento | Pin Arduino |
|---|---|
| Microfono – uscita analogica | A0 |
| LED 1 | D12 |
| LED 2 | D11 |
| LED 3 | D10 |
| LED 4 | D9 |
| LED 5 | D8 |
| LED 6 | D7 |
Il valore “base”
Nel progetto viene usata una variabile chiamata base. Il suo valore non è fisso: il progetto segnala che può cambiare indicativamente tra 180 e 400 a ogni nuovo utilizzo del sistema.
Lo sketch usa base = 360. Prima di usare davvero il progetto conviene quindi osservare il valore del microfono sul Monitor Seriale in condizioni di silenzio e impostare una base coerente.
Soglie dei sei LED
| LED accesi | Condizione nel codice |
|---|---|
| 0 | Valore inferiore a base |
| 1 | Valore ≥ base |
| 2 | Valore ≥ base + 16 |
| 3 | Valore ≥ base + 31 |
| 4 | Valore ≥ base + 46 |
| 5 | Valore ≥ base + 61 |
| 6 | Valore ≥ base + 76 |
Codice Arduino commentato
// ==========================================================
// MICROFONO + INDICATORE LED DEL VOLUME
// ==========================================================
// Ingresso analogico del microfono
const int microfonoPin = A0;
// Primo e ultimo pin della barra LED
const int ledMin = 7;
const int ledMax = 12;
// Valore di base .
// Va calibrato osservando il segnale reale del microfono.
int base = 360;
void setup() {
// Configura i sei pin LED come uscite.
for (int pin = ledMin; pin <= ledMax; pin++) {
pinMode(pin, OUTPUT);
}
// Avvia il Monitor Seriale per la calibrazione.
Serial.begin(9600);
}
void loop() {
// Legge il valore analogico del microfono.
int valoreSuono = analogRead(microfonoPin);
// Mostra il valore grezzo sul Monitor Seriale.
Serial.println(valoreSuono);
// Spegne preventivamente tutti i LED.
for (int pin = ledMin; pin <= ledMax; pin++) {
digitalWrite(pin, LOW);
}
// Ogni soglia aggiuntiva accende un LED in più.
if (valoreSuono >= base) {
digitalWrite(12, HIGH);
}
if (valoreSuono >= base + 16) {
digitalWrite(11, HIGH);
}
if (valoreSuono >= base + 31) {
digitalWrite(10, HIGH);
}
if (valoreSuono >= base + 46) {
digitalWrite(9, HIGH);
}
if (valoreSuono >= base + 61) {
digitalWrite(8, HIGH);
}
if (valoreSuono >= base + 76) {
digitalWrite(7, HIGH);
}
}
Come funziona il codice
1. Lettura del microfono
analogRead(A0) legge la tensione fornita dal modulo microfono e la converte in un valore numerico.
2. Spegnimento della barra
A ogni ciclo tutti i LED vengono prima spenti. Subito dopo vengono riaccesi soltanto quelli corrispondenti alle soglie superate.
3. Accensione progressiva
Le condizioni if sono cumulative: se il valore supera, per esempio, base + 61, risultano vere anche tutte le soglie inferiori e quindi si accendono cinque LED.
Questo progetto misura davvero i decibel?
No. Lo sketch utilizza il valore analogico grezzo del modulo e lo confronta con soglie relative. Non esegue una calibrazione acustica in dB SPL e non tiene conto della risposta in frequenza del microfono, del guadagno dell’amplificatore o di un riferimento sonoro noto.
Come calibrare il progetto
- accendi Arduino in un ambiente relativamente silenzioso;
- apri il Monitor Seriale a 9600 baud;
- osserva il valore medio a riposo;
- imposta
basepoco sopra il rumore di fondo; - prova voce, musica o battiti di mani;
- se i LED si accendono troppo facilmente, aumenta le soglie;
- se reagiscono poco, riducile.
Una possibile evoluzione: calibrazione automatica
Una versione più evoluta può misurare per alcuni secondi il livello di fondo all’avvio e calcolare automaticamente la base. Questo evita di modificare manualmente lo sketch ogni volta che cambiano modulo o ambiente.
const int microfonoPin = A0;
int base = 0;
void setup() {
Serial.begin(9600);
long somma = 0;
// Acquisisce 100 campioni iniziali
// per stimare il livello di riposo.
for (int i = 0; i < 100; i++) {
somma += analogRead(microfonoPin);
delay(5);
}
// Media dei campioni + piccolo margine.
base = (somma / 100) + 5;
Serial.print("Base automatica: ");
Serial.println(base);
}
void loop() {
// Qui può essere inserita la logica della barra LED.
}
Risultato del progetto
Scarica lo sketch
⬇️ Scarica arduinoledvolume.inoDebug rapido
- verifica che il modulo microfono abbia un’uscita analogica collegata ad A0;
- controlla il valore a riposo sul Monitor Seriale;
- regola la variabile
basein base al tuo modulo; - controlla la polarità dei sei LED;
- usa una resistenza da circa 220 Ω per ogni LED;
- se tutti i LED restano accesi, aumenta la base;
- se nessun LED reagisce, riduci la base o verifica il guadagno del modulo.
Varianti del progetto
- usare 10 LED per una barra più dettagliata;
- aggiungere una media dei campioni per rendere la lettura più stabile;
- memorizzare il picco massimo per qualche istante;
- pilotare una barra LED dedicata;
- visualizzare il livello su OLED;
- inviare i valori al PC e disegnare il segnale in tempo reale.
Cosa devi ricordare
- Il microfono viene letto su A0.
- I sei LED sono collegati ai pin D7–D12.
- La variabile
baserappresenta il livello di riferimento. - Le soglie progressive accendono più LED all’aumentare del segnale.
- Il valore base va calibrato sul modulo reale.
- Il progetto non misura decibel assoluti: mostra variazioni relative del livello sonoro.
Domande frequenti
Perché tutti i LED sono sempre accesi?
Probabilmente il valore di base è troppo basso rispetto all’uscita di riposo del tuo microfono. Controlla il Monitor Seriale e aumenta base.
Perché il progetto non reagisce ai suoni?
Controlla l’uscita analogica del modulo, il collegamento ad A0 e il guadagno del microfono. La soglia potrebbe anche essere troppo alta.
Posso usarlo come fonometro?
No. Senza una calibrazione acustica specifica il progetto non misura dB SPL; è un indicatore relativo del segnale.
Posso rendere automatica la calibrazione?
Sì. Puoi misurare il livello di fondo per alcuni secondi all’avvio e calcolare automaticamente la variabile base.

