🚨 Arduino • Buzzer • Sirena bitonale

Sirena con Arduino, buzzer e LED lampeggiante

Creiamo una sirena bitonale con un buzzer e facciamo lampeggiare un LED, imparando come la frequenza del segnale influenza il suono prodotto.

DifficoltàPrincipiante
BuzzerD7
LEDD4
In poche parole: Arduino genera due frequenze diverse sul buzzer alternando rapidamente HIGH e LOW sul pin 7. Il LED sul pin 4 cambia stato insieme ai due toni.

Cosa imparerai

  • come generare un suono con un buzzer;
  • come cambia la frequenza variando il tempo HIGH/LOW;
  • come creare una sirena bitonale;
  • come sincronizzare un LED al suono;
  • come usare un ciclo for per stabilire la durata di un tono;
  • come semplificare il progetto con tone().

Come funziona il progetto

Il progetto realizza una sirena bitonale alternando due toni e facendo lampeggiare contemporaneamente un LED. Il segnale del buzzer viene generato manualmente, senza usare tone().

Materiale necessario

🔌 Arduino Uno
🔊 1 buzzer
💡 1 LED
〰️ 2 resistenze da 220 Ω
🧩 Breadboard
🔗 Cavetti jumper

🧰 Kit Arduino consigliato

Molti progetti del sito utilizzano buzzer, LED, resistenze e breadboard. 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 sirena con buzzer e LED

Schema di collegamento della sirena con buzzer e LED.

Pin utilizzati

ElementoPin ArduinoFunzione
BuzzerD7Generazione del tono
LEDD4Segnalazione luminosa
Buzzer passivo o attivo? Per variare davvero la frequenza serve un buzzer passivo o un piccolo trasduttore piezo. Un buzzer attivo contiene già un oscillatore interno e normalmente produce un tono fisso quando alimentato.

Codice Arduino commentato

Sirena bitonale con buzzer e LED
// ==========================================================
// SIRENA BITONALE CON ARDUINO
// Buzzer su D7 + LED su D4
// ==========================================================

// Pin collegato al buzzer
const int buzzerPin = 7;

// Pin collegato al LED
const int ledPin = 4;

void setup() {

 // Entrambi i componenti vengono pilotati
 // come uscite digitali.
 pinMode(buzzerPin, OUTPUT);
 pinMode(ledPin, OUTPUT);
}

void loop() {

 // --------------------------------------------------------
 // PRIMO TONO
 // 350 cicli da circa 2 ms ciascuno.
 // HIGH 1 ms + LOW 1 ms = periodo di circa 2 ms.
 // Frequenza teorica circa 500 Hz.
 // --------------------------------------------------------
 for (int i = 0; i < 350; i++) {

 // Attiva buzzer e LED
 digitalWrite(buzzerPin, HIGH);
 digitalWrite(ledPin, HIGH);

 delay(1);

 // Disattiva il buzzer
 digitalWrite(buzzerPin, LOW);

 delay(1);
 }

 // Piccola pausa tra i due toni
 delay(50);

 // --------------------------------------------------------
 // SECONDO TONO
 // 150 cicli da circa 4 ms ciascuno.
 // HIGH 2 ms + LOW 2 ms = periodo di circa 4 ms.
 // Frequenza teorica circa 250 Hz.
 // --------------------------------------------------------
 for (int i = 0; i < 150; i++) {

 // Attiva il buzzer e spegne il LED
 digitalWrite(buzzerPin, HIGH);
 digitalWrite(ledPin, LOW);

 delay(2);

 // Disattiva il buzzer
 digitalWrite(buzzerPin, LOW);

 delay(2);
 }
}

Come si genera il suono

Un buzzer passivo può produrre frequenze diverse se riceve una sequenza rapida di impulsi HIGH e LOW.

