Descripción.
Para esta ocasion vamos a crear una batería electrónica por medio del arduino,Utilizando este ultimo como controlador MIDI. en este proyecto utilizaremos programas externos que servirán como controladores y instrumentos virtuales como lo son el superior drummer,el serial MIDI converter y el loopbe1.
Lista de elementos utilizados:
- Un Arduino UNO
- 6 Piezoelectricos
- 6 resistencias de 100 k ohms
- 6 diodos de cilicio
- Cable (Conexiones)
- Protoboard
Diagrama del Montaje en la Protoboard:
Diagrama Esquemático del Circuito:
Fotos del Montaje (paso a paso):
primero armamos la base de la batería con tubos pvc y organizamos cada uno de los elementos de la batería de forma que quede cómoda para poder tocar en ella.
Luego de esto agregamos los pads hechos de madera para simular una batería real
Una vez terminada esta parte,vamos a enfocarnos en la parte electrónica. primero conectamos las resistencias.
Luego los diodos.
luego de esto pegamos los cables al piezoelectrico en cada uno de sus polos (negativo y positivo).
luego de esto perforamos cada uno de los pads de la batería así como en la foto.
una vez terminada esta parte pasamos un cable por medio del orificio que le hicimos a nuestro pad anterior mente.
luego le pegamos a otro pedazo de madera triplex el piezo electrico y lo juntamos con el pad así como se muestra en las siguientes imágenes.
Luego de esto instalamos el loopbe y configuramos nuestro arduino como controlador midi por medio de un programa llamado serial midi converter de la siguiente forma.
luego escogemos el puerto midi loopBe internal midi presionando a
por ultimo nos saldra la siguiente pantalla y asi temrmina la configuracion del arduino como controlador midi.
Luego cargamos en un DAW (en este caso utilice cubase 5) el pluguin superior drummer 2.0
Inmediatamente al haber instalado el loopbe 1 y al haber configurado el serial midi converter como lo explique anterior mente nuestro DAW va a reconocer cada uno de los golpes que se genere en el pad que diseñamos anterior mente el cual contiene el piezoelectrico en su interior.
Código Fuente en Arduino:.
//*******************************************************************************************************************
// User
settable variables
//*******************************************************************************************************************
unsigned
char PadNote[6] = {66,81,77,74,16,52}; // MIDI
notes from 0 to 127 (Mid C = 60)
int
PadCutOff[6] = {600,600,600,600,600,600}; //
Minimum Analog value to cause a drum hit
int
MaxPlayTime[6] = {90,90,90,90,90,90};
// Cycles before a 2nd hit is allowed
#define
midichannel 0;
// MIDI channel from 0 to 15 (+1 in "real world")
boolean
VelocityFlag = true;
// Velocity ON (true) or OFF (false)
//*******************************************************************************************************************
//
Internal Use Variables
//*******************************************************************************************************************
boolean
activePad[6] = {0,0,0,0,0,0};
// Array of flags of pad currently playing
int
PinPlayTime[6] = {0,0,0,0,0,0};
// Counter since pad started to play
unsigned
char status;
int pin =
0;
int
hitavg = 0;
//*******************************************************************************************************************
// Setup
//*******************************************************************************************************************
void
setup()
{
Serial.begin(115200);
// connect to the
serial port 115200
}
//*******************************************************************************************************************
// Main
Program
//*******************************************************************************************************************
void
loop()
{
for(int pin=0; pin < 6; pin++)
{
hitavg = analogRead(pin);
// read the input
pin
if((hitavg > PadCutOff[pin]))
{
if((activePad[pin] == false))
{
if(VelocityFlag == true)
{
//
hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg -
PadCutOff[pin])); // With full range (Too sensitive ?)
hitavg = (hitavg / 8) -1 ;
// Upper
range
}
else
{
hitavg = 127;
}
MIDI_TX(144,PadNote[pin],hitavg);
PinPlayTime[pin] = 0;
activePad[pin] = true;
}
else
{
PinPlayTime[pin] = PinPlayTime[pin] + 1;
}
}
else if((activePad[pin] == true))
{
PinPlayTime[pin] = PinPlayTime[pin] + 1;
if(PinPlayTime[pin] > MaxPlayTime[pin])
{
activePad[pin] = false;
MIDI_TX(128,PadNote[pin],127);
}
}
}
}
//*******************************************************************************************************************
//
Transmit MIDI Message
//*******************************************************************************************************************
void
MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char
VELOCITY)
{
status = MESSAGE + midichannel;
Serial.write(status);
Serial.write(PITCH);
Serial.write(VELOCITY);
}
Video de funcionamiento del proyecto:
para el desarrollo de este proyecto utilice informacion de los siguientes links:
https://www.youtube.com/watch?v=odVLSXJ414Q
http://spikenzielabs.com/SpikenzieLabs/DrumKitKit.html
http://spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html
https://www.youtube.com/redirect?q=http%3A%2F%2Fwww.nerds.de%2Fdata%2Fsetuploopbe1.exe&redir_token=VtB1pMGgvsnn-jCBmFaI4XXzlJZ8MTQwMTY3MzI4MEAxNDAxNTg2ODgw
https://www.youtube.com/redirect?q=http%3A%2F%2Farduino.cc%2Fforum%2Findex.php%3Ftopic%3D84195.0&redir_token=VtB1pMGgvsnn-jCBmFaI4XXzlJZ8MTQwMTY3MzI4MEAxNDAxNTg2ODgw