Arduino è una piattaforma versatile che permette di realizzare progetti creativi nel mondo dell’elettronica. Tra i componenti più interessanti, il buzzer piezoelettrico consente di riprodurre suoni, toni e melodie, rendendo i progetti più interattivi e accattivanti. In questo articolo, vedremo come utilizzare un Arduino per suonare melodie popolari con un buzzer piezoelettrico, esplorando il codice, le librerie necessarie e alcuni esempi pratici.
Cosa serve
Prima di iniziare, assicurati di avere a disposizione i seguenti componenti:
- Arduino Nano (o un altro modello Arduino)
- Buzzer piezoelettrico
- Mini breadboard
- Cavi Dupont
- Libreria “Pitches” (scaricabile da GitHub)
Schema di Collegamento
Il collegamento di un buzzer piezoelettrico ad Arduino è molto semplice. Il buzzer dispone di due pin:
- Pin positivo (segna tono): collegato al pin digitale D9 dell’Arduino.
- Pin negativo (GND): collegato a terra (GND) sull’Arduino.
Ecco uno schema base:
Configurazione della Libreria
Per generare melodie in modo semplice, utilizzeremo la libreria Pitches, che contiene i valori delle frequenze standard delle note musicali.
Passaggi per Importare la Libreria:
- Scarica la libreria da GitHub.
- Apri l’IDE Arduino.
- Vai su Sketch > Include Library > Add .ZIP Library.
- Seleziona il file .zip della libreria scaricato.
Ora puoi includere la libreria nel tuo codice con il comando:#include "pitches.h"
Scrivere il codice
Il codice principale per suonare una melodia si basa su due array:
melody[]
: contiene le note musicali.durations[]
: specifica la durata di ogni nota.
Ecco un esempio completo di codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include "pitches.h" #define BUZZER_PIN 9 int melody[] = { NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_E4 }; int durations[] = { 4, 4, 4, 4, 4, 4, 4 }; void setup() { pinMode(BUZZER_PIN, OUTPUT); } void loop() { int size = sizeof(durations) / sizeof(int); for (int note = 0; note < size; note++) { int duration = 1000 / durations[note]; tone(BUZZER_PIN, melody[note], duration); int pauseBetweenNotes = duration * 1.30; delay(pauseBetweenNotes); noTone(BUZZER_PIN); } } |
Note importanti:
- La funzione
tone()
utilizza un timer interno di Arduino, quindi non è compatibile con i pin PWM 3 e 11 su alcuni modelli. - Per una pausa efficace tra le note, si consiglia di aggiungere un 30% alla durata originale.
Perché utilizzare un Timer anziché delay()
?
La funzione tone()
di Arduino sfrutta un timer hardware interno del microcontrollore per generare le frequenze delle note musicali in modo indipendente dal resto del programma. Questo approccio ha due grandi vantaggi rispetto a delay()
:
- Esecuzione Non Bloccante:
Usare un timer consente al microcontrollore di continuare ad eseguire altre operazioni mentre il buzzer riproduce la melodia. La funzionedelay()
, invece, blocca completamente l’esecuzione del programma per la durata specificata, rendendo il sistema meno reattivo. - Precisione del Tempo:
Il timer garantisce una maggiore precisione nella generazione dei toni rispetto adelay()
, che può essere influenzato da variazioni minime nel codice o nell’esecuzione delle istruzioni. Questo è fondamentale per ottenere melodie ben sincronizzate.
Nota:
Tuttavia, è importante ricordare che l’uso della funzione tone()
interferisce con i pin PWM (modulazione di larghezza di impulso) 3 e 11 su alcune schede Arduino. Questo potrebbe limitare l’uso di questi pin per altre funzionalità.
Esempi di melodie pronte
Grazie alla comunità open-source, esistono già melodie predefinite. Puoi trovarle nel repository GitHub ufficiale di HiBit. Alcuni esempi:
Canzoni
- Crystal Castles – Kerosene (NEW)
- Richard Marx – Right Here Waiting
- Rick Astley – Never Gonna Give You Up
- Coldplay – Hymn for the weekend
- Kaleo – Way down we go
- Imagine Dragons – Enemy
- Bon Jovi – Livin’ On A Prayer (NEW)
- Maroon 5 – Memories
- Max feat Keshi – It’s you
- Djo – End of Beginning
- Ed Sheeran – Shape of you
- Chevelle – The Red
- It’s a small world
- Was wollen wir trinken
Film
- Game of Thrones
- Harry Potter
- Home Alone
- Pink panther
- Pirates of the Caribbean
- Star wars
- Subway Surfers – Theme song
- The Godfather
- The lion sleeps tonight
- The Nightmare Before Christmas
- The Simpsons – Theme song
- Fast & Furious – Tokyo Drift
Giochi
Altre Melodie
Personalizzare la Tua Melodia
Puoi creare melodie personalizzate modificando gli array melody[]
e durations[]
. Ecco un esempio per “Happy Birthday”:
1 2 3 4 5 6 7 8 9 |
int melody[] = { NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_C5, NOTE_B4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5 }; int durations[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; |
Conclusione
Realizzare progetti con Arduino e un buzzer piezoelettrico è un modo fantastico per imparare e divertirsi con l’elettronica. Grazie a librerie come Pitches e alla vasta comunità di sviluppatori, puoi sperimentare e creare melodie personalizzate per arricchire i tuoi progetti. Inizia con i brani disponibili e poi lasciati ispirare per creare le tue composizioni uniche!
Se hai dubbi o suggerimenti, lascia un commento e condividi la tua esperienza con noi. Buon divertimento con Arduino!
Per i curiosi, ecco un altra repository interessante: https://github.com/robsoncouto/arduino-songs.
Kit consigliati:
Link utili