I am completely new to electronics, and am trying to learn by building an electronic drum set. I've found lots of examples online of circuits to condition the output from a piezo to be read by a controller (a Netduino in my case). The circuit I'm using looks something like this.

  1. A Piezo (connected from the drum to my breadboard w/ some cat5 cable)
  2. A 470k resistor in parallel
  3. A Schottky diode in series (on the + line)
  4. A Zener diode in series (3.3v on the + line)
  5. A 1M resistor in parallel
  6. A 0.1uF capacitor in parallel
  7. A Netduino analog pin (and the ground line connected to the Netduino ground pin)

I currently have 6 of these circuits attaching to the 6 analog pins on my Netduino. The circuit is doing a great job of both not missing any hits on the drums as well as giving a pretty good dynamic range of velocity/volume readings. The problem is that when I strike any of the drums very hard, I'm getting some nasty crosstalk (i.e. I hit one drum, but multiple drums are signalled). I've been stuck on this for a few weeks now and have tried tweaking the circuit in every way I can think of, but can't seem to fix the issue. The closest I can come is to put a voltage divider at the end of the circuit. This does remove the crosstalk, but at the cost of significantly less dynamic range (i.e. no matter how hard I hit the drum, I don't get more then around half of the max ADC readout value). I've checked and double checked that everything is connected to the same ground. The Schottky should be keeping any negative signal from getting to the Netduino, and the Zener should be making sure I'm not getting anything above the 3.3v that the Netduino wants.

I think an oscilloscope would probably help a ton in figuring out what's going wrong, but as this is my first electronics project/experiment it's a little hard to justify a couple hundred dollar purchase to the wife ;)

Can anyone point me in the right direction for figuring out what's going wrong?


Here is my attempt at a schematic. I've just downloaded Eagle and am not entirely sure how to use it, but hopefully this is close enough to give the idea. The piezo symbol on the left doesn't look right to me, but that's what Eagle gave me.


EDIT #2:

Per several requests below, here are some pictures of my circuit (slightly updated from several peoples suggestions). Also, I've included some pictures of the drums. The drums use a special "screen" drum head that makes very little audible sound. There is a small piece of foam that transfers the drum head vibrations to the piezo.

Breadboard Circuit Drum Set Single Drum

  • \$\begingroup\$ A schematic would be very helpful. As it is you're asking everyone who reads this to reconstruct the schematic from your text description of the circuit. Frankly, nobody is going to bother to do that. \$\endgroup\$ – The Photon Jun 25 '12 at 16:19
  • \$\begingroup\$ Please add a proper circuit diagram, this is rather hard to follow! There might be milage in having a smaller voltage divider to match the input to the output; note that if the input voltage went over the 3.3V it would probably cause problems on the Netduino. \$\endgroup\$ – pjc50 Jun 25 '12 at 16:19
  • 2
    \$\begingroup\$ Second, a photo of the circuit as built would be very useful for us to see if there's any way the construction could be causing crosstalk issues...That said, I'm with StevenVH, acoustical crosstalk seems more likely than electrical. \$\endgroup\$ – The Photon Jun 25 '12 at 16:20
  • \$\begingroup\$ Thanks for the feedback everyone. I've attached a crude schematic. I hope that helps. I'll try to add a photo later this evening. \$\endgroup\$ – herbrandson Jun 25 '12 at 16:50
  • \$\begingroup\$ It looks like either your Zener or your Schottky diode is connected wrong way 'round. A Zener produces a fixed voltage drop when current is going in to the cathode and coming out of the anode. When hooked up the other way, it behaves like a normal diode (roughly 0.6 to 0.7 V drop). \$\endgroup\$ – The Photon Jun 25 '12 at 16:54

A real schematic would help!!

I don't think the crosstalk is something in your circuit, but rather is acoustic. The other drums act as microphones and pick up the vibrations of the drum you're playing. The only solution I see is to add antisound to the other drums' signal, but that requires that you have a very good idea of the amplitude and phase of the signal you want to cancel.

