TapDrum is the latest in simple and effective electronic design. It’s a MIDI drum board that is completely customizable. It uses either piezoelectric sensors or potentiometers to control anything from a simple drum box to complicated musical triggers, effects, synthesizers, and lighting. It’s easy to install in any housing, and can be adapted to suit any environment and use.

TapDrum uses piezoelectric sensors, which are pressure sensitive. They work by detecting subtle changes in how hard the sensor is being pressed. The pressure is converted to an electronic signal that allows you precise control. It’s easy to get the sound you need from TapDrum, as it responds to how hard you press it. TapDrum is easily converted from a trigger design to adapt to other uses, such as MIDI control, audio mixing, and video effects. The sensors can be replaced with potentiometer knobs, which open up another world of possibilities. A potentiometer is a turning knob that sends a different signal depending on where it is on its rotation, providing complete control over the MIDI or audio mixing applications.

Because TapDrum is so versatile, the user can build housings for any purpose. Assembly instructions are included with the electronic boards allowing you to choose exactly where and how it is used. House TapDrum in anything from wood, plastics, acrylic, aluminum, or even cardboard! Whether you are looking to build a drum machine, trigger effects, put on a lighting show, or control a synthesizer or sampler, TapDrum can be easily adapted. It features a USB port and on board MIDI out connector, providing a simple solution no matter what the purpose.

32 Channels MIDI trigger Schematic Diagram

Here is the schematic diagram to build 32 channels MIDI trigger board to use with Arduino:

32 Channels MIDI trigger schematic diagram.

Arduino sketch:

Drum sketch
 
  1. // TAPDRUM 32 input triggers MIDI board
  2. //  Mux address pins
  3. #define addr1 4
  4. #define addr2 5
  5. #define addr3 6
  6. #define addr4 3
  7. int ledPin = 13   ;    // Led connected to digital pin 13
  8. int pzo = 0 ;     // Piezo connected to analog channels start with analog 0
  9. int mux=0 ;  // multiplexer address start with address 0
  10. int val[32]    ;     // array to store the value read from the sensor pin
  11. int valold[32];
  12. // 32 address location for MIDI percussion/drum notes
  13. // General MIDI drum notes reference
  14. //note=35 Bass Drum 2
  15. //note=36 Bass Drum 1
  16. //note=37 Side Stick
  17. //note=38 Snare Drum 1
  18. //note=39 Hand Clap
  19. //note=40 Snare Drum 2
  20. //note=41 Low Tom 2
  21. //note=42 Closed Hi-hat
  22. //...... note=81 open triangle
  23. int loc[32] = {35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66};
  24. int i = 0; 
  25. int inh=0;
  26. int statePin = 0; // variable used to store the last LED status , to toglle the light
  27. byte THRESHOLD = 5;  // threshold value to decide when the detected sound is a knock or not
  28. void setup()  
  29. {
  30.  pinMode(ledPin, OUTPUT); // declare the ledPin  as OUTPUT
  31.   pinMode(addr1, OUTPUT);
  32.   pinMode(addr2, OUTPUT);
  33.   pinMode(addr3, OUTPUT);
  34.   pinMode(addr4, OUTPUT);
  35. //Arduino Leonardo standard MIDI
  36. Serial.begin(31250); //standard MIDI
  37. //Serial.begin(57600);  // set MIDI baud rate  for Spikienzilab.com  serial to MIDI converter
  38. //Serial.begin(31250); //standard MIDI
  39. //Serial.begin(38400); // Roland USB MIDI
  40. //Serial.begin(36000);  // set MIDI baud rate for ser2MIDI software
  41. }  
  42. void loop(){
  43.  
  44.   digitalWrite(addr4, LOW);
  45.   for (mux=0; mux <8; mux++) {
  46.     // set control pins on the multiplexers
  47.    
  48.     digitalWrite(addr1, (mux&7)>>2);//bit3
  49.     digitalWrite(addr2, (mux&3)>>1);//bit2
  50.     digitalWrite(addr3, (mux&1)   );//bit1
  51.  
  52.   // deal with  piezo analog channel loop
  53. for (pzo=0; pzo<4; pzo++)
  54. {
  55.   valold[mux+8*pzo]= val[mux+8*pzo];
  56.   val[mux+8*pzo] = analogRead(pzo)/8;  
  57.   
  58.  if (val[mux+8*pzo] >=THRESHOLD & valold[mux+8*pzo] >=val[mux+8*pzo]) 
  59.  //if (val >  20)
  60.    {
  61.      //remove following comments to check trigger input and value
  62. //    Serial.print ("trigger-->");
  63. //    Serial.print (mux+8*pzo);
  64. //    Serial.print ("--value---->");
  65.  //   Serial.println (valold[mux+8*pzo]);
  66.   noteOn (153 , loc[mux+8*pzo], valold[mux+8*pzo]);
  67.     digitalWrite(ledPin, HIGH);
  68.    delay(2);
  69.     noteOn (137 , loc[mux+8*pzo], 0);
  70.     digitalWrite(ledPin, LOW);
  71.    delay(2); 
  72.     valold[mux+8*pzo]= 0;
  73.  val[mux+8*pzo]= 0;
  74.    }
  75. }  
  76. }
  77. }
  78. // plays a MIDInote doesn't check to see that cmd is greater  than 127 or that data values are less than 127
  79. //void noteOn(unsigned char cmd, unsigned char data1, unsigned char data2) {
  80. // Serial.print(cmd);
  81. // Serial.print(data1);
  82. // Serial.print(data2);
  83. void noteOn(int cmd, int data1, int data2) {
  84.  Serial.write(cmd);
  85.  Serial.write(data1);
  86.  Serial.write(data2);
  87. //For arduino leonardo
  88. // Serial1.write(cmd);
  89. // Serial1.write(data1);
  90. // Serial1.write(data2);
  91. }
Press Ctrl+C to copy the following code.
"