Tastiera musicale con Arduino: differenze tra le versioni

Da testwiki.
Vai alla navigazione Vai alla ricerca
imported>Eumolpo
ortografia
 
(Nessuna differenza)

Versione attuale delle 16:59, 11 mag 2023

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 5 V 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 1 kΩ, per limitare il flusso di corrente.

Componenti utilizzati
Componente q.tà
Arduino 1
Buzzer 1
Resistenze 10 kΩ 8
Resistenza 1 kΩ 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:

  1. il primo con le note e lo chiamiamo Melodia
  2. il secondo con i pin dei pulsanti
  3. 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 comando noTone()). I tipi consentiti sono: unsigned int.