Creato da: DonnyLennon il 05/01/2011
esperienze, appunti e risorse di elettronica e robotica

Area personale

 

Contatta l'autore

Nickname: DonnyLennon
Se copi, violi le regole della Community Sesso: M
EtÓ: 32
Prov: CL
 
 

Tag

 
RSS (Really simple syndication) Feed Atom
 

Ultimi commenti

Ultime visite al Blog

NonnoRenzo0chernobyl0kappa41chief33francpierorsoyoghi63cicciocicciovipermartano1979gianpaolomartyPeppe_DelPretefrak70xxiceocelot1JesGiafcamisa
 

 

 
« Il PERCHE' di questo blogMini Gioco con Arduino e... »

Arduino Drum Pad - Tutorial

Post n°2 pubblicato il 08 Gennaio 2011 da DonnyLennon
 

 

Questa estate ho provato un buon prodotto della Roland, l'Octopad, una specie di batteria elettronica. Mi sono innamorato al primo colpo di bacchetta. Peccato che i prezzi si aggirano sopra le 500 euro. Fu li che mi venne l'idea per questo progetto.

Questo strumento non è altro che un insieme di pad-sensori collegati ad una centralina, che rispondono alla pressioni di una bacchetta, o della mano del musicista, producendo in tempo reale suoni elettronici digitali, cioè campionati.

Per mia fortuna avevo da poco scoperto Arduino, e cercando in rete capii che arduino riesce a ricevere e inviare segnali MIDI.

Il segnale MIDI, e il protocollo MIDI in generale è un sistema di codifica, che ad uno specifico byte (8 bit), fa corrispondere una specifica azione. Ha le sue regole e la sua frequenza di trasmissione. Esso è utilizzato in campo musicale, ed è proprio li che è stato inventato, poichè permette di "descrivere" come sta suonando il musicista. Quando ad esempio un tastierista preme un tasto della sua tastiera MIDI muta, essa non manda in uscita un segnale audio, ma bensì un insieme di byte che informano "ho premuto il tasto Do", "sto tenendo premuto il tasto", "ho rilasciato il tasto", e così via... sarà poi un altro software a tradurre queste informazioni in segnali audio.

Per approfondimenti sul protocollo midi potete guardare questo SITO:

 

I SENSORI

La traduzione Meccanica->Elettrica è svolta in maniera efficace dai cosidetti "Buzzer Piezoelettrici". Essi sono dei sottili cerchi metallici aventi al centro un cristallo piezoelettrico, che produce una differenza di potenziale, quando è soggetto ad una deformazione meccanica.

Li potete trovare a pochi euro in questo NEGOZIO scrivendo nella casella cerca: "buzzer piezo". Io ho utilizzato quelli da 27mm.

 

CENTRALINA

E' costituita essenzialmente dalla piattaforma Arduino Uno e da pochi altri componenti.

Ho sfruttato i sei ingressi analogici di cui dispone. Questo è il motivo per cui il mio Arduino Drum Pad ha sei pad.

Collegando direttamente i sensori tra massa e ingresso analogico ho notato che appena sfioravo i pad avevo già una differenza di potenziale elevata in ingresso che non mi permetteva di ottenere una buona sensibilità di esecuzione. Per questo motivo ho inserito una resistenza di 100KOhm tra massa e ingresso analogico. Mi ha risolto il problema.

La centralina dispone di due switch che servono ad incrementare e decrementare l'ottava di esecuzione (più in la nel post spiegherò questo punto con più chiarezza), e di due led indicatori. Quello giallo, sempre acceso, indica che il programma su Arduino sta girando correttamente, il led Rosso serve a capire quale ottava stiamo suonando.

In corrispondenza di midi out dovete collegare una presa midi femmina connessa nel seguente modo:

 

IL FIRMWARE

Il firmware scaricabile qui, è relativamente semplice.

Il blocco più importante è il seguente:

lettoreSoglia0= analogRead(PAD0);
if (lettoreSoglia0 > soglia)
{
noteOn(0x90, nota0, 0x60);
delay(80);
}

AnalogRead è una funzione di Arduino che restituisce un numero compreso tra 0 e 1023 a seconda della tensione che legge sull'ingresso corrispondente, con una risoluzione di 4,9 mV.

