Piezoelectric Sensor and the ADC

A quick experiment with a piezoelectric bender shows the following voltages:

  • No pressure: 0.12 Volts (probably drift / noise / breeze)
  • Mild pressure: 1.72 Volts
  • Firm pressure: 4.21 Volts
  • Fingernail tap: 6.29 Volts (spike)
  • Knock on table: 11.74 Volts (spike)

Assuming the area of interest spans the first 4 levels of signal, and any reading higher than 10 Volts can be generalized to an arbitrary "Out-of-Range" reading, the following implementation should serve for the purposes of question:

schematic

simulate this circuit – Schematic created using CircuitLab

The diode D1 shunts the negative portion of the signal that the peizo bender will generate on knocks or release of pressure. To be extra-cautious, this can be substituted by a Schottky diode to cope with very fast spikes, or for tighter clipping to ground rail (~ 0.3 Volts instead of ~0.7 Volts), a germanium diode.

The Zener diode is intentionally selected as 4.7 Volts, in order to ensure that the output voltage does not overshoot 5 Volts under any circumstances.

The op-amp buffer ensures that the voltage divider is not significantly loaded by the ADC pin, hence the voltage divider resistance computation is simplified.


This circuit will output half the positive voltage generated by the piezoelectric pressure sensor until the voltage reaches approximately 4.7 Volts, then clamp at that voltage for any higher pressures applied. Any negative voltage generated due to knocks or sensor bounce-back, will be shunted across the diode D1, protecting the op-amp (or the ADC if directly connected) from negative voltages.


You can use a resistor divider to scale the input voltage. The divider is simply based on Ohms Law.

divider

Above circuit is taken from wikipedia article on the subject. In the above case Vin should be connected to the piezoelectric sensor and Vout should be connected to your ADC input.


divider2

The above circuit is taken from the divider calculator. You can use the calculator here to calculate the values of resistors.