Introduction: MIDI Arduino Drums

Picture of MIDI Arduino Drums

I've always wanted to learn how to play a drum kit, but my parents never let me because 'it takes up too much space' and 'it makes too much noise'.

So now, many years and some electrical knowledge later, I've decided to make my own electronic drum kit!

This project is pretty easy to make and you do not really need any special knowlegde or skills.

Step 1: What You'll Need

Here's what you'll need to make 4 drums:

- 4x Piezo

- 4x CD

- Mouse pads (enough to cut 8 circles as big as the CD)

- Arduino + USB cable

- 4x 1M Ohm resistor

- PCB or breadboard

- some wire


- 4x 3.5mm plug

- 4x 3.5mm socket

Step 2: Soldering Piezos

Picture of Soldering Piezos

The first step is to solder long wires to the piezos.

My piezos came with a little metal cap and short wires. You can cut the metal cap of and simply solder longer wires to those short little wires.

If you chose to use plugs and sockets, you obviously have to solder your plug to the other side of your wire.

Step 3: Breadboard/PCB

Picture of Breadboard/PCB

After you soldered wires to your piezos it's time to connect everything.

Connect the resistor to the wires of the piezo as shown in the diagram above. Then connect the GND wire of the piezo to GND on Arduino. Connect the other wire of the piezo to an analog pin on your Arduino. (If you're using plugs and sockets, you obviously use the wires of the socket and not the wires of the piezo)

When you're not using all of the analog pins, you should connect the 'empty' pins with GND. Otherwise you might get false values because of noise.

You can either connect everything on a breadboard as shown in the diagram. Or you can solder everything on a piece of PCB like I did.

Step 4: The Drum Pads

Picture of The Drum Pads

Now that everything is soldered, it's time to make the drum pads.

Take your CD and put it on the mouse pad. Draw a circle around the CD and then cut it out. Next stick the piezo to the CD with a piece of tape.Once that's done you'll need to glue the mousepads to the CD. I used a tiny bit of super glue. Make sure the glue doesn't get on the piezo! It'll ruin your piezo. I had to learn that the hard way.

ruined piezo

Use a bit of glue on the edges of the CD and stick the plastic part of the mouse pad to it. Do the same for the other side. The foam sides of the mouse pad have to be on the outside.

Use some extra glue around the part where the wires stick out of the drum pad to close it nicely.

Step 5: Connect With PC

Picture of Connect With PC

That's pretty much it. Everything has now been put together and the only step left is to connect everything with the computer.

There are a few possible ways to connect. After some research and trying different programs I found Ardrumo (Mac OS X only) the easiest to work with. Simply load the sketch to your Arduino and then open Ardrumo and Garageband.You can choose different drums in Ardumo as you can see in the video in the first step.

But like I said, this is not the only possible way to connect. There are a lot of other ways, for example using Hairless as explained in this Instructable. Just play around a bit and find a method that suits your needs :)

This is the code for Ardrumo. Download Ardrumo by clicking here.

 * Ardrumo sketch
 * Use with the Ardrumo software here:
 * <a href="" rel="nofollow"> <a href=""> <a href=""> <a href="" rel="nofollow"> <a href="" rel="nofollow">
 * 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

This is the code for Hairless. The code is from an Arduino Xylophone Instructable.

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

// User settable variables

int pinRead;
char pinAssignments[16] ={
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]);  
    // 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
          hitavg = 127;
        MIDI_TX(144,PadNote[pin],hitavg); //note on

        PinPlayTime[pin] = 0;
        activePad[pin] = true;
        PinPlayTime[pin] = PinPlayTime[pin] + 1;
    else if((activePad[pin] == true))
      PinPlayTime[pin] = PinPlayTime[pin] + 1;
      if(PinPlayTime[pin] > MaxPlayTime[pin])
        activePad[pin] = false;

// Transmit MIDI Message
void MIDI_TX(byte MESSAGE, byte PITCH, byte VELOCITY) 
  status1 = MESSAGE + midichannel;


Step 6: Have Fun!

Picture of Have Fun!

That's it!

Everything is now connected and put together.

Have fun and annoy your parents with your new drum kit! :)


EwanV made it! (author)2017-09-09

Having issues with the sensitivity, some of the drums seem to trigger twice? I'm possibly using the wrong resistors however. So could that cause this issue?

skulk (author)EwanV2017-12-11

Try placing the Pads on some soft foam. Its probably the desk vibrating and the other piezo discs picking up on those vibrations. They can be very sensitive, depending on the disc size.

ClashP (author)2016-05-17

I have made it. It creates sound.

But i have a problem. I am Windows, loopMIDI, Hairless and addictivve drum. But when i hit the piezo it plays two instrument on the addictive drum. Like when I tap my first piezo, it plays the snare and the Hanging toms together. What to do???

I also tried this on EZDrums, the same problem occurs.

Ermanto (author)ClashP2017-11-20

