A position sensitive midi drum pad

PrintPrint PDF FacebookFacebook TwitterTwitter Send this to a friendE-mail
by ganglion
 

introA position sensitive midi drum pad



The SynPad is a position sensitive midi drum pad that you can build yourself using simple materials and tools for around 50 UK pounds (depending on what materials you already have, and how many pads you want to make.) The pad can detect where you have hit it as well as how hard, so that the synth it is driving can change the sound continuously as you strike the pad in different places.

The software I have written to make the sounds is currently linux based, but would not require much work to adapt to a windows or mac environment.

The skills you need are basic wood and metal work (cutting and drilling), enough electronics knowledge to build a simple circuit from the schematic, and a moderate amount of experience with making music on the linux operating system. You don't need any programming experience to start making sounds under linux, but would if you want to create your own synths to make different sounds, or to port the program to another OS.

If you have built one of these pads, or are thinking of building one, it would be good to hear from you. There is a mailing list at http://ganglion.me/mailman/listinfo/synpad_ganglion.me which you can join if you want to help with developing the project in any way.

Hope you enjoy making and playing this instructable!

 



A position sensitive midi drum pad
 
Remove these adsRemove these ads by Signing Up.
 

step 1Design

The project is still in early prototype stage. The current design uses a 30 cm square aluminium sheet as the active surface, with piezo sensors mounted under each corner to pick up the pressure pulse caused when you hit the pad with a stick or your fingers. The pad is supported on closed cell foam rubber discs, inside a plywood frame. When you hit the pad, the sensors in each corner respond differently according to where you have hit it.

The signals from each sensor are captured by an arduino micro-controller board, which then sends the raw signal strength from each sensor to a computer over its usb cable. When the sensor data reaches the computer, it is interpreted by a python program which calculates the coordinates and velocity of the strike from the raw figures, and then maps this information onto midi note and controller values.

What happens next is up to you - if you want, you can feed the midi data into any Linux softsynth just as you would for any other midi source like a keyboard. To make the most of the position sensitivity of the pad, though, you want a synth that will change the sound produced according to the x and y position of the strike. The simplest way of doing this is to use one of the music programming languages like supercollider, csound, or pure data. Some example supercollider synths are in the archive attached to the final step of this instructable.

Unfortunately I forgot to take proper photos of each step as I was building the pad - the ones that I have attached are really assembly photos that show the main parts before you bolt them together. They should give you enough of an idea though to build one yourself.
Design
To Download the PDF or View All Steps,   
Become a Pro Member »
35 comments
Jun 9, 2010. 12:51 AMjsandeef says:
This seems like it could work in a circular form, to simulate a multi-zone snare or cymbal. How accurate are the coordinate calculations? I'm a n00b to Arduino and my only experience with programming is a few C++ classes, but based on the code I've read, this might be something I could try. I'm still waiting for my first board to arrive next week, though.
Jun 15, 2010. 7:58 PMzen.webb says:
You may have good luck constructing a square pad but overlaying a round frame on top of it. Then you can modify the code to ignore all piezo signals or coordinates that are from strikes in the corners of the device that you don't want to be active.
Jun 9, 2010. 12:58 AMjsandeef says:
Oh, I just read that the accuracy is within 5%, which is pretty good, given what you worked with. Great job!
Mar 18, 2010. 9:43 AMXsavioR says:
Perhaps using multiple PIC micro controllers one per "zone".  If you like I have code examples of ASM serial driven midi, and USB2.0 midi using Microchip demo code.  You could get quite a few PIC for the price of an arduino, and it would lend to multi tap ability. Also it would be directly plug and play with apps like reason, virtual dj , (those are the two I use to test)
Mar 18, 2010. 1:12 PMXsavioR says:
Like a kaos pad I see. Then shouldnt some code make it read 2 taps. Some maths. All two taps on a kaos pad is is an average of the x y coordinates.
Mar 18, 2010. 7:50 PMzen.webb says:
 I was just going to ask about that. If you hit the pad with two fingers simultaneously do you indeed get an XY value at the midpoint or average of the two points (i guess that would depend on whether or not both fingers strike with the same velocity)?