Il programma legge la tensione presente sull'ingresso, analogRead restituisce un numero proporzionale alla tensione letta. Se questo numero è superiore al numero contenuto nella variabile "soglia" la condizione dentro If viene svolta e la funzione noteOn viene eseguita, cioè viene inviato un segnale midi. La variabile soglia puà essere modificata per modificare la sensibilità dell strumento. E' settata a 200.  Consiglio a chi vuole più sensibilità di diminuirla e portarla a 100 o 150.

 

void noteOn(int cmd, int pitch, int velocity)
{
  Serial.print(cmd, BYTE);
  Serial.print(pitch, BYTE);
  Serial.print(velocity, BYTE);
}

noteOn è la funzione deputata all'invio del segnale midi. Il segnale viene inviato in maniera seriale. I pin utilizzati per una trasmissione seriale su Arduino sono i pin digitali 1 (Tx) e 2 (Rx). Nel nostro caso si utilizza solo il pin 1 di trasmissione. La frequenza di trasmissione è specificata nell'istruzione: Serial.begin(31250).

cmd: è il byte che informa che è stato "premuto" un tasto, e specifica su quale "canale" inviarlo. Generalmente si dispone di 16 diversi canali. I sei pad inviano segnali in sei canali diversi.

pitch: specifica quale nota si sta premendo. Le note sono inizialmente impostate nella quarta ottava, a partire dal Do.

Tramite i due switch e con le istruzioni: 

if (digitalRead(sw1) == HIGH)
{nota0= nota0 + 12;}

if (digitalRead(sw2) == HIGH)
{nota0= nota0 - 12;}

si cambia l'ottava e quindi le note inviate.

velocity: specifica con quale intensità si preme il tasto. Nel firmware ho inserito un valore medio.

 

 

INTERFACCIA MIDI-USB

Questi segnali midi devono essere riconosciuti ed tradotti in segnali audio. Questo compito è svolto da un software in un personal computer. Per interfacciare arduino con il pc, si può utilizzare un convertitore midi-usb. Essi non hanno prezzi elevati. Con 50 euro si può prendere ad esempio gli m-audio midisport.

Sono di semplice utilizzo ed installazione. Hanno un ingresso midi, ed un uscita usb da collegare al pc.

 

IL SOFTWARE

Dopo miliardi di tentativi, il software migliore che ho trovato per far quello che mi serve è il SFZ della Cakewalk.

E' un lettore-riproduttore freeware di file Sound Font. I file sound font sono delle librerie di suoni campionati. Con questo programma potrete associare ad ogni pad dello strumento un diverso suono campionato. Per far ciò dovrete prima verificare che il programma riconosca l'interfaccia midi-usb, e poi caricare il file sound font.

I file sound font si trovano in rete liberamente scaricabili. Io ne ho trovati a centinaia. Sta a voi scegliere quale suono vi interessa.

 

RIASSUMENDO...

Il collegamento è: Piezo -> Arduino -> interfacciaMidi/USB -> PC
Non ti serve altro. Il suono esce dalle casse interne del pc, o dall'uscita cuffie del pc...
Consiglio:
Inanzitutto verifica che la periferica (interfaccia Midi/USB) funziona correttamente: pannello controllo/gestione dispositivi
Poi ti consiglio di scaricarti i driver audio chiamati ASIO 4 ALL.
Così quando apri il programma Sfz nelle impostazioni scegli questi driver.


REALIZZAZIONE DEI PAD E DEL SUPPORTO

Per creare qualcosa di esteticamente guardabile ho deciso di incollare i sei pad su di una base rettangolare di legno. Il problema che può sorgere è che le vibrazioni si possono trasmettere in tutto il supporto, e quando la bacchetta va a suonare uno specifico pad, anche gli altri sensori possono ricevere il "colpo" ed inviare messaggi sbagliati. Per questo motivo consiglio questo sistema da me collaudato:

consiste in uno strato di plastica rigida sottile che funge da base (può essere incollato al legno o attaccato tramite 4 viti), un pò di spugna o gomma piuma sottile che fa da cuscino al sensore appoggiato di sopra. Il tutto è chiuso da un quadrato di gomma dura sottile (acquistata dal ferramenta), che permette anche il rimbalzo della bacchetta.

A destra dei pad, ho attaccato una scatolina di plastica in cui ho inserito arduino, le resistenze (montate su una piastra millefori), gli interruttori, e i led.

 

 

 
Condividi e segnala Condividi e segnala - permalink - Segnala abuso
 
 
Vai alla Home Page del blog