When placed on the back of a target surface, the piezo speaker acts like a microphone and emits a voltage signal relative to the vibration of the surface. To condition that signal properly, the output voltage is rectified (to have only positive voltages), and then passed across a resistor and capacitor in parallel.
The capacitor is charged by the piezo, and the resistor allows it to discharge at a known rate, so if the sensor impact is sharp enough, it will convert the noisy impact signal into a clean 10ms pulse, which has been limited to a maximum of 5V, ready for reading by a microcontroller.
While this is essentially a drum sensor, we’ve tuned the circuit to give a clean, reliable pulse from the impact of a NERF-type foam dart impact.
The circuit takes the noisy input voltage signal from the attached piezo, rectifies it, clips it to 5V and passes through an RC pair to give a pulse-and-discharge signal.
The pulse duration is approximately 10ms long, and the maximum voltage relates to the impact size on the piezo, so it’s only triggered by an impact and not a slow press.
By choosing a threshold voltage level on the attached device, it’s possible to filter out impacts above a required size. The RC circuit is specifically sized to be useful for registering strikes from foam dart guns such as those from Nerf guns.
The piezo is stuck to the back of the target face with double sided tape, so any vibration of the plate is picked up by the piezo. To increase the deflection in the piezo unit (and therefore the size of the signal), we stick an M6 nut to the back of the piezo element.
Note that the soldered leads on these exposed piezo elements are very fragile around the solder joint, so a drop of hot glue over each joint provides much needed strain relief.
You can feed the signal line direct into an analog input pin of an Arduino, but the signal will only be reliably picked up if you can poll the analog pin fast enough.
As an alternative, feed the signal to a FET buffer that will pull an interrupt low once the signal line gets an input. This sets the threshold level to the activation voltage of the FET (ie. 0.7V) and gives a clean active low on the interrupt pin.