martedì 12 marzo 2013

Pianola Didattica con Arduino

PIANOLA CON ARDUINO


Si Utilizza la scheda di Arduino 1 per la riproduzione dei suoni, con la funzione tone() e noTone().
Gli ingressi digitali D0...D6  vengono collegati come input a dei pulsanti ognuno corrispondente a una nota diversa secondo la scala musicale: DO-  RE- MI -FA- SO- LA- SI .
 I pulsanti, sono anche collegati al +5V con una resistenza di pull-up da 1 kohm per fissare ad 1 logico lo stato degli ingressi quando non sono premuti e a 0 logico quando
sono premuti.
L'uscita digitale D7 viene collegata come output ad un buzzer capace di riprodurre segnali elettrici.
L'esercitazione è composta dal una parte software ed una hardware.
Vengonono allegati quindi sia il software che gli schemi elettrici.
La sheda di Arduino è reperibile nei negozi o in rete al prezzo di 25/30 € .
Tutto il progetto ARDUINO è OPEN SOURCE e quindi i driver di istallazione, l' ambiente IDE di programmazione e volendo l'intero progetto hardware sono reperibili in
modo free dal sito ufficiale  www.arduino.cc .

In rete si possono reperire infiniti tutorial e progetti .

  

/* ========================================================================== */
/*                                                                                        */
/*                                                                                                                                                                               */
/*          Esercitazione con ARDUINO                                                                                                                 */
/*                                                                                                                                                                               */
/*          Pianola elettrica                                                                                                                                        */
/*                                                                                                                                                                               */
/* ========================================================================== */



const int bodo = 0;   // bodo: abbreviazione di botton DO; Bottone dove associo la nota DO... Stessa cosa vale anche per le altre note
const int bore = 1;
const int bomi = 2;
const int bofa = 3;
const int bosol = 4;
const int bola = 5;
const int bosi = 6;
const int buzzer =7;  // Piedino dove collego il buzzer
int nota;

 void DO()                   // Creo una funzione per ciascuna nota
 {
 
   tone(buzzer,262); // Genera nel PIN D7, dove è collegato il buzzer un segnale digitale a frequenza di 262 Hz
                                    //corrispondente alla nota del DO
   delay(400);           //   Suona per 400 ms
   noTone(buzzer); //  e poi si spegne
 }
  void RE()               // Questo va ripetuto per tutte le note, naturalmente cambiando il valore della frequenza
 {
                                     //   L'elenco delle frequenze, corrispondenti alle note, è di facile reperibilità in internet
   tone(buzzer,294);
   delay(400);
   noTone(buzzer);
 }
  void MI()
 {
 
   tone(buzzer,330);
   delay(400);
   noTone(buzzer);
 }
  void FA()
 {
 
   tone(buzzer,349);
   delay(400);
   noTone(buzzer);
 }
  void SOL()
 {
 
   tone(buzzer,392);
   delay(400);
   noTone(buzzer);
 }
  void LA()
 {

   tone(buzzer,440);
   delay(400);
   noTone(buzzer);
 }
  void SI()
 {
 
   tone(buzzer,494);
   delay(400);
   noTone(buzzer);
 }

void emetti_nota(){     // Funzione che emette la nota selezionata nel programma principale
                                           
  switch(nota){                                 //  switch()     è un selettore multiplo che ci permette di eseguire solamente la variabile vera ( paragonabile a un switch elettrico)
     case 1 :DO();                             
      break;
    
      case 2 : RE();
      break;
    
      case 3 :MI();
      break;
    
      case 4 :FA();
      break;
    
      case 5 :SOL();
      break;
    
    case 6 :LA();
      break;
    
      case 7 :SI();
      break;
    
    
    
 
  }
  }


void setup()        // Setto gli ingressi e le uscite in arduino.
{
  Serial.begin(9600); //Abilito anche la seriale: mi può servire nel debugger
  pinMode (bodo,INPUT);
  pinMode (bore,INPUT);
  pinMode (bomi,INPUT);
  pinMode (bofa,INPUT);
  pinMode (bosol,INPUT);
  pinMode (bola,INPUT);
  pinMode (bosi,INPUT);
  pinMode (buzzer,OUTPUT);
 
}


