Tastiera musicale con Arduino
Template:Lavori in corso Template:Risorsa
Pianola
Utilizzando il microcontrollore Arduino combinato con dei tasti e un cicalino andremo a replicare il principio di una normalissima pianola; con una sola tonalità che va dal Do basso al Do alto senza semitoni.
Descrizione del progetto
La piano ha un funzionamento molto semplice:
- Viene premuto il tasto;
- Arduino associa il tasto premuto alla tonalità prescelta;
- Poi invia un segnale al cicalino con la frequenza adeguata;
- Il cicalino emette il suono.
Schema di montaggio

I pulsanti sono collegati a un lato alla tensione di e all'altro con una resistenza di pull-up, che servono per evitare corto-circuiti, e il cicalino è collegato.
Il cicalino è stato collegato al pin 10 di Arduino e a massa, con una resistenza da , per limitare il flusso di corrente.
| Componente | q.tà |
|---|---|
| Arduino | 1 |
| Buzzer | 1 |
| Resistenze | 8 |
| Resistenza | 1 |
Codice
Come prima cosa nel codice andiamo a definire delle costanti globali che sono le frequenze delle note scelte:
#define NOTE_C4 262 // DO
#define NOTE_D4 294 // RE
#define NOTE_E4 330 // MI
#define NOTE_F4 349 // FA
#define NOTE_G4 392 // SOL
#define NOTE_A4 440 // LA
#define NOTE_B4 494 // SI
#define NOTE_C5 523 // DO ALTO
Sempre a livello globale andiamo a impostare il pin alla quale è collegato il cicalino, poi andiamo a definire 3 array:
- il primo con le note e lo chiamiamo
Melodia - il secondo con i pin dei pulsanti
- il terzo lo useremo per memorizzare i valori dei pulsanti
const int Speaker = 10; // Il pin dove andrà il buzzer o lo speaker
int Melodia[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5};
int Tasto[] = {9, 8, 7, 6, 5, 4, 3, 2}; // I pin dove andranno collegati gli 8 pulsanti
int val_Tasto[8]; // Array per la memorizzazione dei valori dei pulsanti
Nel setup andiamo a impostare i pin collegati ai pulsanti come pin di ingresso e il pin collegato al cicalino come pin di uscita:
void setup(){
// Setta i pulsanti come input
for(int i=0; i<8; i++)
pinMode(Tasto[i], INPUT);
// Setta lo speaker come output
pinMode(Speaker, OUTPUT);
}
Nel loop andiamo a verificare quale tasto è premuto e in base ad esso andiamo a riprodurre la nota prescelta:
void loop(){
// Legge lo stato dei pulsanti, li memorizza nell'array val_Tasto[]
// Se un pulsante è alto, lo speaker, riprodurrà la corrispondente nota musicale
for(int pin = 0; pin < 8; pin++)
if(digitalRead(Tasto[pin] == HIGH) tone(Speaker, Melodia[pin], 100);
}
Il comando tone genera una nota musicale in uscita, e ha la seguente sintassi:
tone(pin, frequenza, durata)
dove i parametri corrispondono a:
pin: il pin di Arduino sul quale si genera la nota musicale.
frequenza: la frequenza della nota espressa in hertz. I tipi consentiti sono:unsigned int.
durata: la durata della nota espressa in millisecondi (opzionale, diversamente la nota termina col comandonoTone()). I tipi consentiti sono:unsigned int.