Nel mondo di Arduino vi è data la possibilità di realizzare una miriade di progetti. Da tal proposito in questo articolo vi sarà illustrato un tutorial su come realizzare e comporre tramite l’ausilio di un cicalino passivo la famigerata colonna sonora dei pirati dei Caraibi.
Ma che cosa è un cicalino passivo? Il principio di funzionamento del cicalino passivo si fonda sull’utilizzo della modulazione PWM le cui onde permettono la vibrazione dell’aria sulla membrana interna del cicalino generando così un suono. Impostando la frequenza delle onde correttamente, si possono generare suoni differenti. Per esempio inviando una pulsazione di 523Hz si genera un Do, con una pulsazione di 587Hz si genera un re, con una pulsazione di 659Hz si genera un Mi. Mettendo insieme tutto ciò si può costruire e suonare una canzone.
Il suono è un’onda meccanica longitudinale, che consiste nell’alternarsi di compressioni e rarefazioni del mezzo attraverso cui si propaga. Quando l’onda giunge alle nostre orecchie, la membrana che costituisce il timpano entra in vibrazione. La membrana è spinta verso l’interno dall’aria compressa e aspirata verso l’esterno dall’aria rarefatta. Questo movimento è poi trasmesso, attraverso gli ossicini dell’orecchio medio, a una struttura a spirale piena di liquido, chiamata chiocciola. Le oscillazioni del liquido eccitano delle sottilissime terminazioni nervose, generando il segnale che mediante il nervo acustico giunge fino al cervello. È così che percepiamo suoni e rumori.
Ogni suono ha tre caratteristiche fondamentali: l’altezza, l’intensità e il timbro:
- L’altezza distingue un suono più acuto da uno più grave ed è determinata dalla frequenza dell’onda. Un suono è tanto più alto quanto maggiore è la sua frequenza, che coincide con la frequenza di vibrazione della sorgente.
- L’intensità distingue un suono forte, o ad alto volume, da uno debole, o a basso volume. L’intensità cresce con l’ampiezza dell’onda. Infatti, un’onda sonora di ampiezza maggiore crea compressioni e rarefazioni dell’aria più marcate; quindi costituisce un suono che si ode meglio.
- Il timbro differenzia le onde sonore in base alla particolare forma del loro profilo o, in modo equivalente, della legge periodica con cui, in un dato punto, esse oscillano nel tempo. Ogni strumento musicale ha un proprio timbro, che corrisponde a un diverso tipo di onda periodica. Dal timbro riusciamo a capire, per esempio, se stiamo ascoltando la musica di un pianoforte o quella di una tromba.
Nella cultura occidentale la musica si basa sulla successione di sette note, chiamate do, re, mi, fa, sol, la e si. La nota che segue il si è ancora un do, ma, come si dice in gergo musica, è “un’ottava sopra” al do precedente. Ogni nota è un suono di diversa altezza e quindi di diversa frequenza. Due note sono separate da un’ottava se la frequenza della seconda nota è esattamente il doppio della frequenza della prima.
Fin dall’epoca classica è stata utilizzata la cosiddetta scala naturale, in cui la frequenza di ogni nota è uguale a quella della nota precedente moltiplicata per una frazione semplice. Queste frazioni sono mostrare nella tabella sottostante.
Partendo dal la naturale, a cui è stata assegnata la frequenza di 440 Hz, si calcolano, quindi, le frequenze di tutte le altre note. I rapporti tra le frequenze delle note sono chiamati intervalli: nella tabella si legge che l’intervallo mi-fa e quello si-do equivalgono 16/15 (1,0667); mentre gli altri intervalli, 10/9 (1,1111) e 9/8 (1,125), sono più ampi. Gli intervalli più ampi costituiscono un tono (9/8 e 10/9), mentre quello più piccolo rappresenta un semitono (16/15). Poiché si ha 16/15 * 16/15 = 1,1378, cioè due semitoni che valgono all’incirca un tono, l’intera ottava (che conta 5 toni e 2 semitoni) contiene 12 semitoni (5*2 + 2).
La scala naturale, avendo rapporti variabili tra un tono e l’altro, rende difficile in pratica l’accordatura degli strumenti musicali. Così, a partire dal Settecento si è diffuso un nuovo metodo di accordatura, detto temperamento equabile, in cui il rapporto k tra le frequenze di due semitoni consecutivi è fisso.
La scala naturale, avendo rapporti variabili tra un tono e l’altro, rende difficile in pratica l’accordatura degli strumenti musicali. Così, a partire dal Settecento si è diffuso un nuovo metodo di accordatura, detto temperamento equabile, in cui il rapporto k tra le frequenze di due semitoni consecutivi è fisso.
Partiamo, per esempio, da una nota do che ha frequenza f0. Nella scala temperata il semitono successivo (do diesis) ha frequenza f1 = k*f0 e quello successivo (re) ha frequenza f2 = k * f1 = k^2 * f0.
Continuando in questo modo, troviamo che il do posto dodici semitoni al di sopra di quello di partenza ha frequenza f12= k^12 *f0 .
Poiché tale frequenza deve essere uguale a 2*f0 possiamo scrivere la seguente relazione: 2*f0 = k^12 * f0. Da tale relazione è possibile calcolare il valore di k, che equivale alle radice dodicesima di 2 (1,05946).
I tasti della chitarra non sono equamente spaziati: le loro posizioni sono determinate in base alla successione dei valori di k, k^2, k^3, … ; al dodicesimo tasto la nota prodotta sarà uguale a un’ottava superiore a quella posta 12 tasti prima.
Dopo questa digressione teorica passiamo al progetto vero e proprio per la composizione della colonna sonora dei pirati dei Caraibi. I componenti richiesti per realizzare tale progetto sono:
Ora il prossimo passo consiste nel collegare il cicalino alla scheda UNO, il cavo rosso (positivo) al pin 8 e il cavo nero (negativo) alla messa a terra GND.
Nelle seguenti righe è disponibile lo sketch per comporre la famigerata colonna sonora tramite l’ausilio di un cicalino.
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
const int buzzer = 8; //in tale stringa vi è selozionato il pin // per cui il cicalino è collegato dal filo rosso const int velocitasuono = 1.5; #define NOTE_DO4 262 #define NOTE_RE4 294 #define NOTE_MI4 330 #define NOTE_FA4 349 #define NOTE_SOL4 392 #define NOTE_LA4 440 #define NOTE_SI4 494 #define NOTE_DO5 523 #define NOTE_RE5 587 #define NOTE_MI5 659 #define NOTE_FA5 698 #define NOTE_SOL5 784 #define NOTE_LA5 880 #define NOTE_SI5 988 // sono state definite le varia note, il valore //posto è la frequenza per cui si ottengono tali note. int note[] = { NOTE_MI4, NOTE_SOL4, NOTE_LA4, NOTE_LA4, 0, NOTE_LA4, NOTE_SI4, NOTE_DO5, NOTE_DO5, 0, NOTE_DO5, NOTE_RE5, NOTE_SI4, NOTE_SI4, 0, NOTE_LA4, NOTE_SOL4, NOTE_LA4, 0, NOTE_MI4, NOTE_SOL4, NOTE_LA4, NOTE_LA4, 0, NOTE_LA4, NOTE_SI4, NOTE_DO5, NOTE_DO5, 0, NOTE_DO5, NOTE_RE5, NOTE_SI4, NOTE_SI4, 0, NOTE_LA4, NOTE_SOL4, NOTE_LA4, 0, NOTE_MI4, NOTE_SOL4, NOTE_LA4, NOTE_LA4, 0, NOTE_LA4, NOTE_DO5, NOTE_RE5, NOTE_RE5, 0, NOTE_RE5, NOTE_MI5, NOTE_FA5, NOTE_FA5, 0, NOTE_MI5, NOTE_RE5, NOTE_MI5, NOTE_LA4, 0, NOTE_LA4, NOTE_SI4, NOTE_DO5, NOTE_DO5, 0, NOTE_RE5, NOTE_MI5, NOTE_LA4, 0, NOTE_LA4, NOTE_DO5, NOTE_SI4, NOTE_SI4, 0, NOTE_DO5, NOTE_LA4, NOTE_SI4, 0, NOTE_LA4, NOTE_LA4, NOTE_LA4, NOTE_SI4, NOTE_DO5, NOTE_DO5, 0, NOTE_DO5, NOTE_RE5, NOTE_SI4, NOTE_SI4, 0, NOTE_LA4, NOTE_SOL4, NOTE_LA4, 0, NOTE_MI4, NOTE_SOL4, NOTE_LA4, NOTE_LA4, 0, NOTE_LA4, NOTE_SI4, NOTE_DO5, NOTE_DO5, 0, NOTE_DO5, NOTE_RE5, NOTE_SI4, NOTE_SI4, 0, NOTE_LA4, NOTE_SOL4, NOTE_LA4, 0, NOTE_MI4, NOTE_SOL4, NOTE_LA4, NOTE_LA4, 0, NOTE_LA4, NOTE_DO5, NOTE_RE5, NOTE_RE5, 0, NOTE_RE5, NOTE_MI5, NOTE_FA5, NOTE_FA5, 0, NOTE_MI5, NOTE_RE5, NOTE_MI5, NOTE_LA4, 0, NOTE_LA4, NOTE_SI4, NOTE_DO5, NOTE_DO5, 0, NOTE_RE5, NOTE_MI5, NOTE_LA4, 0, NOTE_LA4, NOTE_DO5, NOTE_SI4, NOTE_SI4, 0, NOTE_DO5, NOTE_LA4, NOTE_SI4, 0, NOTE_MI5, 0, 0, NOTE_FA5, 0, 0, NOTE_MI5, NOTE_MI5, 0, NOTE_SOL5, 0, NOTE_MI5, NOTE_RE5, 0, 0, NOTE_RE5, 0, 0, NOTE_DO5, 0, 0, NOTE_SI4, NOTE_DO5, 0, NOTE_SI4, 0, NOTE_LA4, NOTE_MI5, 0, 0, NOTE_FA5, 0, 0, NOTE_MI5, NOTE_MI5, 0, NOTE_SOL5, 0, NOTE_MI5, NOTE_RE5, 0, 0, NOTE_RE5, 0, 0, NOTE_DO5, 0, 0, NOTE_SI4, NOTE_DO5, 0, NOTE_SI4, 0, NOTE_LA4 }; //lo spartito della colonna sonora dei pirati dei caraibi, //lo 0 (0 Hz) raprresenta che in quel preciso momento non deve essere prodotto nessun suono. int durata[] = { 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 250, 125, 125, 125, 250, 125, 125, 250, 125, 250, 125, 125, 125, 250, 125, 125, 125, 125, 375, 375, 250, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 250, 125, 125, 125, 250, 125, 125, 250, 125, 250, 125, 125, 125, 250, 125, 125, 125, 125, 375, 375, 250, 125, 375, 250, 125, 375, 125, 125, 125, 125, 125, 125, 125, 125, 375, 250, 125, 375, 250, 125, 375, 125, 125, 125, 125, 125, 500, 250, 125, 375, 250, 125, 375, 125, 125, 125, 125, 125, 125, 125, 125, 375, 250, 125, 375, 250, 125, 375, 125, 125, 125, 125, 125, 500 }; //in tale vettore vi è l'intervallo di tempo per //cui ciascuna nota del vettore note[i] sarà prodotta. void setup() { } //tone è la funzione che permette di generare il suono //tramite il cicalino, vi sono tre parametri formali, //il primo parametro costituisce il pin in cui è collegato il cicalino, //il secondo parametro è costituito dal vettore note (lo spartito) //e dalle relative frequenze //il terzo parametro è costituito dal periodo durante //il quale verrà prodotto ciascun suono. void loop() { for (int i=0;i<203;i++){ int attesa = durata[i] * velocitasuono; tone(buzzer,note[i],attesa); delay(attesa);} delay (2000); // delay(2000) costituisce l'intervallo di tempo per cui //una volta terminato il brano lo ricomincerà da capo } |
Una volta copiato il programma basta incollarlo su un nuovo progetto su Arduino Ide, e caricare il programma sulla propria board, ed ecco che potrete udire nella totale magnificenza la colonna sonora dei pirati dei Caraibi. Un ringraziamento speciale va al musicista Daniele Cassa che ha realizzato lo sparito per conto del programmatore, aiutandolo per quanto riguarda le note da utilizzare e la durata di ciascuna di esse.
Link utili: