I piezo buzzer sono dispositivi semplici per la produzione di suoni, ampiamente utilizzati nei progetti di elettronica. Avvertono gli utenti con beep, toni o allarmi.
Esistono due tipi principali di buzzer: attivi e passivi. Ogni tipo funziona in modo diverso ed è adatto a diverse applicazioni. I buzzer attivi hanno oscillatori integrati, quindi producono suono quando alimentati. I buzzer passivi necessitano di un segnale esterno, come un’onda quadra, per generare il suono.
Nelle sezioni seguenti esploreremo le differenze tra buzzer attivi e passivi, come collegarli e come programmarli efficacemente.
Componenti necessari
Avrai bisogno di un buzzer passivo e di uno attivo. Ne ho elencati due qui sotto, ma esistono molte alternative. Nota che il buzzer attivo è per 5V, mentre quello passivo funziona da 3V a 5V.
Per quanto riguarda il microcontrollore, ho usato un Arduino Uno per questo progetto, ma qualsiasi altro Arduino o ESP32 andrà bene. Inoltre, una breadboard, alcuni cavi e un set di resistori saranno utili.

Buzzer attivo 5V

Buzzer passivo 3..5V

Kit di resistori

Arduino Uno

Cavo USB per Arduino UNO

Set di cavi Dupont

Breadboard
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Principio di funzionamento dei piezo buzzer
Un piezo buzzer funziona basandosi sull’effetto piezoelettrico. Questo effetto si verifica in alcuni materiali ceramici che cambiano forma quando viene applicata una tensione.
All’interno del buzzer c’è un sottile disco di ceramica piezoelettrica. Questo disco è incollato a un diaframma metallico. Il diaframma metallico agisce come una membrana flessibile.

Quando viene applicata una tensione ai terminali, si crea un campo elettrico nel materiale ceramico. La ceramica si espande o si contrae a seconda della polarità della tensione. La variazione dimensionale è molto piccola, ma sufficiente a piegare il diaframma metallico collegato.

Se viene applicata una tensione continua (DC), il disco si sposta in una posizione e vi rimane (buzzer passivo). In questo caso non viene prodotto un suono continuo. Per generare suono, deve essere applicata una tensione alternata. La tensione cambia polarità a una frequenza specifica. I buzzer attivi hanno un circuito oscillatore integrato che genera la tensione alternata.

Man mano che la tensione alterna, il disco di ceramica si espande e contrae rapidamente. Questo fa sì che il diaframma metallico si flette su e giù. Il movimento del diaframma spinge e tira l’aria circostante. Questo crea onde di pressione nell’aria, che percepiamo come suono.
La frequenza del suono è uguale alla frequenza del segnale applicato. Il volume dipende dall’ampiezza della tensione e dal design meccanico del buzzer. Molti piezo buzzer sono progettati per risuonare a una frequenza specifica per aumentare il volume.
Differenze tra buzzer passivi e attivi
Buzzer passivo
Un buzzer passivo contiene solo l’elemento piezoelettrico e il diaframma. Non include un circuito oscillatore interno. Quando applichi una tensione continua, non produce un suono continuo. Emette solo un clic quando la tensione cambia.
L’immagine seguente mostra le parti di un buzzer passivo. Come puoi vedere, l’involucro contiene solo l’elemento piezoelettrico ma nessuna elettronica:

Per generare un tono con un buzzer passivo, devi applicare un segnale alternato. Di solito è un’onda quadra generata da un Arduino o ESP32 usando PWM. La frequenza di uscita definisce direttamente la frequenza del suono. Questo ti permette di generare toni diversi e melodie semplici.

Buzzer attivo
Un buzzer attivo include un circuito oscillatore integrato. Quando applichi una tensione continua entro il range specificato, il circuito interno genera automaticamente un segnale AC per l’elemento piezoelettrico. Il buzzer produce un tono fisso senza alcuna generazione di segnale esterno. Devi solo impostare il pin di controllo su HIGH per farlo suonare. La frequenza è predefinita dall’oscillatore interno – tipicamente tra 2 e 4 kHz – e non può essere modificata.

Riepilogo
I buzzer passivi offrono pieno controllo su frequenza e temporizzazione. Sono adatti per applicazioni che richiedono toni o melodie diverse. I buzzer attivi sono più semplici da usare. Sono ideali per allarmi o indicatori di stato dove serve un solo tono fisso.
Dal punto di vista del microcontrollore, un buzzer passivo richiede un pin con capacità PWM o generazione di segnale basata su timer. Un buzzer attivo richiede solo un pin digitale che possa commutare tra HIGH e LOW.
Riconoscere buzzer attivi e passivi
I buzzer passivi e attivi si assomigliano esternamente e possono essere facilmente confusi. Identificare se un buzzer è attivo o passivo è fondamentale prima di collegarlo al tuo Arduino o ESP32.
Come detto prima, i buzzer attivi hanno un circuito con oscillatore integrato. Ciò significa che necessitano solo di una tensione continua per produrre suono. I buzzer passivi, invece, non hanno questo oscillatore interno e richiedono un segnale esterno, come un’onda quadra, per generare suono.
Retro
Tipicamente il retro di un buzzer attivo è completamente coperto da resina epossidica nera, mentre i buzzer passivi espongono una scheda elettronica:

Altezza
A causa del circuito interno, l’involucro di un buzzer attivo è generalmente più alto di quello di un buzzer passivo e il pin del terminale positivo è spesso più lungo:

Etichetta
Infine, se acquisti un buzzer nuovo, i buzzer attivi spesso hanno un adesivo sopra il foro del suono che devi rimuovere prima dell’uso:

Resistenza
Oltre all’aspetto, puoi anche misurare la resistenza del buzzer per determinarne il tipo. I buzzer attivi hanno una resistenza più alta, intorno a 40 Ω, o risultano come circuito aperto. I buzzer passivi, invece, hanno una resistenza più bassa, superiore a 20 Ω tra i terminali.
Test con tensione
Il metodo più sicuro per determinare il tipo di buzzer è collegarlo a 5V. Un buzzer attivo emetterà suono, mentre un buzzer passivo rimarrà silenzioso o produrrà un singolo clic.
Riepilogo
La tabella seguente riassume le differenze tra buzzer attivi e passivi:
| Caratteristica | Buzzer attivo | Buzzer passivo |
|---|---|---|
| Oscillatore interno | Sì | No |
| Suono diretto DC | Sì | No o clic |
| Retro | Sigillato con epossidica nera | PCB/scheda aperta |
| Capacità sonora | Tono fisso | Toni vari/musicali |
| Resistenza | Alta (≈ 40 Ω) | Bassa (≈ 20 Ω) |
| Corrente | 1 … 15 mA | 1 … 5 mA (ma con picchi di corrente) |
Scegliere il buzzer giusto per i progetti
La scelta del buzzer giusto dipende dalle esigenze e dalla complessità del tuo progetto. I buzzer attivi sono semplici da usare. Hanno un oscillatore integrato, quindi basta fornire alimentazione per produrre suono. Sono ideali per avvisi o allarmi semplici dove serve un tono costante senza programmazione aggiuntiva.
I buzzer passivi, invece, richiedono un segnale esterno per generare suono. Non producono suono da soli. Devi inviare un’onda quadra o un segnale di tono dal tuo Arduino per controllare altezza e durata. Questa flessibilità rende i buzzer passivi perfetti per progetti con melodie, effetti sonori o toni variabili.
Se vuoi risparmiare tempo e mantenere il codice semplice, scegli un buzzer attivo. È plug-and-play e funziona bene per notifiche di base. Tuttavia, se il tuo progetto prevede musica o schemi sonori complessi, un buzzer passivo offre più controllo e creatività.
Considera anche i requisiti di alimentazione e le dimensioni. I buzzer attivi spesso consumano più corrente a causa dell’oscillatore interno. I buzzer passivi possono essere più efficienti energeticamente se controlli bene il segnale. Inoltre, puoi acquistarli senza involucro, il che li rende particolarmente adatti a progetti compatti.
Non dimenticare di controllare il datasheet per tensione e corrente per assicurarti della compatibilità.
Collegare un buzzer attivo ad Arduino
Collegare un buzzer attivo ad Arduino è semplice. Poiché i buzzer attivi hanno oscillatori integrati, necessitano solo di una tensione continua per produrre suono. Ciò significa che non devi generare un segnale di tono dall’Arduino; basta alimentare il buzzer per farlo suonare. Tuttavia
Inizia identificando i terminali positivo e negativo del buzzer. Il terminale positivo è solitamente contrassegnato con un segno più (+) o ha un piedino più lungo.

Collega questo terminale a uno dei pin digitali di Arduino, ad esempio il pin 8. Poi collega il terminale negativo al pin GND (massa) di Arduino come mostrato sotto:

Una volta collegato, puoi controllare il buzzer impostando il pin digitale su HIGH o LOW – proprio come faresti con un LED. Impostare il pin su HIGH alimenta il buzzer e lo fa suonare, mentre impostarlo su LOW lo spegne.
Di seguito un esempio minimo di sketch che accende il buzzer per un secondo, poi lo spegne per un secondo, ripetutamente:
const int buzzerPin = 8;
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
digitalWrite(buzzerPin, HIGH); // Turn buzzer on
delay(1000); // Wait for 1 second
digitalWrite(buzzerPin, LOW); // Turn buzzer off
delay(1000); // Wait for 1 second
}
Questo codice fa emettere al buzzer un beep ogni secondo. Poiché il buzzer attivo gestisce internamente la generazione del tono, non puoi usare la funzione tone() o segnali PWM per controllarlo.
Collegare un buzzer passivo ad Arduino
Collegare un buzzer passivo ad Arduino è facile ma richiede un po’ più di attenzione rispetto a un buzzer attivo. A differenza dei buzzer attivi, i buzzer passivi necessitano di un segnale PWM per produrre suono, quindi userai uno dei pin digitali di Arduino capaci di generare PWM. La tabella seguente elenca i pin PWM per le schede Arduino più comuni:
| Scheda | Pin PWM |
|---|---|
| Arduino UNO | 3, 5, 6, 9, 10, 11 |
| Arduino Nano | 3, 5, 6, 9, 10, 11 |
| Arduino Mega 2560 | 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 44, 45, 46 |
| Arduino Leonardo | 3, 5, 6, 9, 10, 11, 13 |
| Arduino Micro | 3, 5, 6, 9, 10, 11, 13 |
| Arduino Due | 2 a 13 |
| Arduino Zero | 3, 4, 5, 6, 8, 9, 10, 11, 12, 13 |
Per collegare il buzzer, inizia identificando i terminali positivo e negativo. Il terminale positivo è solitamente indicato sulla PCB o c’è un segno più sull’involucro. Spesso il segno più è molto debole e difficile da vedere:

Collega il terminale positivo a un pin digitale con capacità PWM su Arduino, come il pin 11. Poi collega il terminale negativo alla massa (GND) di Arduino.
I buzzer passivi assorbono pochissima corrente, in media da 1 a 5 mA. Ma possono avere picchi di corrente durante lo switching. Perciò è consigliato aggiungere un resistore di limitazione della corrente in serie con il buzzer. Un resistore da 100 Ω funziona bene nella maggior parte dei casi. Collega il resistore tra il pin PWM 11 di Arduino e il terminale positivo del buzzer come mostrato sotto.

Tuttavia, se il volume è troppo basso, puoi provare a rimuovere il resistore da 100 Ω o sostituirlo con un valore inferiore.
Il circuito permette ad Arduino di inviare segnali a frequenza variabile al buzzer passivo, permettendogli di produrre toni diversi. Ricorda, il buzzer passivo non suonerà a meno che tu non generi un segnale PWM tramite il codice.
Esempi di codice per buzzer attivi
I buzzer attivi sono semplici da usare con Arduino perché necessitano solo di una tensione continua per produrre suono. Non devi generare un segnale di tono; basta accendere o spegnere il buzzer collegandolo a un pin digitale GPIO.
Ecco un esempio base per far suonare un buzzer attivo per un secondo:
int buzzerPin = 8;
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
digitalWrite(buzzerPin, HIGH); // Turn buzzer on
delay(1000); // Wait for 1 second
digitalWrite(buzzerPin, LOW); // Turn buzzer off
delay(1000); // Wait for 1 second
}
Questo codice imposta il pin del buzzer come output. Poi accende il buzzer per un secondo e lo spegne per un secondo ripetutamente. Il buzzer emetterà un beep costante durante lo stato HIGH.
Puoi anche creare pattern semplici cambiando i tempi di delay. Per esempio, per fare un beep breve seguito da una pausa:
void loop() {
digitalWrite(buzzerPin, HIGH);
delay(200); // Short beep
digitalWrite(buzzerPin, LOW);
delay(800); // Longer pause
}
Questo metodo funziona bene per allarmi, notifiche o effetti sonori semplici. Poiché i buzzer attivi hanno oscillatori integrati, non devi preoccuparti di generare frequenze nel codice. Tuttavia, puoi modificare leggermente la frequenza aggiungendo un resistore in serie, come fatto per il buzzer passivo. Prova con un resistore da 100 Ω e sentirai un tono leggermente più basso.
In sintesi, controllare un buzzer attivo con Arduino è semplice. Basta applicare segnali HIGH o LOW per accendere o spegnere il suono.
Esempi di codice per buzzer passivi
I buzzer passivi richiedono un po’ più di lavoro rispetto a quelli attivi perché non generano suono da soli. Devi inviare loro un segnale a onda quadra a una frequenza specifica per produrre un tono. Ma la funzione Arduino tone() rende questo semplice.
Ecco un esempio semplice che suona un tono a 1 kHz per un secondo su un buzzer passivo collegato al pin 11:
int buzzerPin = 11;
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
tone(buzzerPin, 1000); // Play 1000 Hz tone
delay(1000); // Wait for 1 second
noTone(buzzerPin); // Stop the tone
delay(1000); // Wait for 1 second before repeating
}
Questo codice imposta il pin 11 come output e usa tone() per generare un’onda quadra a 1000 Hz. Il buzzer suona per un secondo, poi si ferma per un secondo, creando un pattern di beep.
Puoi anche creare melodie cambiando frequenza e durata. Per esempio, per suonare due note diverse in sequenza:
int buzzerPin = 11;
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
tone(buzzerPin, 523); // Play C5 note (523 Hz)
delay(500);
tone(buzzerPin, 659); // Play E5 note (659 Hz)
delay(500);
noTone(buzzerPin);
delay(1000);
}
In questo esempio, il buzzer suona una nota C5 seguita da una nota E5, ciascuna della durata di mezzo secondo. La funzione noTone() ferma il suono prima della pausa.
Se vuoi più controllo, puoi generare toni manualmente usando digitalWrite() e delayMicroseconds(), ma tone() è di solito sufficiente e più facile da usare. Ecco lo stesso codice di prima ma con tone() sostituita:
int buzzerPin = 11;
void playTone(int frequency, int durationMs) {
long halfPeriod = 1000000L / (2L * frequency);
long cycles = (long)frequency * durationMs / 1000L;
for (long i = 0; i < cycles; i++) {
digitalWrite(buzzerPin, HIGH);
delayMicroseconds(halfPeriod);
digitalWrite(buzzerPin, LOW);
delayMicroseconds(halfPeriod);
}
}
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
playTone(523, 500); // C5 (523 Hz) for 500 ms
delay(10); // Short pause between notes
playTone(659, 500); // E5 (659 Hz) for 500 ms
delay(1000); // Equivalent to noTone() + delay(1000)
}
Ricorda, i buzzer passivi richiedono un segnale a frequenza per produrre suono, quindi usa sempre tone() o metodi equivalenti per pilotarli. Per altri esempi, consulta il nostro tutorial Use A Piezo Buzzer With Arduino.
Puoi usare il seguente strumento per trovare frequenze e durate per la funzione tone() e riprodurre i suoni desiderati:
Risoluzione dei problemi comuni
Quando lavori con i buzzer, potresti incontrare alcuni problemi comuni. Fortunatamente, la maggior parte di questi è facile da risolvere con semplici controlli e aggiustamenti.
Prima di tutto, se il buzzer non emette suono, verifica il cablaggio. Assicurati che i pin positivo e negativo del buzzer siano collegati correttamente al pin di uscita e alla massa di Arduino. La polarità invertita può impedire il funzionamento, specialmente con i buzzer attivi.
Poi, controlla il codice. Per i buzzer attivi, un semplice digitalWrite impostato su HIGH dovrebbe produrre suono. Per i buzzer passivi, devi usare la funzione tone() per generare una frequenza. Se dimentichi questo, il buzzer rimarrà silenzioso o sentirai solo un clic.
Se il buzzer emette un suono debole o distorto, il problema potrebbe essere l’alimentazione. Assicurati che la scheda Arduino fornisca corrente sufficiente. A volte, usare una fonte di alimentazione separata o aggiungere un transistor per pilotare il buzzer aiuta.
Un altro problema è il suono continuo quando ti aspetti suoni intermittenti. Questo succede di solito se il codice manca di temporizzazioni o delay adeguati. Usa la funzione delay() o timer per controllare quando il buzzer si accende e si spegne.
Infine, tieni presente che non puoi regolare il volume del buzzer via codice, sia esso passivo o attivo. Tuttavia, puoi aggiungere un resistore in serie a un buzzer passivo per ridurre la tensione e quindi il volume in una certa misura.
Conclusioni
I buzzer aggiungono suono e feedback ai tuoi progetti Arduino in modo semplice ed efficace. I buzzer attivi sono facili da usare perché necessitano solo di alimentazione per produrre suono. Li colleghi a un pin digitale e a massa, poi imposti il pin su HIGH per sentire un tono. I buzzer passivi, invece, richiedono più controllo. Devi generare un segnale a onda quadra per creare toni diversi, offrendo più flessibilità per melodie ed effetti sonori.
La scelta del buzzer giusto dipende dalle esigenze del progetto. Se vuoi un beep o un allarme rapido, un buzzer attivo è la scelta migliore. Se vuoi suonare melodie o suoni personalizzati, opta per un buzzer passivo. Controlla sempre il datasheet del buzzer per confermare il tipo e i requisiti di tensione.
Quando colleghi buzzer al tuo Arduino, ricorda di usare resistori di limitazione della corrente se necessario e evita di alimentarli direttamente da pin che non possono fornire corrente sufficiente.
Se hai domande, sentiti libero di lasciarle nella sezione commenti.
Buon divertimento con il tinkering 😉