SemiperiodoPeriodo totaleFrequenza teorica
1 ms HIGH + 1 ms LOW2 mscirca 500 Hz
2 ms HIGH + 2 ms LOW4 mscirca 250 Hz
Formula: frequenza = 1 / periodo. Se il periodo è 0,002 secondi, la frequenza teorica è circa 500 Hz.

Perché il ciclo for decide anche la durata

La frequenza dipende dal tempo di ogni impulso, mentre il numero di iterazioni del ciclo for determina per quanto tempo quel tono viene mantenuto.

Nel primo tono:

350 cicli × circa 2 ms ≈ 700 ms

Nel secondo:

150 cicli × circa 4 ms ≈ 600 ms

Versione più semplice con tone()

Arduino mette a disposizione tone(), che rende il codice molto più leggibile quando bisogna generare frequenze audio semplici.

Versione alternativa con tone()
const int buzzerPin = 7;
const int ledPin = 4;

void setup() {
 pinMode(ledPin, OUTPUT);
}

void loop() {

 // Primo tono: circa 500 Hz
 digitalWrite(ledPin, HIGH);
 tone(buzzerPin, 500);
 delay(700);

 // Breve pausa
 noTone(buzzerPin);
 delay(50);

 // Secondo tono: circa 250 Hz
 digitalWrite(ledPin, LOW);
 tone(buzzerPin, 250);
 delay(600);

 noTone(buzzerPin);
}
Nota: la versione con tone() è concettualmente equivalente ma non produce esattamente lo stesso segnale della versione manuale. È proposta come variante didattica più semplice.

Il potenziometro può davvero regolare il volume?

È possibile pensare a un controllo del volume, ma bisogna fare attenzione: non è consigliabile usare un comune potenziometro direttamente come regolatore di potenza per carichi che assorbono corrente significativa.

Per un piccolo piezo possono esistere semplici soluzioni resistive, ma per controllare il livello sonoro in modo corretto conviene dimensionare il circuito in base al tipo di buzzer e, se necessario, usare uno stadio di pilotaggio.

Simulazione Tinkercad

▶️ Apri la simulazione Tinkercad

Esempio del progetto

Sketch Arduino allarme sirena

Scarica lo sketch

⬇️ Scarica lo sketch Arduino

Debug rapido

  • verifica che il buzzer sia collegato al pin D7;
  • controlla il LED sul pin D4 e la sua polarità;
  • usa una resistenza adatta in serie al LED;
  • se il buzzer emette sempre lo stesso tono, potrebbe essere un buzzer attivo;
  • se il suono è molto debole, verifica il tipo di trasduttore e il circuito di pilotaggio;
  • se vuoi cambiare tonalità, modifica i tempi oppure usa tone() con frequenze diverse.

Varianti del progetto

  • creare una sirena ascendente e discendente;
  • aggiungere due LED alternati;
  • controllare la sirena con un pulsante;
  • attivarla tramite sensore PIR;
  • usare millis() per evitare blocchi;
  • pilotare un buzzer più potente tramite transistor.

Cosa devi ricordare

  • Il buzzer è collegato al pin D7.
  • Il LED è collegato al pin D4.
  • La frequenza dipende dal periodo del segnale HIGH/LOW.
  • Il numero di cicli determina la durata del tono.
  • Un buzzer passivo permette di variare la frequenza.
  • tone() può semplificare molto il codice.

Domande frequenti

Perché il buzzer non cambia frequenza?

Potresti usare un buzzer attivo. Per generare toni diversi serve normalmente un buzzer passivo o un piezo.

Posso cambiare il suono della sirena?

Sì. Puoi modificare i ritardi nello sketch oppure usare tone() con frequenze differenti.

Posso usare un buzzer più potente?

Non direttamente dal pin Arduino se richiede più corrente. Serve uno stadio di pilotaggio adeguato, per esempio con transistor.

Posso aggiungere un pulsante di attivazione?

Sì. Basta leggere un ingresso digitale e avviare la sequenza della sirena soltanto quando il pulsante viene premuto.