Back to Sensors & Actuators Series

Force Sensitive Resistor (FSR)

April 10, 2026 Wasil Zafar 8 min read

FSR deep dive — conductive polymer physics, voltage divider interfacing, calibration, Arduino code, and human interaction applications.

Contents

  1. Working Principle
  2. Electrical Characteristics
  3. Interfacing with MCU
  4. Calibration
  5. Code Example
  6. Real-World Applications
  7. Limitations

Working Principle

A Force Sensitive Resistor (FSR) is a polymer thick-film device that exhibits a decrease in resistance as force applied to its active surface increases. It consists of two layers: a conductive polymer layer with microscopic particles dispersed in a flexible substrate, and an interdigitated electrode pattern. When pressed, the conductive particles make more contact points, reducing resistance from >1 MΩ (no force) to as low as ~200 Ω (maximum force).

Analogy: Imagine a sponge filled with tiny metal balls. With no squeeze, the balls barely touch and electricity struggles to flow. As you squeeze harder, more balls press together, creating more paths for current — resistance drops.

Electrical Characteristics

ParameterFSR 402 (Interlink)
Force Range0.2 N – 20 N (~20 g – 2 kg)
Resistance (no force)>1 MΩ
Resistance (max force)~200 Ω
Force vs. ResistanceApproximately inverse — logarithmic
Repeatability±2% (single part)
Accuracy±5–25% (part-to-part variation)
Response Time<5 ms (mechanical)
Thickness~0.5 mm (flexible)
Operating Temperature−30 to +70 °C

Interfacing with an MCU

FSRs are analogue resistive devices — read them with a simple voltage divider connected to an ADC input. Use a fixed reference resistor in series with the FSR:

  • 10 kΩ: Best sensitivity in the light-to-medium force range (0.2–5 N)
  • 47 kΩ: Better sensitivity for very light touch (<1 N)
Voltage divider: Connect FSR between 5 V and A0. Connect a 10 kΩ resistor between A0 and GND. As force increases, FSR resistance drops and voltage at A0 rises.

Calibration

FSRs are not precision instruments — they detect force presence and approximate magnitude:

  • Threshold-based: Define ADC thresholds for "no press", "light", "medium", "firm" touch zones
  • Known-weight mapping: Place known weights (50 g, 100 g, 500 g, 1 kg) and record ADC values to build a lookup table
  • Logarithmic curve fit: Fit your measured data to find R0 and n in R = R0/Fn
  • Break-in: New FSRs may drift for the first 10–20 cycles; actuate several times before calibrating

Code Example

/*
 * FSR 402 Force Sensitive Resistor — Arduino
 * Wiring: FSR between 5V and A0, 10k from A0 to GND
 */
#define FSR_PIN A0
#define R_REF 10000.0   /* 10k reference resistor */
#define VCC 5.0

void setup() {
    Serial.begin(9600);
}

void loop() {
    int raw = analogRead(FSR_PIN);

    if (raw == 0) {
        Serial.println("No pressure detected");
    } else {
        /* Calculate FSR resistance from voltage divider */
        float voltage = raw * (VCC / 1023.0);
        float fsrR = R_REF * (VCC / voltage - 1.0);

        /* Approximate force (rough inverse relationship) */
        float conductance = 1000000.0 / fsrR;  /* uMho */
        float forceN;
        if (conductance <= 1000)
            forceN = conductance / 80.0;
        else
            forceN = (conductance - 1000) / 30.0;

        Serial.print("FSR R: ");
        Serial.print((long)fsrR);
        Serial.print(" Ohm  |  ~Force: ");
        Serial.print(forceN, 2);
        Serial.println(" N");
    }
    delay(200);
}

Real-World Applications

Human Interface & Wearable Devices

FSRs are ubiquitous in touch-sensitive interfaces: musical instrument pressure pads (electronic drums, MIDI controllers), prosthetic limb grip-force feedback, shoe insoles for gait analysis, robotic gripper grasp detection, and automotive seat-occupancy sensors. Their thin, flexible form factor makes them ideal for embedding in surfaces where buttons are impractical.

HMIWearablesRoboticsMusical

Limitations

  • Low accuracy: ±5–25% part-to-part variation. Not suitable for precise weight measurement (use HX711 + load cell).
  • Drift and hysteresis: Resistance shifts under sustained pressure and differs on press vs. release.
  • Non-linear response: Resistance vs. force is logarithmic, complicating absolute force calculation.
  • Wear: Repeated flexing or point loads can damage the conductive polymer over time.
  • Temperature sensitivity: Resistance drifts with temperature changes, ±1%/°C typical.