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.
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
forper 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
🧰 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 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 della sirena con buzzer e LED.
Pin utilizzati
| Elemento | Pin Arduino | Funzione |
|---|---|---|
| Buzzer | D7 | Generazione del tono |
| LED | D4 | Segnalazione luminosa |
Codice Arduino commentato
// ==========================================================
// 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.
| Semiperiodo | Periodo totale | Frequenza teorica |
|---|---|---|
| 1 ms HIGH + 1 ms LOW | 2 ms | circa 500 Hz |
| 2 ms HIGH + 2 ms LOW | 4 ms | circa 250 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:
Nel secondo:
Versione più semplice con tone()
Arduino mette a disposizione tone(), che rende il codice molto più leggibile quando bisogna generare frequenze audio semplici.
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);
}
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 TinkercadEsempio del progetto
Scarica lo sketch
⬇️ Scarica lo sketch ArduinoDebug 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.

