I'm building an electronic musical instrument, using piezoelectric contact microphones as inputs. I want ~80 buttons, each with a piezo connected to an ADC. The idea is that you hit the piezo, then depending on how hard you hit it I trigger a louder or quieter sound.

I'm trying to figure out what to use for the ADC. I could run ~14 arduinos, but that seems kind of silly? Is there a better way to get ~80 ADCs?

I'm also trying to figure out about how to set up the circuits. For each one I could just put a piezo and 1M resistor in parallel across the ADC:

ADC in0 ---+------+
           |      |
         1MOhm  piezo
           |      |
ADC in1 ---+------+

This is fine, but requires a relatively high sample rate from the ADC to accurately capture the peak of the input signal. It seems like I should be able to put something in series with the piezo to cut off the negative side of the signal, and then something else to smooth out the signal, which would let me run a much lower sampling rate?

(This question is basically "what should the electronics for a an electronic drum kit's input look like", though that's not what I'm building.)

  • 2
    \$\begingroup\$ How big a voltage might the piezo produce and have you checked how much overload any fairly standard ADC can handle? \$\endgroup\$
    – Andy aka
    Nov 24, 2016 at 17:33
  • 1
    \$\begingroup\$ Jeff, have you tried capturing sampled data from one transducer? to see if it yields voltage appropriate for your application? I've dismissed piezo's as inappropriate for a somewhat similar application. Kilovolt pulses are possible for sharp tapping, making for poor sensitivity for finger-tapping. \$\endgroup\$
    – glen_geek
    Nov 24, 2016 at 19:29

2 Answers 2


You can multiplex a single ADC, with throughput reduced, of course. So if you have a 1MSPS ADC that settles in 1usec (probably available on-chip with some micros) you could sample 100 inputs at 5kHz.

Sampling at 5kHz with a realistic analog anti-aliasing filter on each input you might be able to capture 1-1.5kHz fairly well (the theoretical limit is 2.5kHz).

That may be an acceptable bandwidth for triggering musical sounds. To that you'd have to add processing time which will probably be limiting. You might do better to devote a processor to each input or somewhere in between, but you will have to profile the code you intend to run.

You might also consider using a simple analog-input comparator (with input protection) for each piezo and generating a digital signal. Something like an LM339. It won't be able to find the peak of the signal, but neither will you using any algorithm in real time, since it's non-causal. You could add a one-shot to each comparator output to stretch the pulse giving you time to sample one at a time (or maybe 8 at a time).


When I did this, I used an analog multiplexer, such as the 4051. This allows you to connect many piezos up to one ADC channel; you select which piezo you want by inputting binary data to the multiplexer. You can even put them in series to get n^2 input pins.

You have 6 ADC pins, I believe, so 6*8 switched gives you 48 inputs. You can add one more cascade to get the final total that you need.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.