void loop()
{nota=0;
 if (digitalRead(bodo)== LOW){nota=1;         // serie di if ..( se) ... che controllano il bottone premuto( Stato logico zero - LOW- ) quindi richiamano la nota corrispondente
     emetti_nota();}
 if (digitalRead(bore)== LOW){nota=2;
     emetti_nota();}
 if (digitalRead(bomi)== LOW){nota=3;
        emetti_nota();}
 if (digitalRead(bofa)== LOW){nota=4;
        emetti_nota();}
 if (digitalRead(bosol)== LOW){nota=5;
        emetti_nota();}
 if (digitalRead(bola)== LOW){nota=6;
        emetti_nota();}
 if (digitalRead(bosi)== LOW){nota=7;
           emetti_nota();}
 /* Serial.println(" DO "); //comunicazione seriale per visualizzare lo sato dei bottoni premuti....... Mi è servita nel Debugger.... ma che, poi ho lasciato solo come commento
  Serial.println(bodo);
  Serial.println("       ");
  Serial.println(" RE ");
  Serial.println(bore);
  Serial.println("       ");
  Serial.println(" MI ");
  Serial.println(bomi);
  Serial.println("       ");
  Serial.println("FA");
  Serial.println(bofa);
  Serial.println("       ");
  Serial.println(" SOL ");
  Serial.println(bosol);
  Serial.println("       ");
 Serial.println(" LA ");
  Serial.println(bola);
  Serial.println("       ");
   Serial.println(" SI ");
  Serial.println(bosi);
  Serial.println("       ");*/
 
 
  delay(20);// Non sò perche ...ma se lo tolgo non funziona......???????
 
 
 
  }
 Il Seguente software va scritto con l'apposito IDE di Arduino ( reperibile in Internet ), che ci permette di fare il debugger e il trasferimento dei dati in Arduino.
Trasferimento che avviene tramite collegamento su porta USB  vista come COM Virtuale e previa installazione dei driver di Arduino ( Leggere i tutorial di Configurazione
e installazione di cui la rete ne è piena).
Il linguaggio di programmazione è in C e utilizza delle funzioni e librerie specifiche per Arduino.
Il simbolo //   in una riga di comando serve a commento dell'istruzione: io l'ho adoperato per commentare il software.

SCHEMA ELETTRICO
+
Come si può vedere lo schema elettrico non è complicato.
Troviamo la scheda di Arduino 1 già montata e reperibile con facilità sul mercato.
Questa va alimentata ad una tensione di 5V e quindi nello schema è riportata una batteria VCC =5V ( quando Arduino è collegato al PC l'alimentazione viene prelevata dalla
porta USB e si può fare a meno della batteria o alimentatore esterno).
Abbiamo 14 PIN utilizzabili come Imput/Output Digitali  da D0 ad D13 ( questo va specificato nel software).
Nel software viene specificato che D0-D1-D2-D3-D4-D5-D6 sono come Ingressi e D7 come uscita.
Sono presenti 7 pulsanti NO collegati agli ingressi digitali con il seguente ordine: Nota  DO al Pin D0 - RE al Pin D1 - MI al Pin D2 - FA al Pin D3 - SOL al Pin D4 - LA al Pin D5
- SI al Pin D6 .
Gli Ingressi digitali sono collegati al + , ciascuno tramite una resistenza di PULL-UP, qesto per fissare lo stato logico uno quando i Pulsanti non sono premuti (HIGH) e
zero quando sono premuti ( LOW).
Al PIN D7, utilizzato come uscita, è collegato un BUZZER di quelli capaci di riprodurre segnali di frequenza.



MONTAGGIO BREADBOARD


+


FOTO REALE DELLA PIANOLA TERMINATA

 +

Breve Video

   Scusate ma non sò suonare ........!!!



Sicuramente vi saranno molte altre varianti al progetto, io ho presentato la mia! ..... a voi le modifiche e/o integrazioni. Non mi rimane che dire : BUON LAVORO e grazie a tutti.

 

Nessun commento:

Posta un commento