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
Attachment:
calibration-readings.ods
Description: application/vnd.oasis.opendocument.spreadsheet
_______________________________________________ Linux-audio-user mailing list Linux-audio-user@xxxxxxxxxxxxxxxxxxxx http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user