[Back to MIDI-Bash Page]


My MIDI-Bash v2.0 Lap Drums
My first build of a MIDI-Bash drum controller... Updated May 19 2009.

Lap drums?

The first MIDI-Bash (v1.0) prototype was built on my MikroC development board and worked fine, with 10 drum pads (buttons) and the UP and DOWN buttons. I tested it playing the built-in drum sounds on my Roland keyboard. PIC16F876 MikroC source code is provided at the bottom of this page if you want to build a MIDI-Bash v1.0.

I decided to build "Lap Drums", my name for a little set of drums to sit on my lap and play along with songs to work out the drum lines. Like electronic "bongos" with 10 drum pads. They would also be useful for recording, with the constraint of being fixed velocity (volume). Fixed velocity suits me best for both tasks as I don't need to worry about how hard I hit the pads and can just concentrate on the timing, and also it is best for playing along with songs as it is easier to hear both the song and the drums.

I added some features to make it version 2.0, mainly adding a volume pot that controls the global MIDI velocity value for all 10 drums. This means I can set a good listening volume without getting up, and also allows for some expression when recording. The other feature was to save the drum UP/DOWN config (ie which sound is on each drum pad) to the PIC internal EEPROM so that it keeps the sounds setup the same way when it is next turned on. I added another v2.0 feature that lets you set each drum pad to its own velocity if desired.

The circuit

The circuit is very simple. 8 drum pads (buttons) connect to PIC portB. Another 2 drum pad buttons connect to portC 2 and 3. The UP/DOWN buttons connect to portC 1 and 0. The volume pot varies between +5v and 0v, and connects to the only ADC input portA AN0. A drum LED flashes when the unit is powered up and then each time a pad is hit. 4 pull-up resistors are needed on the portC pins as portC does not have internal pullups like portB.

See the source code for the PIC pin assignemnts etc.

There is a typical 5 volt regulator to provide +5v from a 9v battery. The circuit is very low power and the battery lasts many hours, the MIDI port only requires current when a pad is hit (and a MIDI note-on is sent). So apart from the very small current through the 100k pot, the only current really used is to power the 5v regulator and power the PIC itself. I used a special low-current SMD 5v regulator (MC5209 5.0) but even with a typical 5v regulator it should give quite a few hours of constant use before the battery gives out. Of course you can use a 9v DC plugpack etc but I just wanted battery power so there is only one cable connected (MIDI cable) when sitting on the lounge. :)

I kept the PCB as simple as possible for a quick easy construction on 0.1" stripboard (veroboard). Only cut the tracks between the PIC pins - use a 1/8" (3mm) drill bit and a very low speed drill or just a handle. There are 2 solder blob jumpers on the bottom of the PCB - see the blue lines. Also don't forget the wire link under the PIC socket connecting the 2 PIC gnd pins. I used a strip of conector pins and a connector so the PCB can be easily removed from the unit, but you can just solder the wires in if desired. Sorry about the poor quality of the JPG, I forgot to convert it to a GIF and some of the writing got messed up - whoever invented lossy compression needs to be shot. :(

