🎤 Arduino • Microfono • VU meter LED

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.

DifficoltàPrincipiante / Intermedia
IngressoA0 analogico
Uscite6 LED su D7–D12
In poche parole: Arduino legge il segnale analogico del microfono, lo confronta con un valore di base e accende un numero crescente di LED man mano che il segnale supera soglie successive.

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 per Arduino

Microfono amplificato utilizzato Nel progetto.

Materiale necessario

🔌 Arduino Uno
🎤 Microfono amplificato
🟢 3 LED verdi
🟡 2 LED gialli
🔴 1 LED rosso
〰️ 6 resistenze da 220 Ω
🧩 Breadboard
🔗 Cavetti jumper

🧰 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 consigliato

Link 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 Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema del circuito

Schema Arduino microfono con indicatore LED

Schema di collegamento del progetto. era visualizzato a circa 696 px.

Pin utilizzati

ElementoPin Arduino
Microfono – uscita analogicaA0
LED 1D12
LED 2D11
LED 3D10
LED 4D9
LED 5D8
LED 6D7

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.

La base va calibrata: 360 è soltanto il valore del progetto . Se il tuo modulo fornisce una tensione di riposo diversa, i LED potrebbero restare sempre accesi oppure non accendersi mai.

Soglie dei sei LED

LED accesiCondizione nel codice
0Valore inferiore a base
1Valore ≥ base
2Valore ≥ base + 16
3Valore ≥ base + 31
4Valore ≥ base + 46
5Valore ≥ base + 61
6Valore ≥ base + 76

Codice Arduino commentato

Microfono + barra LED
// ==========================================================
// 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.

Definizione più corretta: è un indicatore relativo del livello del segnale audio, simile a un piccolo VU meter didattico.

Come calibrare il progetto

  1. accendi Arduino in un ambiente relativamente silenzioso;
  2. apri il Monitor Seriale a 9600 baud;
  3. osserva il valore medio a riposo;
  4. imposta base poco sopra il rumore di fondo;
  5. prova voce, musica o battiti di mani;
  6. se i LED si accendono troppo facilmente, aumenta le soglie;
  7. 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.

Esempio semplice di base automatica
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

Arduino microfono con barra LED

Scarica lo sketch

⬇️ Scarica arduinoledvolume.ino

Debug rapido

  • verifica che il modulo microfono abbia un’uscita analogica collegata ad A0;
  • controlla il valore a riposo sul Monitor Seriale;
  • regola la variabile base in 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 base rappresenta 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.