2913 Views 3 Comments

Haz tu propia Batería MIDI con Arduino.

arduino-bateria

Si alguna vez quisiste tocar batería pero nunca te dejaron por el “ruido” que ocasiona y el espacio que esta requiere, ahora es tu oportunidad de crear tu propia batería con algunos conocimientos de electrónica y Arduino!

Esta es la lista de lo que necesitas:

  • 4 x Piezo.
  • 4 x Discos Compactos (CDs).
  • Mouse Pads (los suficientes para cortar 8 círculos del tamaño de los discos).
  • Arduino con su cable USB.
  • 4 x Resistor de 1Mega Ohm.
  • Protoboard.
  • Cables.

arduino-piezo

Primero se soldan los cables para los piezoeléctricos. Después de soldar los cables es hora de conectar todo. Conecta las resistencias a los cables del piezo como se muestra en la figura de arriba.

Ahora conecta el cable GND del piezo con GND del Arduino. Conecta el otro cable del piezo a un pin analógico del Arduino, puede ser cualquier pin pero de los analógicos.

Si no quieres que quede en un protoboard puedes soldar todo en una Placa Fenólica para que quede un proyecto mas completo.

Ahora que se encuentra todo soldado, continuamos con los pads.

Toma el disco compacto CD y ponlo en el pad del mouse. Dibuja un círculo alrededor del disco y luego córtalo. A continuación pega el piezo al disco con un pedazo de cinta. Una vez que este listo se pegan los pads al disco. Se puede usar un poco de pegamento. Asegurarse de que el pegamento no se lleve el piezo, de lo contrario se arruinará el piezoeléctrico.

Usar un poco de pegamento en los bordes del disco y pegar la parte de plástico del pad del mouse al borde. Hacer lo mismo para el otro lado. Los lados de la espuma pad tienen que estar en el exterior.

Usar un poco de pegamento adicional alrededor de la parte donde los cables sobresalen por fuera pad para cerrarlo bien.

Ahora solo queda la parte del software, conectamos todo a la computadora.

Existen varias maneras de conectarlo. Una es usando Ardrumo, es una de las maneras mas fáciles. Sube el código a tu Arduino y después abre Garageband.

Otro método es usar Hairless, para mas detalles aquí puedes encontrar mas información.

Este es el código para Ardrumo:


/*
 * Ardrumo sketch
 *
 * Use with the Ardrumo software here:
 * <a href="http://code.google.com/p/ardrumo/" rel="nofollow"> <a href="http://code.google.com/p/ardrumo/"> <a href="http://code.google.com/p/ardrumo/"> <a href="http://code.google.com/p/ardrumo/" rel="nofollow"> <a href="http://code.google.com/p/ardrumo/" rel="nofollow"> http://code.google.com/p/ardrumo/
</a>
</a>
</a>
</a>
</a>
 * This is designed to let an Arduino act as a drum machine
 * in GarageBand (sorry, Mac OS X only).
 */

#define LEDPIN     13     // status LED pin
#define PIEZOTHRESHOLD 5  // analog threshold for piezo sensing
#define PADNUM 6          // number of pads

int val;

void setup() {
  pinMode(LEDPIN, OUTPUT);
  Serial.begin(57600);   // set serial output rate
}

void loop() {

  // Loop through each piezo and send data
  // on the serial output if the force exceeds
  // the piezo threshold
  for(int i = 0; i < PADNUM; i++) {
    val = analogRead(i);
    if( val >= PIEZOTHRESHOLD ) {
      digitalWrite(LEDPIN,HIGH);  // indicate we're sending MIDI data
      Serial.print(i);
      Serial.print(",");
      Serial.print(val);
      Serial.println();
      digitalWrite(LEDPIN,LOW);
    }
  }
}

Y este es el código para Hairless:


//Xylophone
//Adapted for an ArduinoMega 
//from Jenna deBoisblanc and Spiekenzie Labs initial code

//*******************************************************************************************************************
// User settable variables
//*******************************************************************************************************************

int pinRead;
char pinAssignments[16] ={
  'A0','A1','A2','A3','A4','A5','A6','A7','A8','A9','A10','A11'};
byte PadNote[16] = {
  57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72};         // MIDI notes from 0 to 127 (Mid C = 60)
int PadCutOff[16] = 
{
  400,400,200,800,400,400,400,400,400,400,400,400,400,400,400,400};           // Minimum Analog value to cause a drum hit
int MaxPlayTime[16] = {
  90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90};               // Cycles before a 2nd hit is allowed
#define  midichannel 1;                              // MIDI channel from 0 to 15 (+1 in "real world")
boolean VelocityFlag  = true;                           // Velocity ON (true) or OFF (false)

//*******************************************************************************************************************
// Internal Use Variables
//*******************************************************************************************************************
boolean activePad[16] = {
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};                   // Array of flags of pad currently playing
int PinPlayTime[16] = {
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};                     // Counter since pad started to play
byte status1;

int pin = 0;     
int hitavg = 0;
//*******************************************************************************************************************
// Setup
//*******************************************************************************************************************
void setup() 
{
  Serial.begin(57600);                                  // SET HAIRLESS TO THE SAME BAUD RATE IN THE SETTINGS

}
//*******************************************************************************************************************
// Main Program
//*******************************************************************************************************************
void loop() 
{
  for(int pin=0; pin < 16; pin++)                          //
  {
    //int pin = 3;
    //   for (pinRead=0; pinRead < 16, pin++){
    hitavg = analogRead(pinAssignments[pin]);  
    //Serial.println(hitavg);   
    // 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); //note on

        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(144,PadNote[pin],0); 
      }
    }
  } 
}

//*******************************************************************************************************************
// Transmit MIDI Message
//*******************************************************************************************************************
void MIDI_TX(byte MESSAGE, byte PITCH, byte VELOCITY) 
{
  status1 = MESSAGE + midichannel;
  Serial.write(status1);
  Serial.write(PITCH);
  Serial.write(VELOCITY);

}

Y listo, ya tienes tu propia batería usando tu Arduino! Si tienes alguna duda con los materiales con gusto

3 Comments
  • Andrés 9 junio, 2016, 11:05 pm Responder

    Hola, quiero hacer una batería como la de ustedes pero con más pads y quisiera saber cómo se haría el hi hat (abierto/cerrado).
    Gracias.

  • Víctor 19 abril, 2016, 1:44 am Responder

    ¿Podría facilitarme los materiales?

    • Michel Morales 22 abril, 2016, 3:04 pm

      Le hemos enviado un correo electrónico con la lista completa de materiales. Seguimos atentos para apoyarle.

Leave a Comment


*