Hi there, i started this project and i have the exact same problem. When i hit piezzo hard it triggers too many notes at the same time.. For example (59, 62, 68) when i hit carefully it triggers only one note. When i analyse arduino codes it is impossible. I wonder that you solved this problem?

LeandroV19 (author)ClashP2016-05-25

because it's too sensitive o.o, you have to isolate each pad. (i guess)

ClashP (author)LeandroV192016-05-26

I tried that, but that did not work. I have the same problem

ClashP (author)LeandroV192016-05-26

I tried that, but that did not work. I have the same problem

bhrendun (author)2017-10-23

Confused about the part with GarageBand and Ardumo. How do these sync with the Arudino sketch code?

Do I simply run the Arduino code and then leave GarageBand and Ardumo open? Are there any other settings or configuration I need to make between these programs? Thanks!

MEETJ4 (author)2017-09-11

can i install on windows or ubuntu machine

EwanV (author)2017-09-06

Hey there, thank you so much for posting this. This is fantastic, it took me no time at all to get working with Logic Pro X and Superior Drummer! Only issue I'm having is that the drum sounds seem to get triggered twice in stronger hits? Did you have this problem at all?


ukalar (author)2017-02-24

Could anyone please help with the code for Hairless. I want to assign different pin readouts to different midi channels... According to the code written above, all piezzo signals join into one channel... I hope anyone can help. :) Thanks!

vinayakpurohit1996 (author)2016-07-18

Hey there, I am on windows with hairless, but I am getting sounds of piano but not drums. Can please solve this...sorry for noob questions

Hey there. I'm just finishing the project on win 10. You can install tryout version of Ableton LIVE, it works great (you have to install loopMIDI, to create midi breadge and Hairless to connest midi to Ableton LIVE. My issue that remains is how to assign different midi channels in output. I tried useing 3 oiezzos, I get different tones, but I do not know, how to assign different instruments to a single piezzo since the signal from all piezzos comes to the same channel to Ableton LIVE... I hope first part helps a bit :D

franciscog34 (author)2017-02-10

Hello dear, I would like to know if there is any way to go through the midi port in receiving the messages of edrums, add messages of electrical piezo and all send it to the port midi out.

The intention is to make a trigger for edrums.

andtor (author)2017-02-07

hey buddy nice one! Is it possible to use it with ableton as well?

duttasanjiv (author)2017-02-05

Hi there! I found your project by far the simplest & hassle free. Congrats and thx so much for sharing it with us. But I got totally puzzled at one central point : isn't it supposed to create a Midi drumpad ? MIDI is universal, so whatever software you use inside, it should be compatible to Windows & Mac both. Pl. clarify. Thx a lot in advance!

denkihitsuji (author)2017-02-04

It seems my Arduino is not communicating with Ardrumo. I selected the "Serial Input Device" in the Ardrumo drop down menu to match the port I am using in Arduino. The Serial Monitor is getting readings when I hit the piezo but no sound happens in Ardrumo. Is there somewhere I can learn more about the software side of this?

EdzelZ (author)2016-06-28

hey guys... i wanted to try this out .. thats why i used to test this project with 1 piezo.. but when i hit the piezo that i connected to analog pin it sounds the crash cymbal. and when i connected the piezo to analog pin 2 it didnt change the sound... same to the other pins .

AdithyaSaranga (author)EdzelZ2017-01-23

Same happened to me. Someone plz help

JetS2 (author)2016-12-12

hi, i love the project you made. I was just thinking if you happen to know how to write codes for a pedal switch controlled hi hat?

RusiruN (author)2016-12-03

how connect windows pc and what are the softwares plz help me

BillyS68 (author)2016-11-13

would it matter if i used 240K ohm resistors instead? i have a whole bunch lying around

JuanC292 (author)BillyS682016-11-27

You can just use 4 of them in series to get <~ 1M Ohm

GöksuÖ (author)2016-11-02

exit status 1

'MIDI_TX' was not declared in this scope

code for Hairless help me pls

RujulK (author)2016-10-09

Can i use these sensor plz reply.


Kraest (author)2016-07-18

Can I get a better schematic and explanation of what to do for the wiring in step 3? Everything else I understand perfectly fine, but I don't know much about circuitry and trying to find resources for a project like this is difficult at best and I don't know how I'm supposed to read step 3. The picture included looks different from the diagrams and I just don't know what I'm looking at. :(

HaticeG (author)Kraest2016-07-29

I can help you I guess, I'm not sure which part you didn't understand. LEt's try; The greens are cables. you will connect them starting from a0 to the a3. the legs of speakers are important. You should be carefull about their colors. You should just make it how the picture shows. Take your equipments and connect everything exactly with the same holes. Sorry, maybe this is a bad answer but you can ask me, if it doesn't help.

RevDebayan (author)2016-07-05

can i plug 8 drum pads or more......pls tell me

EdzelZ (author)2016-06-28

hey guys... i wanted to try this out .. thats why i used to test this project with 1 piezo.. but when i hit the piezo that i connected to analog pin it sounds the crash cymbal. and when i connected the piezo to analog pin 2 it didnt change the sound... same to the other pins .

