hello,
I am working on a project to build a position and velocity
sensitive midi drum pad. The idea is to make a pad which can
tell where you have hit it in two dimensions, as well as how
hard, and then use these 3 parameters to synthesise a sound
which varies according to the position of the strike on the
pad.
So far I have built a prototype pad which is looking
promising. It consists of a 30 cm square aluminium sheet
with piezo transducers under each corner. Each sensor sits
on top of a small circle of closed cell plastic foam, which
is in turn mounted on a plywood base. The sensors are hooked
up to an arduino board, with firmware which detects when a
signal has been received, measures the strength of the
signal from each piezo, and sends the signals from each
piezo to a computer over its USB cable.
This part of the project is working well so far - I have
found that the total of the signals from each sensor is a
good measure of the velocity of the strike, and that the
share by which each of the sensors contributes to this total
remains pretty stable in a characteristic pattern for
different points on the pad, which hardly varies when you
hit the pad harder or softer.
The next thing to do is find a way to map the series of 4
sensor readings coming in from the pad into midi events
representing the position and velocity of each strike.
Velocity is easy - it's just the total value from all
sensors - but mapping the 4 readings into an x-y position
looks harder, and I thought I would ask to see if anyone has
any suggestions on how to go about it before I go any
further. My thought at the moment is to use an approach
based on least-squares curve fitting and lookup tables. I
have some ideas about how I would go about this, but it
looks complicated (and probably computationally slow), so it
would be good to know if anyone has any other suggestions.
I have done some preliminary testing and measured the
response at a series of 9 points in a square grid on the pad
surface. The results from this are in the attached
spreadsheet (open office format). The pattern that comes out
from this is that each sensor responds strongest when the
strike is in its own corner, and weakest in the diagonally
opposite corner. But the response of each sensor is
different, and doesn't vary in a linear way according to the
position of the strike, so I need some kind of mapping
algorithm which takes account of this.
Thanks,
andy
Very interesting.
I'm also interested in this area, nothing to show at the moment. I'm working with
arduino,
great possibilities!!
I don't understant if you want to map different areas from your surface to different
instruments (cymbals, tom,...) or something different...
In theory, if you have the strength of each signal independent, it is possible to
calculate
the (x,y) position, no?
With arduino you have two posssibilities:
1) to build a midi controller itself: the arduino sends the midi messages and you need
just a synthesizer to produce sound. It's a firmware solution.
2) the software solution. You detect the signal in the usb port, and you need to program a
little (or big) application to convert you signals to midi notes (or anything else that
produces sound). In this case, I use Midishare, that for me is fantastic. There is already
one year that I read the posts in this mailing list, and nobody speaks about midishare...
I miss something? I there a better way to do that?
Joan Quintana