I'm having a very hard time trying to read and keep a low current draw from my sensor which is FSR-402: https://www.adafruit.com/product/166, but to help others, this can also be a problem with photo resistors and other such low resistance sensors.

Basically, the problem boils down to the low resistance of the sensor when reading (Ordinarily 1k ohms, when event occurs it jumps to 4k ohms with a variance of a few hundred ohms). This is a significant problem since I need the reading to only draw 1 - 9 micro amps.

To further complicate things, I wanted to read this as a digital value to tell when an event occurs, so that the microcontroller can go to sleep and wake on an event.

I'm open to any type of circuit design.

  • \$\begingroup\$ How accurately do you need to read this? \$\endgroup\$ – RoyC Feb 8 '17 at 17:08
  • \$\begingroup\$ Not very accurately, but the sensor must be read instantaneously when the threshold is reached. \$\endgroup\$ – Daniel Feb 8 '17 at 17:25

Use the sensor as the top resistor of a voltage divider. The resistance of the other should be the sensor resistance at which you want the most resolution.

Connect the voltage divider between the same power and ground that the micro is running from. The result is a voltage that goes up the more the sensor is pressed. Connect this into the A/D input of the micro, and the rest is firmware.

Note that the actual supply voltage cancels out. This is what is called a ratiometric measurement. For infinite to 0 sensor resistance, the divider output goes from ground to Vdd. The A/D converts to a digital value relative to the same 0 to Vdd full scale range.

If you only need to occasionally read the sensor, you can connect the divider top end to a digital output of the micro instead of Vdd. The divider then only draws current when this digital output is high.

To wake up on a particular threshold, sleep the micro and periodically wake. On wakeup, the micro turns on the sensor and A/D, waits a little while for things to stabilize and the A/D to acquire the signal, start the A/D converting, shut down the sensor, get the digital value, and decide whether to go back to sleep or not based on the value.

Let's say this wake time takes 20 µs (should really be less). If that is done every 200 ms, for example, then only 1/10,000 of the wakeup current is drawn on average, but the wakeup still appears nearly instantaneous in human time. For example, let's say the micro draws 10 mA when awake. The average current draw while waiting for the threshold is only 1 µA.

| improve this answer | |
  • 1
    \$\begingroup\$ @Roy: As I showed, you can reduce the average current by running the sensor intermittently. Basically, I am saying to do it a long intervals. I said to switch the top side of the divider, but switching the bottom would work just as well. The way it helps is to point out the possibility of intermittent operation, and a example that uses plausible values to get into the uA range. \$\endgroup\$ – Olin Lathrop Feb 8 '17 at 17:12
  • \$\begingroup\$ Apologies missed your edit somehow. \$\endgroup\$ – RoyC Feb 8 '17 at 17:18
  • \$\begingroup\$ This seems like it should be a good solution. Thanks! \$\endgroup\$ – Daniel Feb 8 '17 at 17:30

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.