Studio Drums

Drummers would spend hours and hours practicing ... But not everyone can have a drum at home: space and noise are a big problem!

For this reason, we wanted to create a portable and silence drumkit which you could play at home.

This drumkit is very easy to use, you just have to hit the pads and it will sound like a real drum! It also comes with a display where you can see wich pad are you hitting at. And if you want to use it in a silence mode, just conect your headphones to the laptop!

Step 1: What You'll Need

MATERIAL

  • Arduino Uno
  • Breadboard
  • Some wire
  • 5x piezos
  • 5x 1M Ohm resistors
  • 5 jar lids
  • Eva foam
  • Foam board

PROGRAMS:

  • Arduino IDE
  • Processing

*To download the above programs onto your computer, follow the links below:

Step 2: Assemble Circuit

First of all we need to solder to the piezos (GND to the yellow part and the analog pin wire to the white part of the piezo).

We will use a breadboard to connect everything.

Connect the resistor and the wires of the piezo as shown in the diagram above. Then connect the GND wire of breadboard to GND on Arduino. Finally, connect each wire of the piezo to an analog pin on your Arduino as shown below.

Piezos connected to analog pins:

  • Caixa = A0;
  • Charles = A1;
  • Tomtom = A2;
  • Crash = A3;
  • Bombo = A4;

Step 3: Program It

We decided to create our own display for the drumkit instead of using a preset program. We've used Processing for this.

We have programmed it so that when a piezo is hit, the sound of the corresponding drum will sound. In addition, the corresponding drum pattern will illuminate on the screen.

You'll need to import processing sound, and processing serial libraries.

Don't forget to add the drum sounds to a data folder!

ARDUINO CODE

//PIEZOS ARE CONNECTED TO ANALOG PINS

const int caixa = A0;

const int charles = A1;

const int tomtom = A2;

const int crash = A3;

const int bombo = A4;

const int threshold = 100; // threshold value to decide when the detected sound is a knock or not

// READ AND STORE THE VALUE READ FROM SENSOR PINS

int caixaReading = 0;

int charlesReading = 0;

int tomtomReading = 0;

int crashReading = 0;

int bomboReading = 0;

void setup() {

Serial.begin(9600); // use the serial port

}

void loop() {

// read the sensor and store it in the variable sensorReading:

caixaReading = analogRead(caixa);

// if the sensor reading is greater than the threshold:

if (caixaReading >= threshold) {

// IF YOU HIT THE CAIXA, SEND 0 TO PROCESSING

Serial.print("0,");

Serial.println(caixaReading);

}

charlesReading = analogRead(charles);

if (charlesReading >= threshold) {

// IF YOU HIT THE CHARLES, SEND 1 TO PROCESSING

Serial.print("1,");

Serial.println(caixaReading);

}

tomtomReading = analogRead(tomtom);

if (tomtomReading >= threshold) {

// IF YOU HIT THE CAIXA, SEND 2 TO PROCESSING

Serial.print("2,");

Serial.println(tomtomReading);

}

crashReading = analogRead(crash);

if (crashReading >= threshold) {

// IF YOU HIT THE CAIXA, SEND 3 TO PROCESSING

Serial.print("3,");

Serial.println(crashReading);

}

bomboReading = analogRead(bombo);

if (bomboReading >= 15) {

// IF YOU HIT THE CAIXA, SEND 4 TO PROCESSING

Serial.print("4,");

Serial.println(bomboReading);

}

delay(10); // delay to avoid overloading the serial port buffer

}

PROCESSING CODE

//IMPORT SOUND AND SERIAL LIBRARIES

import processing.sound.*;

import processing.serial.*;

Serial myPort; // Create object from Serial class

String val; // Data received from the serial port

//DRUM SOUNDS

SoundFile caixa;

SoundFile charles;

SoundFile tomtom;

SoundFile crash;

SoundFile bombo;

//DRUMS STUDIO IMAGES

PImage img0;

PImage img1;

PImage img2;

PImage img3;

PImage img4;

PImage img5;

PImage img6;

//DRUMS STUDIO WAVES VARIABLES

float n = 0;

float n2 = 1;

float n3 = 2;

float n4 = 3;

float n5 = 4;

float y = 0;

float y2 = 1;

float y3 = 2;

float y4 = 3;

float y5 = 4;

void setup()

{

// OPEN WHATEVER PORT IS THE ONE YOU'RE USING

String portName = Serial.list()[0]; //change the 0 to a 1 or 2 etc. to match your port

myPort = new Serial(this, portName, 9600);

//DRUMS STUDIO CONSOLA

size(720, 680);

background(15, 15, 15);

strokeWeight(2);

//LOAD DRUM STUDIO IMAGES

img0 = loadImage("drumsstudio.png");

img1 = loadImage("res.png");

img2 = loadImage("caixa.png");

img3 = loadImage("charles.png");

img4 = loadImage("tomtom.png");

img5 = loadImage("crash.png");

img6 = loadImage("bombo.png");

//LOAD SOUNDS

caixa = new SoundFile(this, "caixa.aiff");

charles = new SoundFile(this, "charles.aiff");

tomtom = new SoundFile(this, "tomtom.aiff");

crash = new SoundFile(this, "crash.aiff");

bombo = new SoundFile(this, "bombo.aiff");

}

