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