XsavioR: your idea later in this thread about using a master and slave PICs to speed up the process is interesting, you should pursue the idea.

ganglion: You don't have to believe in patents for someone else to take the idea out from under you. This project introduces some tech that has some pretty awesome potential and if you apply it in the right area (buttonless drum pads for instance) audio geeks with eat it up like crazy. But luckily for all us hobby enthusiasts you put it out there in the public domain, which I can definitely appreciate.
Mar 18, 2010. 10:09 PMXsavioR says:
Im working on a web based , rfid , security / monitoring / control device. :) ive got my hands full :)
Mar 18, 2010. 1:16 PMXsavioR says:
PS what i meant was use some small PIC for each input, then poll them all at one time using a master PIC , basically out put binary from the 8 pics , then poll the results, do some math on the master and output the MIDI signal. It should be fast enough to surpass the 10ms the human ear can hear, given the right oscillator on the master pic.  Definitely another project but  interesting no less.
Mar 18, 2010. 10:38 AMspydercanopus says:
 If you can find a shop to make you a sleek chassis to house the components, you could sell them if they're a good price.  Let people tweak the sound effects and you'd have one cool computer peripheral instrument.
Mar 18, 2010. 1:09 PMspydercanopus says:
Inventors rarely see the value of their brain childs.  You have something really cool here.
Mar 11, 2010. 2:01 PMyeehacmh says:
I always wanted a system like this on my car's steering wheel. Maybe a couple buttons on the free foot on the floor too. You know how you're bopping down the road and you're beating on the wheel to your favorite tune. This could be added to the audio output speakers and you would become part of the playback.

Mar 18, 2010. 1:12 PMrattyrain says:
Haha, that would be too awesome!
Mar 12, 2010. 7:40 PMzen.webb says:
 Have you considered using the Arduino itself to extrapolate the sensor data and output MIDI notes directly, perhaps through a true MIDI cable? 

I see the Python code has some potentially CPU intensive math so it may introduce an unacceptable amount of lag if ported to the Arduino, but maybe not, especially if you upgrade to a more powerful Arduino or clone. 

In practice do you find that the calibration functions you have written help much? Or did you introduce that because you noticed noise in the system? I would like to see if this device can be optimized into a more plug-and-play package. This sucker has some fantastic potential.
Mar 12, 2010. 8:49 PMzen.webb says:
 Also, what is the equation you use to integrate the the piezo signals into an XY position? I'm just going to copy the code, but was just curious if its a well-known equation, maybe there is a reasonably analogous alternative function out there for CPU calculations.
Mar 11, 2010. 6:31 PMzen.webb says:
Now THIS is a sweet project, can't wait to try this myself; I love the simplicity of it! :)

Does your pad handle simultaneous taps at all? I'd imagine that multiple simultaneous taps may cause dampening of the vibrational waves, but maybe in practice its not too bad.

And using Python on Linux for 'duino serial data? That's f*cking hardcore, lol :P
Mar 10, 2010. 5:58 PMEnigmaMax says:
can it detect flams?
Mar 11, 2010. 5:47 PMEnigmaMax says:
i think the flam is around 80msec, so I guess it should work!

Mar 11, 2010. 2:24 PMkaiseb says:
 CLICK HERE:



Mar 11, 2010. 10:53 AMdeqaxwer says:
Great=) nice thing.. .
Mar 10, 2010. 6:41 PMdazirius says:
 Awesome work!
Very sweet build and nice use of a 'duino :D
Mar 10, 2010. 8:56 PMLkArio says:
Awesome! I think it would be a good idea to make a keyboard controller using a similar procedure...
Mar 10, 2010. 4:51 AMBongmaster says:
now thats nice :)