wireless midi tap dancing shoes with arduino and piezos

The basic idea is to attach one piezo disc to the heel and one to the tip of each shoe (4 piezos total).

The only real info needed to be transmitted wirelessly is the force of each tap. A computer would receive that info and translate it to actual note-on messages and forward them to a sampler. At this point I'd say around 4-6 levels of velocity resolution would be satisfactory.

After some googling around I've found a quite simple circuit desing to filter the piezo signal into a suitable form.

I'm guessing the main problem I'm about to face is latency. Foot tapping is just as sensitive to latency as percussion playing in general so the overall delay from one tap to the corresponding audio event in the speaker should not exceed 20ms, ideally it would be below 10ms. I might be able to squeeze the computer's output latency down to 5ms which would leave around 10ms to 15ms for the transmission.

So..

  • does this even seem possible?

  • what would be the best way to transmit the data? wlan? bluetooth? something else?

thanks in advance

what would be the best way to transmit the data? wlan? bluetooth? something else?

How much data? How often? How far? How critical is it that all the data gets through?

Each transmitted message would be a numerical value between 0-127 maximum. If needed this could probably be squeezed to 0-8.

Tap dancers do tap with quite a speed.. i'd say as often as at least once per 50ms.

the distance would be something like 50 meters.

1-2 lost messages evry now and then wouldn't end the world but ideally all data should get through.

50 meters is not an insignificant distance. It is far outside the range of the 433 MHz radios. It is in scope for XBees and for the Nrf radios. I'm going to recommend the XBees because I'm familiar with them. You can connect some sensors directly to them, eliminating the need for an Arduino on the sending end, saving some money. The XBees then send in API mode. An API packet contains the address of the sender, so you could have multiple senders and the receiver can keep track of which is which.

Sending a byte is the smallest logical unit to send. That byte can contain 0 to 255. Trimming the value from 0 to 127 to 0 to 8 is not going to reduce the amount of data sent. It will still be one byte. Actually, the value will still be two bytes per piezo, since the XBee also uses a 10 bit ADC, resulting in a value of 0 to 1023, which won't fit in a byte.

Thanks for helping out!

This is all new stuff for me so I need to clarify some things..

You can connect some sensors directly to them, eliminating the need for an Arduino on the sending end,

  • if I understood correctly the data is sent digital? do XBees have an ADC onboard?

  • can I receive the data with, say, regular wlan adapter of a laptop pc?

if I understood correctly the data is sent digital? do XBees have an ADC onboard?

Yes and yes.

can I receive the data with, say, regular wlan adapter of a laptop pc?

Not if a XBee is sending it. Only another XBee can receive it. But, there are USB Explorer boards that connect to the PC and carry an XBee:

ok, great!

This seems the way to go. I'm sure I could dig this up myself but since you know the
deal, here's couple more questions:

  • what kind of signal voltage ranges can XBees handle (the current system would produce peaks between 0 to +5V)

  • do I need an XBee for each piezo or can I hook up several sensors to one so that they could still be sorted out in the receiving end.

..oh and come to think of it, If I can do the wireless transmission and input to my pc with these things and program the signal processing from there on, is there anything I really even need an Arduino for?

what kind of signal voltage ranges can XBees handle (the current system would produce peaks between 0 to +5V)

Actually, the current system would produce peaks of 0 to the nominal voltage. For a 3.3V Arduino, the voltage range would be 0 to 3.3V.
The XBee is a 3.3V device. If it is powering the senors as well as reading them, then the values from 0 to 1023 represent 0 to 3.3V.

do I need an XBee for each piezo or can I hook up several sensors to one so that they could still be sorted out in the receiving end.

You can connect one per analog pin. You'd need to look up how many analog pins the XBee has.

oh and come to think of it, If I can do the wireless transmission and input to my pc with these things and program the signal processing from there on, is there anything I really even need an Arduino for?

No, not really. That's why I mentioned you could have money using the XBees instead of Arduinos and cheaper radios.