
Piezo + Microcontrollore = Musica. Come Fare musica con un piezo e un microcontrollore.
Come Fare musica con un piezo e un microcontrollore
Salve. Sto per mostrarvi come usare un kit microcontrollore della Nerdkit per fare musica. Al di là del kit di base, useremo anche un elemento piezo elettrico che è un dispositivo che varia a seconda della tensione. Cambiando la tensione rapidamente, possiamo fare in modo che il disco oscilli insieme all'aria circostante. Queste onde di pressione nell'aria sono percepite dalle nostre orecchie come suoni.
Che cos'è il piezo
Anzitutto, diamo un'occhiata all'elemento piezo elettrico. Il piezo ha due fili e funziona a livello elettronico come un condensatore. E’ possibile acquistare il piezo alla Radio Shack per circa 2 dollari o direttamente online per meno. Bisogna solo stare attenti che è il tipo che richiede un circuito guida. Non bisogna comprare il piezo con un circuito a pieno buzzer perché questo tipo non permetterebbe di variare il suono.
Se avete già seguito la guida della Nerdkit, avrete sicuramente già pronta la maggior parte del circuito. Ora bisogna inserire un filo dell’elemento Piezo al microcontrollore e l’altro a massa. Sto usando il PA1 dei microcontrollori che ha il pin numero 19 sul chip. Si trova sul lato destro della fila 12 della bread board. Giusto per riassumere ricordate che i numeri pin si contano in senso antiorario lungo il chip. Partendo da quello posizionato in alto a destra arrivate in basso fino a 10 lungo il lato sinistro, cominciate poi da 11 in alto a destra e contate fino a 20 sul lato destro.
Poi, bisogna legare il commutatore del pulsante di comando sul PA7 del microcontrollore che ha il numero pin 11 sul chip. Se si osserva con attenzione si noterà che il commutatore ha tre terminali etichettati con C, NO e NC che significano comune, normalmente aperto e normalmente chiuso. Il pulsante connette C con NO quando è premuto e il resto del tempo connette C a NC. Bisogna usare la resistenza interna pull up del microcontrollore, di cui abbiamo già parlato nella guida della Nerdkit. Così, dovremo solo usare il bottone per tirare la tensione fino metterla a terra.
Ogni onda ha una proprietà associata chiamata frequenza che misura quanti cicli avvengono ogni secondo. Questi cicli al secondo sono chiamati anche Hertz. Il do sotto il rigo su un pianoforte ha una frequenza di 262 hertz che vuole dire che l'aria oscilla avanti ed indietro 262 volte ogni secondo. Ora, un'altra proprietà dell’onda è il periodo che è semplicemente dato dal rapporto tra 1 e la frequenza. Questa misura è la lunghezza espressa con il tempo di un ciclo intero dell'onda. Così, per quel Do sotto il rigo sul pianoforte, il ciclo si ripete ogni 3.8 di millisecondi.
A questo punto, mentre un normale tono suonato è un'onda sinusoidale, noi possiamo fare molto più facilmente un'onda quadra con il microcontrollore portando il pin su on, aspettare un certo periodo di tempo e quindi portare il pin su off e aspettare ancora. Un'onda quadra suona un po' diversamente da un'onda sinusoidale. E questo a causa di ciò che ingegneri e musicisti chiamano armonia o giri in eccesso.
Io vi dimostrerò entrambi usando il generatore di funzione che è un pezzo di apparecchiatura cablato che genera un segnale di tensione. Prima di tutto, un'onda sinusoidale. E poi, un'onda quadra. Riesci a sentire la differenza?
Ho scritto una funzione per far suonare un tono, la quale prende due parametri, il mezzo periodo del tono e la durata delle note. E’ chiaro che la lunghezza delle due ritardi dovrebbero essere ognuna pari alla metà del periodo. Questa funzione calcola il numero di cicli da fare e quindi commuta l’uscita del pin per suonare una nota. Poi usando un sito web che converte le note musicali in frequenze, ho dato una serie di istruzioni “define”con le quali associo nomi appropriati ai valori dei mezzi periodi. Infine, nella funzione principale, ho trascritto la canzone nel codice origine specificando il tono e la durata di ogni nota. Ho anche usato l’LCD per poter aiutare a cantarci sopra.
Ed ecco come funziona il sistema. Per ora è tutto. Spero che voi abbiate imparato qualche cosa su come creare delle onde quadre con ritardi e realizzare il suono dalla tensione. Se volete scaricare il codice sorgente per questo progetto e vedere altri video date uno sguardo ai video della seguente pagina:
www.nerdkits.com

con alcune trasformazione si potrebbe incrementare su una schedina Arduino,
sempre interessante vedere cosa la gente si va a inventare.
progetto lo visto in rete con un semplice PIC e mi ricordo che suonava la stessa melodia, anche se era senza display.
A questo punto facciamolo con Arduino:
http://www.arduino.cc/en/Tutorial/PlayMelody
Ho già visto questo progetto da tempo! Ma realizzarlo con Arduino sarà molto interessante!
Cito: “Partendo da quello posizionato in alto a destra arrivate in basso fino a 10 lungo il lato sinistro, cominciate poi da 11 in alto a destra e contate fino a 20 sul lato destro. ”
Se i pin si numerano in senso antiorario non dovrebbe essere: partire in alto a sinistra e contate fino a dieci lungo il lato sinistro, continuate con 11 in basso a destra e contate fino a 20 sul lato destro?
Questo progetto non rappresenta di sicuro una novità… è comunque interessante nel caso si volesse sostituire il classico buzzer autoscillante!
In questo modo potremmo riprodurre segnali d’allarme personalizzabili.
Questo è un progetto che ho avuto modo di realizzare diversi anni fa con un PIC12f629. Praticamente è un generatore di melodie le cui note, pause e tempi di durata delle singole note vengono salvate in una lookup table. Il firmware, tramite indirizzamento relativo, partendo dalla prima riga della tabella, carica alternativamante il semiperiodo dell’onda quadra relativo alla nota e la durata della nota stessa. Il semiperiodo della nota viene caricato nel TMR0 in modo da poter sfruttare l’interrupt da overflow dello stesso timer e ad ogni fine conteggio avviene il toggle del pin su cui è collegato il trasduttore piezoelettrico. La durata della nota, invece, viene vista come valore di inizializzazione di un timer realizzato via software. Ad ogni underflow di tale timer (perchè il timer viene fatto contare alla rovescia) si incrementa un indice e quindi viene caricata la nuova nota e la relativa durata. Tutto questo fino a quando non si arriva alla fine dello “spartito” identificato in tabella da un valore di durata pari a 0 (i valori di durata sono 4: intero, 1/2, 1/4, 1/8). Per rendere il firmware più leggibile, tramite l’istruzione del preprocessore “define” ho relazionato ogni valore del semiperiodo di ogni singola nota con il nome della nota stessa. In questo modo, se voglio cambiare melodia, basterà riscrivere la lookup table con le nuove note (identificate con il loro nome) e le relative durate.
Ottima spiegazione dell’approccio sul funzionamento generale dell’applicazione: pure io a suo tempo mi cimentai con il noto 16F84A… Ora con le nuove tecnologie si potrebbero acquisire i dati da suonare non dal programma o dalla EEPROM interna, ma da una microSD esterna…