edit (re your comment)
If hitting a disconnected drum doesn't give you crosstalk, then it doesn't seem to be acoustic after all. I want to have a look at your wiring. The signal should be a high peak voltage (high dV/dt), followed by a quickly decaying sine (the drum's resonance). If the wires between drums and microcontroller are very long and very well coupled (like intertwined), with the high impedance you have this may cause minor crosstalk. Not so much from the resonance sine wave, but from the fast peak when you hit it. But this should only give a small "tick" sound, not the typical drum.
So how did you wire it up? Try to use separate wires for each drum.

  • \$\begingroup\$ Thanks for the response. I've attached a schematic that will hopefully help some. \$\endgroup\$ – herbrandson Jun 25 '12 at 16:53
  • \$\begingroup\$ Agree that it's mechanical coupling that is the likely culprit. Figuring out a way to dampen / isolate the propagation of vibrations between drum pads \$\endgroup\$ – vicatcu Jun 26 '12 at 4:24
  • \$\begingroup\$ I doesn't look like this is an acoustics issue. Per the suggestion of @fceconel below, I tried disconnecting one of the drums and seeing if I still get the crosstalk. The result is that the crosstalk only happens when the drum is connected. In other words, if I hit a drum hard (while it's connected) I get crosstalk. If I disconnect that same drum and hit it hard again, no crosstalk. Connect that same drum again and hit it hard and the crosstalk comes back. I think that rules out this being an acoustic issue. Do you agree? \$\endgroup\$ – herbrandson Jun 26 '12 at 4:30
  • \$\begingroup\$ I've added some photos that show the actual wiring. Is that what you're looking for? \$\endgroup\$ – herbrandson Jun 26 '12 at 16:22

I'd recommend to change the zener placement as shown to have the effect you intended; this has nothing to do with your problem, though.

As stevenvh mentioned, it's improbable that you have electric crosstalk from such an arrangement, but if you want to be sure a shielded cable from the drum to the arduino would help. But in the most probable case, in which it's an accoustic effect, consider dealing with the problem in software. It's almost impossible that you hit two drums at exactly the same time, even if you're using both hands to hit simultaneously two different drums. So how about simply considering as a valid hit at any given timeslice only the strongest input, and ignoring the others?

BTW, to confirm that the problem is really accoustic, try to disconnect one drum and hit it to see if it still produces an input in the other (connected) drums.


EDIT: revised according to comment below enter image description here

  • \$\begingroup\$ I don't think that is what the zener was intended to do. It is a good idea to clip the result to make sure the A/D range isn't exceeded, but I think the zener was there to set the minimum level at which a drum hit is detected. It was in the right place for that, just backwards. Also, for clipping, I would put the zener after D2. \$\endgroup\$ – Olin Lathrop Jun 25 '12 at 18:25
  • 2
    \$\begingroup\$ But in the question he says "Zener should be making sure I'm not getting anything above the 3.3v that the Netduino wants", right? \$\endgroup\$ – fceconel Jun 25 '12 at 18:32
  • \$\begingroup\$ You're right about the placement, indeed. Correcting. \$\endgroup\$ – fceconel Jun 25 '12 at 18:45
  • \$\begingroup\$ The OP's statements are conflicting. I suspect he saw a schematic with the zener in series and accidentally flipped it, the supposed a different purpose for the zener. In any case, thresholding for the minimum require drum hit is best done in the firmware. \$\endgroup\$ – Olin Lathrop Jun 25 '12 at 20:42
  • \$\begingroup\$ The intended purpose of the zener is indeed to clip the signal to no more than 3.3v (the Netduino max). The minimum threshold is already being handled in software. \$\endgroup\$ – herbrandson Jun 25 '12 at 20:48

I think your trigger level for deciding a drum was hit is too sensitive. You need some level below which you figure the drum was not intentionally hit. That is probably what the zener in your circuit was intended to do, but you have it wired backwards so that it only adds a small threshold instead of the over 3 V as intended.

However, a zener is rather a hack for thresholding. You say this is going into a microcontroller, so I would lose the zener altogether and do the minimum thresholding in the micro. This is assuming that a maximum whack results in just about the full A/D voltage range. Adjust the second resistor (next time put component designators in your schematic) to get the right maximum volume, then adjust the firmware to ignore peaks below a certain level.

  • 5
    \$\begingroup\$ Whoever downvoted this, what exactly do you think is wrong, misleading, or bad advice? \$\endgroup\$ – Olin Lathrop Jun 25 '12 at 20:44

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.