ClashP (author)2016-05-09

Great project. But when i try to verify the code for hairless it says "serial was not declared in the scope". What to do?

And with harless should I have to use the GarageBand software?

Colde you please help me to use this prototype on windows properly, please.

bass73 (author)2016-04-17

Hi, awesome stuff there! i just have a couple of questions about this:

1) In Ardrumo's sound library, can you download/insert your own files/sounds? (i want to make this a sort of midi controller pad)

2) (this links in quite nicely with Q1) Could i use buttons instead of piezos because piezos would only play the sound according to the length of the vibrations (momentary?) whereas buttons would hold the note e.g. A riff recorded on guitar would be played until it finishes.

p.s. if the plans dot work for my midi controller pad idea, I'll still make the drums :)

RayK24 (author)2016-03-25

thanks for this! I assumed that more than one resistor was needed to connect the piezo. Are your ones sensitive enough to tap with fingers or do you need to whack them with sticks?

anouskadg (author)RayK242016-03-25

They are sensitive enough to be played by hand or stick. A firm tap with a finger works as well.

RayK24 (author)anouskadg2016-03-25

ta ! I've got a uno and some piezos so I'll have a go. Just like to give a plug to the free mozzi code which takes an uno to the limit for synthesis on uno. My first project on uno was to take a voice input and transform it into a dalek (robotic) voice. Ring modulation. Mozzi meant that I only needed to write a few lines of code. Multiply two numbers, basically. Wonderful. No midi, no sample playback, but if you want to use your pads to make a huge range of sounds direct from the arduino, take a look!

anouskadg (author)RayK242016-03-26

Thanks I'll definitely check it out!

BrianW124 (author)2016-03-10

This looks awesome! Thank you so much taking the time to share this project and especially for continuing to offer help to people with who post their issues in the comments.

BrianW124 (author)2016-03-10

This looks awesome! Thank you so much taking the time to share this project and especially for continuing to offer help to people with who post their issues in the comments.

Gustavo AndreéR (author)2016-01-23

Hi, nice video. Can you connect more than 4 Pads? I want to Trigger some drums for a recording

Six if you use Ardrumo, or as many as you have analog pins if you use Hairless

Gustavo AndreéR (author)2016-01-13

how much would it cost?

That depends on what you have already laying around! I had all the items spare from other projects or from old products, so it didn't cost me anything. All the items in step 1 link to a webshop, so you can easily see for yourself how much it would cost you.

DixantT (author)2015-12-19

I have completed the project but am getting delay in drums

Please tell how to fix it

anouskadg (author)DixantT2015-12-24

I'm not sure what causes the delay. You could try and change the baud rate to 115200. Or maybe if you are using very long wires or high resistors that can cause a delay too.

I vaguely remember I had issues with a delay as well but I honestly can't remember right now what I did to fix it. See if you can connect with TonnyD. He was having the same problem as you and maybe he found a way to fix it.

hgautam1 (author)DixantT2015-12-23

Hey bro... Please contact me on

hgautam1 (author)2015-12-10

Hey sir please do some reply regarding what I have reply of your suggestion in my earlier post, really want some suggestions to nullify this problem.... Please see to it

anouskadg (author)hgautam12015-12-10

Not a sir. I am a girl ;) Sorry for not replying earlier but my job doesn't give me a lot of free time to try and recreate your problem. I honestly don't know how to solve it. Based on your pictures the only obvious thing I can come up with is that the piezos are either taped too tightly to the cardboard, or the fact that they are all on the same cardboard, is causing a problem. If you hit one piezo, the others will sense vibration as well, because they are on the same surface. Can you take two piezos and connect them, without taping them to any surface whatsoever? Only connect them to the Arduino with a couple of wires, nothing else. See if it then still has the problem you're experiencing.

hgautam1 (author)anouskadg2015-12-17

I m sorry mam... :) and yes I tried it too it is still making the same sound and showing channel 2 only on all the piezo in hairless....

hgautam1 (author)2015-11-14

I have built this successfully but still facing a problem that my all the piezo are producing only one sound.... So please tell me how to assign individual sounds to each piezo while I am using FL Studio as my working software... Please anyone who know how to fix it, help me...out

anouskadg (author)hgautam12015-11-14

The whole thing is designed to have each piezo produce a different sound. If you are using Ardrumo, simply select a different sound for each drum. If you are using Hairless, use the serial monitor to see if every piezo is sending a different note. Also make sure the drumpads aren't glued together too tightly. This might make them go of even though you don't hit them.

hgautam1 (author)anouskadg2015-11-28

Hey I have tried all the suggestions provided by you for my question about the same tone produced with each piezo and these are some snapshots I have taken regarding my problem please see to it and please suggest any solution and what I have noticed in hairless is each tap on any of the piezo gives me the velocity and pitch for ch 2 only... So I think here it is the problem.... Please see to it

About This Instructable




More by anouskadg:Dr. Who Tardis - IoTDoor Sticker in IllustratorGalaxy Sneakers
Add instructable to: