Skip to Content

Attuatori Piezo Attivi e Passivi con Arduino

Attuatori Piezo Attivi e Passivi con Arduino

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

Arduino Uno

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Dupont wire set

Set di cavi Dupont

Half_breadboard56a

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.

Piezo Element
Elemento piezoelettrico

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.

Piezo element bending depending on polarity
Piegamento dell’elemento piezoelettrico a seconda della polarità

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.

Active buzzer with piezo element and oscillator circuit
Buzzer attivo con elemento piezoelettrico e circuito oscillatore

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:

Parti di un buzzer passivo

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:

Retro di buzzer attivo vs passivo

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:

Altezza di buzzer attivo vs passivo

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 No
Suono diretto DC 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.

Positive and negative terminal of active buzzer
Terminali positivo e negativo del buzzer attivo

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:

Connecting Active Buzzer to Arduino UNO
Collegamento buzzer attivo ad Arduino UNO

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:

Positive and negative terminal of passive buzzer
Terminale positivo del buzzer passivo

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.

Connecting Passive Buzzer to Arduino UNO
Collegamento buzzer passivo ad Arduino UNO

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 😉