Parts on PCB;
  • PIC16F876
  • 28pin PIC socket
  • MC5209 5.0 +5v low power regulator (or use any +5v regulator)
  • 2x 2.2uF tantalum caps - both sides of the 5v regulator
  • 2.2uF tantalum cap - directly on the PIC power pins
  • 0.001uF polyester cap - from AN0 analog input to gnd
  • 3.3k SIL resistor pack - (or use 4 resistors) to pull-up portC pins to +5v
  • 8MHz crystal with 2x 22pF ceramic caps (or a 8MHz 3pin package)
  • 90 degree connector pins

    Parts not on PCB;
  • 9v battery connector - and 9v battery
  • on-off power switch
  • 10 buttons - for the 10 drum pads
  • 2 buttons - the UP/DOWN buttons
  • 100k linear pot and knob - for "volume" pot
  • red LED and 1k resistor - for "drum" LED
  • 5pin DIN panel socket and 2x 220 ohm resistors - MIDI out socket

    Most of the parts values are not critical! I used 2.2uF tantalum caps because they were handy. Any electros will do there, 10uF or 47uF etc. For the 4 pullup resistors I used a 3.3k SIL pack (handy), but you can use 4 standard resistors of just about any value; 1k, 10k, 100k will all work fine. Likewise the cap on the ADC input AN0, I used 0.001uF (again handy) but any cap under 1uF will work fine here. I used a 100k linear pot to keep power consumption down, but 10k, 25k, 50k etc will all work ok. I used a 1.5k LED resistor and a high brightness LED to save power, you might want to use a cheaper LED and a 560 ohm or 1k resistor. The 2 resistors on the MIDI-out socket must be 220 ohms each, this is required by the official MIDI specification.

    Mechanical construction

    I made it out of pine wood as I had some scrap pieces available and the varnish etc from making other items for my studio. Wood is a nice material that can be shaped and rounded to make comfortable lap drums. For the pads themselves I had some small pieces of scrap 10mm thick black perspex (acrylic). These would be hard wearing and not likely to split from much bashing like thin wood might. And look pretty cool.

    Pad design and position. My pieces of 10mm black acrylic were some off-cuts and they were limited in size and were wierd shapes, so I made cutouts from green paper and tried a few shapes that might work for drum pads. It ended up with 5 pads, each with 2 buttons on opposite sides to give 10 drum pads total. Making the pads first in paper let me change the shape to give good ergonomics, and then try drumming on it. So the pads are positioned very well for 2 relaxed hands (thumbs and fingers) to drum on any pads without moving much.

    Cutting out the pads. I drilled through 2 thicknesses of the 10mm acrylic and screwed them together with a green paper template on the top, so that the 2 pads would end up identical mirror-symmetric shape.

    Shaping the pads. They were cut on a bandsaw with a 6 tpi wood blade. Acrylic is a similar hardness to wood. Then they were smoothed on a sanding disc linisher and belt sander to give reasonably smooth edges. Later they will get the top edge rounded and finished more smoothly.

    Another mock-up test. The pads were placed in posiiton on the backing template and played like drums. Again this felt pretty natural. I decided on exactly where the "sweet spots" were, ie the spots where the fingers liked to hit the pads. These spots were marked, then the pads doubled up again and the sweet spots drilled with a 10mm (3/8") hole in matching locations.

    Permanently marking the sweet spots. I put tape on the back of the holes to make them watertight and mixed up some epoxy. Orange epoxy colouring was added and the epoxy was poured in the little holes. This forms a hard plastic "dot" marking the sweet spot and will remain permanent even when the pads are ground to a smoothed shape later. These dots are important as they give you something to aim for when hitting the pads. Especially when each pad has 2 buttons and 2 places to hit. I used my leveling hotplate to cure the epoxy for a few days at about 45'C.

    The Lap Drums build so far;

    I cut some pieces of pine wood to make reliefs for the pads. Then I glued the basic structure and chiseled a nice big cavity to hold the battery and PCB.

    Next I need to cut it nice and round, and do all the finishing and varnishing of the wood, and finishing/rounding of the pads. It won't be square at all when done, it will be oval in shape. I have had to put the project on hold for a few weeks while as I'm too busy with commercial projects at the moment to be messing with woodwork. :)

    Using MIDI-Bash v2.0

    It's pretty simple; you hit the pads and it sends MIDI messages to your MIDI device that makes drum sounds. If you press the UP or DOWN button while you hit a pad, that pad changes up/down to the next MIDI note (to the next drum sound). So you can set any pad to play any sound. All drum messages are sent out on MIDI channel 10, this is standard for drum controllers.

    However the new MIDI-Bash v2.0 features need some extra explaining;

  • v2.0 saves all the pad settings! After you change the drum sound for any pad that setting is saved inside the PIC in its special non-volatile EEPROM memory. The new settings are always remembered, even if the PIC is turned off or the battery removed. So when you turn it back on it will be set-up the same as the last time you used it. This is great for battery use as it encourages you to turn it off/on as much as you like (to save the battery). MIDI-Bash boots up instantly so it's smart to turn it off even if its only a minute between recording "takes" etc.

  • The "velocity" knob; turn this and you change the global velocity (volume) of all the pads. So when sitting confortably you can adjust the whole drum set louder/quieter like a normal volume knob without needing to get up and mess with the MIDI device you are controlling. This is great for playing along with songs, you can adjust for loud or quiet passages without getting up.

  • Any pad(s) can be set to a fixed velocity! Normally ALL pads will respond to the global velocity set by the knob. To set any pad(s) to a fixed velocity; just hold down both the up/down buttons and hit a pad. That pad will get "fixed" to the velocity that is currently set (by the knob). After being fixed, it will no longer change velocity as the knob is rotated. So you can set the same snare drum sound to 3 pads, then set 3 different velocity levels for the 3 pads. This is a very handy feature that is perfect for building drum patterns where you want to accentuate certain drum hits with fractionally different velocities, but where you want to have the security of all the drum patterns using exact velocity values for the whole song. I find this beats any other method of tapping-in drum patterns including velocity sensitive pads or manually editing MIDI note data later on the computer screen. Any drum pads set to a fixed velocity are also saved and restored on the next power up. To return any pad back to using the global velocity again; simply turn the velocity knob right down and press both the up/down buttons and hit the pad again.

    The software!!

    MIDI-Bash v2.0 Below is the complete and tested PIC 16F876 software for the "Lap Drums" seen above.

    MIDI-Bash v2.0 features;
  • C source code for MikroC or other PIC C compiler.
  • 10 drum buttons (normally open switch contacts)
  • 2 up/down buttons to change the drum sounds
  • "Volume" pot control to set each drum volume (if desired)
  • Saves drum setup to eeprom so it remains after power-down.

    SOURCE CODE; Click HERE for MIDI-Bash2.c 30kb
    HEX FILE PIC 16F876 (not A); Click HERE for MIDI-Bash2.hex 30kb
    (Source code is open source, use it as you wish but please mention me)

    If you prefer a much simpler version; MIDI-Bash v1.0 Also for 16F876, complete and tested.

    MIDI_Bash v1.0 features;
  • C source code for MikroC or other PIC C compiler.
  • 10 drum buttons (normally open switch contacts)
  • 2 up/down buttons to change the drum sounds

    SOURCE CODE; Click HERE for MIDI-Bash1.c 20kb
    HEX FILE PIC 16F876 (not A); Click HERE for MIDI-Bash1.hex 30kb
    (Source code is open source, use it as you wish but please mention me)

    - end -

    [Back to MIDI-Bash Page]