Amplify signal from FSR?

Hey guys - just curious if it is possible to amplify the signal from an FSR in order to get more accurate or precise readings.

I'm extremely new to arduinos and electrical engineering in general - so please don't tear into me too hard on the subject lol.

What I'm trying to achieve is essentially there is a spring pushing down on a surface. I want to measure the force being put on that surface. The components need to fit in about a 3/4 inch wide by 2 inch long housing. Heigh is irrelevant. As more weight is put on the spring - I would like to register that with an FSR.

I Looked at using a Load Cell but they look like they may be a bit too bulky for what I need. I don't need accurate measurements as far as weight - I just need to measure if the force being applied to the spring is changing.

I bought a 25lb FSR but it looks like the returned data only changes after about a pound of force is added and then every pound after. The force I need to measure needs to be much more sensitive than that. Like maybe in grams if that's possible. Again though, I don't need the actual weight, just the sensitivity and accuracy.

Any help would be greatly appreciated!

Also open to any other ideas that can help sense spring travel or spring load. I was looking at possibly a string attached to a retractable spring attached to a potentiometer or rotary encoder. So essentially the main spring would pull the string upwards and when more force was added that pushed the spring downwards the string would retract via that retractable spring. Spinning the encoder or potentiometer back and forth. but it looks like any premade devices like that cost upwards of a hundred bucks. May be able to do a lidar but not sure about power consumption with something like that.

If you think about your question a bit, you will realize that "amplifying" a signal also amplifies the errors in that signal. The only to make a signal more accurate is to make it so at it's source.

Paul

I bought a 25lb FSR but it looks like the returned data only changes after about a pound of force is added and then every pound after

Describe how you did that: mechanical arrangement, circuit details, code, etc. and perhaps forum members can suggest improvements.

See the "How to use the forum" post for instructions on posting.

I mean I don't really know how to describe it very well and can't draw a circuit because I have literally zero experience with electrical engineering. But maybe these pictures can explain my setup? On the FSR there is 3 pins and im not sure what the middle pin is for. That could be part of my issue I guess.

Essentially what I have going on here is when I apply pressure to the FSR it is supposed to detect that pressure and output that to console as well as adjust the brightness of an LED(this is just for testing). However when I purchased it- it said the FSR would detect anything from 0 to 25lbs of pressure and I have to push VERY hard to get it to even register.



EDIT: For some reason the images aren't showing up in the image tags so I attached them to the post.
Also - here is the product page that I purchased from

and here is the data sheet of the FSR

Please edit your post to

(1) include a link to the product page or data sheet for the FSR and

(2) post the images in line, as described here.

Edited the post with what you requested jremington.

Thanks, but we still need to know the details on how you wired it up. A photo of a breadboard tells us nothing.

A link to the wiring diagram you used, or a hand drawn diagram of your own wiring would be helpful. We need to know the component values.

Post the code, using code tags, as described in "How to use the forum". You have to provide us with information if we are to be of any help.

Have you carefully read through the FSR manual, linked on the Sparkfun product page? Read the Sparkfun "FSR hookup tutorial"?

https://learn.sparkfun.com/tutorials/force-sensitive-resistor-hookup-guide

I hooked everything up exactly how he did in the video below. I'm not sure how I can draw a wiring diagram as i've mentioned before - I have zero experience as an electrical engineer. I literally just copied what the dude did in the tutorial. As far as the code goes - I do have that. And yes I have read the hookup guide and believe I have everything hooked up properly.

/* FSR testing sketch. 
 
Connect one end of FSR to 5V, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground
Connect LED from pin 11 through a resistor to ground 
 
For more information see www.ladyada.net/learn/sensors/fsr.html */
 
int fsrAnalogPin = 0; // FSR is connected to analog 0
int LEDpin = 11;      // connect Red LED to pin 11 (PWM pin)
int fsrReading;      // the analog reading from the FSR resistor divider
int LEDbrightness;
 
void setup(void) {
  Serial.begin(9600);   // We'll send debugging information via the Serial monitor
  pinMode(LEDpin, OUTPUT);
}
 
void loop(void) {
  fsrReading = analogRead(fsrAnalogPin);
  Serial.print("Analog reading = ");
  Serial.println(fsrReading);
 
  // we'll need to change the range from the analog reading (0-1023) down to the range
  // used by analogWrite (0-255) with map!
  LEDbrightness = map(fsrReading, 0, 1023, 0, 255);
  // LED gets brighter the harder you press
  analogWrite(LEDpin, LEDbrightness);
 
  delay(100);
}

The code you posted is completely useless for making measurements. All it does it light up an LED.

What you want to do is measure the resistance of the sensor, which can be converted directly into the total force using a graph or a lookup table, following this guide: Force Sensitive Resistor Hookup Guide - SparkFun Learn.

For R1 in the voltage divider (3.3K) you will probably want a much larger value, comparable to the FSR resistance value when lightly loaded.

Thanks for the input jremington.

So it lights up an LED but it also outputs the fsrAnalogPin data to Serial which is how I was reading the data. And all I get is "Analog reading = 0" and if I press it hard it changes to a 1, or 2, or 3, depending on how hard I press. I have to press it REALLY hard however.

I changed my code a bit and am converting the signal into grams however i'm not really looking for a specific weight reading. I just want to be able to register the very small changes in force rather than the actual force in weight applied. Like I could care less if ti output ohms, or grams, or pounds. It could be an absolutely arbitrary number from 1 to 1000 for all I care. As long as 1 means barely any force, and 1000 means a lot of force and I can register a number anywhere between. If any of that makes any sense.

The code you reference pretty much does exactly what I was doing except it converts the output into grams and ohms - which would be useful as well - it just seems like the sensor i'm using only has 10 "steps" of measurement. and doesnt output very granular data. Not sure if it is like this with all force sensors, or just the one I currently have.

Here's what I'd do:

  • learn how resistor dividers (voltage divider) work
  • learn how the Arduino ADC works
  • use a digital multimeter (if you don't have one, buy one) to determine the resistances of the sensor (by itself, unattached to anything) without any load on it and with the "design" load on it
  • using a range of values of R1, starting with the excellent recommendation in post #9, calculate (yes, using a calculator) the expected voltages on the Arduino pin (at the center of the resistor divider) and the associated range of ADC readings
  • by trial (or math, if you are crafty), pick an R1 that maximizes the range of ADC readings over the range of "no load" to "design load" resistances (this R1 will likely be near the mid-range of the sensor resistance values you measured)
  • with the selected R1, hook up the resistor divider and apply 5v to it; then use your DMM to measure the range of output voltages over the "no load" to "design load" range; if your measurements don't match your calculated voltages fairly well, then go back and figure out what's wrong
  • hook up the resistor divider to your Arduino, and see if the range of ADC readings matches your calculations fairly well; if they don't, go back and figure out what's wrong
    If that approach doesn't give you the sensitivity you need, then you should use the "recommended" op amp circuit in the sensor datasheet (actually, I'd start with the non-inverting one in the Tekscan guide...) Those will be harder for a novice to implement than a simple resistor divider.

PS: don't forget to use a puck