void draw()

{

//TITULO DRUMS STUDIO

image(img0, 125, 0);

//WAVES DRAWING

if (y>720) //Start the waves again

{

y = 0;

y2 = 1;

y3 = 2;

y4 = 3;

y5 = 4;

}

fill(0, 10);

rect(0, 0, width, height);

// Dejamos fill a blanco para

// dibujar la bola

fill(255);

stroke(250, 255, 3);

point(y, (height-40) + sin(n) * 30);

n = n + 0.05;

y = y + 1;

stroke(250, 255, 3);

point(y2, (height-40) + cos(n2) * 30);

n2 = n2 + 0.05;

y2 = y2 + 1;

stroke(250, 255, 3);

point(y3, (height-40) + sin(n3) * 30);

n3 = n3 + 0.05;

y3= y3 + 1;

stroke(250, 255, 3);

point(y4, (height-40) + cos(n4) * 30);

n4 = n4 + 0.05;

y4 = y4 + 1;

stroke(250, 255, 3);

point(y5, (height-40) + sin(n5) * 30);

n5 = n5 + 0.05;

y5 = y5 + 1;

//DIBUJO BATERIA SIN NINGUNA PARTE ILUMINADA

image(img1, 0, 80);

//MAKE OUTPUTS FOR EVERY INPUT

if ( myPort.available() > 0)

{ // If data is available,

val = myPort.readStringUntil('\n'); // read it and store it in val

println (val);

String[] list = split(val, ','); //Open a list for taking every input value

if (list!=null )

{

if (list[0].equals("0")) { //if you hit the caixa

caixa.play(); //Play caixa sound

image(img2, 0, 80);//The caixa is iluminated in the screen

println("caixa"); //print it out in the console

} else if (list[0].equals("1")) { //if you hit the charles

charles.play();//Play charles sound

image(img3, 0, 80);//The charles is iluminated in the screen

println("charles"); //print it out in the console

} else if (list[0].equals("2")) { //If you hit the tomtom

tomtom.play();//Play tomtom sound

image(img4, 0, 80);//Tomtom is iluminated in the screen

println("tomtom"); //print it out in the console

} else if (list[0].equals("3")) { //If you hit the crash

crash.play();//Play crash sound

image(img5, 0, 80); //Crash is iluminated in the screen

println("crash"); //print it out in the console

} else if (list[0].equals("4")) { //if you hit the bombo

bombo.play();//Play bombo sound

image(img6, 0, 80); //Bombo is iluminated in the screen

println("bombo"); //print it out in the console

}

}

}

}


Step 4: Build It

For the realization of the prototype, we have

used everyday elements to simplify the process, but always looking for functionality and a good finish.

The first step was to weld the cables to the piezoelectric, cutting these to a sufficient length to have freedom when arranging the battery on the table or where we go to practice.

After some research, we observed that it was important that the pad optimally transmitted the vibration of each impact to the piezoelectric, so that materials such as wood or plastic were discarded. Finally, we opted to use metal lids for canned food, which comply with their function and have a suitable appearance for their purpose.

Trying with the drumsticks and as expected, the impacts were too noisy and moved away from the solution of a silent drums. In order to solve it, we cover the surface with a Eva foam, cut to the dimensions of the central circumference of the lid. It is glued with double-sided tape thin enough so that the relief is not noticeable when playing. In addition, as the edge of the lids still made an annoying noise that prevented us from playing comfortably, we put a few small drops of hot melt glue on the edge to prevent the pad from slipping and softening each impact as much as possible.

To prevent the four pads from dispersing while touching, we joined them in pairs by means of a threaded bar that entered from the side, fixed from the inside with a small nut. The problem when we started playing was that since it was a metallic material, it transmitted the vibrations from one pad to the other, so when we played one, his partner sounded at the same time.

Finally we removed the rods and saw that it was enough and even more practical to use the piezo cable itself as a union.

As for the pedal, we had the initial idea of holding the piezo between a sandwich; to avoid the direct impact of the piezo against the ground. To do this we glued the piezo on a wooden plate and glued another PVC plate of the same size, to which we made a small crack facilitating and accommodating both the piezo and the cable.

At first we used PVC for both plates, but after several tests we realized that this material absorbed too much impact and transmitted it to the piezo.

To avoid having a pedal loose and moving as you step, we decided to place a rubber band between the sandwich to hold the pedal to our foot and ensure each stroke on the drum.

Finally, to achieve a better finish, we built a small box ourselves that housed the protoboard and the arduino. This is where the 5 cables enter through one side and allows the USB cable to be connected through the other. It is mounted in black feather cardboard, for its easy handling and to continue with the black and white aesthetics of the whole prototype.

Step 5: Play the Drums!

Share

    Recommendations

    • Make it Glow Contest 2018

      Make it Glow Contest 2018
    • Big and Small Contest

      Big and Small Contest
    • PCB Contest

      PCB Contest

    Discussions