The output of a resistive pressure sensor (commonly called a Force Sensitive Resistor or FSR) is a variable resistance, not a direct voltage or digital signal. To read it with a microcontroller, you must wire it into a voltage divider circuit to produce an analog voltage (0-3.3V), then apply inverse-resistance math to convert the raw ADC reading into physical force (Newtons). While different models exist for specific load ranges, the Interlink Electronics FSR 402 is the definitive default choice for 90% of hobbyist, robotics, and IoT maker projects due to its 0.2N to 20N range and forgiving tolerance.

The Sensing Principle: Piezoresistive Polymers

Unlike metallic strain gauges that rely on the deformation of a conductive foil in a Wheatstone bridge, a resistive pressure sensor uses a specialized conductive polymer. In its resting state, the polymer matrix lacks continuous conductive pathways, resulting in an extremely high resistance (typically >10 MΩ). When mechanical force is applied to the sensor's active area, the polymer compresses. This compression forces the conductive particles closer together, creating new electrical pathways and causing the resistance to drop non-linearly, sometimes down to 1 kΩ or less under maximum rated load.

This mechanism makes FSRs incredibly thin (often <0.5 mm) and flexible, but it also introduces inherent physical quirks. Because the conductive pathways are formed by physical particle contact rather than rigid crystalline structures, the sensor exhibits hysteresis (the resistance return path differs from the press path) and mechanical creep (the resistance slowly drifts downward if a constant weight is left on the sensor for several minutes). Understanding these material limits is critical before you write a single line of calibration code.

Wiring and Pinout for Microcontrollers

Because the sensor is purely resistive, it is not polarized—you can swap the two legs without damaging the component. However, microcontrollers cannot read resistance directly; they read voltage. You must pair the FSR with a fixed pulldown resistor to create a voltage divider. The choice of the fixed resistor dictates your sensitivity curve. A 10 kΩ resistor provides the best middle-ground resolution for the 1N to 10N range.

FSR Voltage Divider Wiring Table
Sensor Leg Microcontroller Connection Circuit Node / Component Notes & Supply Range
Leg 1 VCC (3.3V or 5V) Power Rail Use 3.3V for ESP32/RPi Pico; 5V for Arduino Uno. Do not exceed 5V.
Leg 2 ADC Pin (e.g., GPIO 34) Junction of 10 kΩ Pulldown Connect a 10 kΩ resistor from this junction to GND.
Ground GND End of 10 kΩ Pulldown Ensure a common ground reference with the microcontroller.
Callout Tip: ESP32 ADC Non-Linearity
The ESP32's ADC is notoriously non-linear at the extreme top and bottom of its range (below 0.1V and above 3.1V). If you are using an ESP32, always use the analogReadMilliVolts() function instead of analogRead(). This function applies Espressif's factory eFuse calibration data to return a much more accurate millivolt reading, which is vital for the math in the next section.

The Math: Converting Raw ADC Readings to Force

To get from a raw microcontroller reading to a physical unit like Newtons, we must pass through three distinct mathematical stages: ADC to Voltage, Voltage to Resistance, and Resistance to Force. According to the Interlink FSR Integration Guide, the relationship between force and resistance is highly non-linear, but the relationship between Force and Conductance (1 / Resistance) is remarkably linear.

Step 1: ADC to Voltage
If using an Arduino (10-bit ADC, 5V reference): V_out = raw_reading * (5.0 / 1023.0)
If using ESP32 with analogReadMilliVolts(): V_out = milliVolts / 1000.0

Step 2: Voltage to Resistance
Using the voltage divider formula rearranged to solve for the FSR:
R_fsr = R_fixed * ((V_cc / V_out) - 1.0)
Where R_fixed is your 10,000 Ω pulldown resistor, and V_cc is your supply voltage (e.g., 3.3V).

Step 3: Resistance to Force (Newtons)
First, calculate Conductance (G) in units of 1/kΩ:
G = 1.0 / (R_fsr / 1000.0)
Next, apply the linear regression formula derived from the sensor's datasheet: Force = (G - b) / m. For a standard FSR 402, an approximate slope (m) is 0.00005 and the y-intercept (b) is roughly 0.0001. For precision work, you must calibrate these two constants using known weights.

// Complete ESP32 C++ Snippet for FSR 402 Force Calculation
const int FSR_PIN = 34;
const float V_CC = 3.3;
const float R_FIXED = 10000.0;

// Calibration constants (Calibrate with known weights for exact values)
const float SLOPE_M = 0.000055; 
const float INTERCEPT_B = 0.0001;

void setup() {
  Serial.begin(115200);
  analogReadResolution(12); // Ensure 12-bit on ESP32
}

void loop() {
  int mV = analogReadMilliVolts(FSR_PIN);
  float v_out = mV / 1000.0;
  
  float r_fsr = 0;
  if (v_out > 0.05) { // Prevent divide-by-zero and filter noise floor
    r_fsr = R_FIXED * ((V_CC / v_out) - 1.0);
  }
  
  float conductance = 1.0 / (r_fsr / 1000.0); // G in 1/kOhm
  float force_N = 0;
  
  if (conductance > INTERCEPT_B) {
    force_N = (conductance - INTERCEPT_B) / SLOPE_M;
  }
  
  Serial.printf("Voltage: %.2f V | Resistance: %.0f Ohm | Force: %.2f N\n", v_out, r_fsr, force_N);
  delay(250);
}

Calibration, Interference, and Signal Conditioning

Raw FSR data is notoriously noisy and prone to environmental interference. If you are building a system that requires reliable physical thresholds (like a robotic gripper release mechanism or a smart bed-occupancy sensor), you must address three specific failure modes:

  • Electromagnetic Interference (EMI): Because the voltage divider outputs a high-impedance analog signal, long wires act as antennas, picking up 50/60 Hz mains hum. If your wires exceed 12 inches, use shielded twisted-pair cable. Alternatively, add a 0.1 µF ceramic capacitor in parallel with the 10 kΩ pulldown resistor. This creates a hardware low-pass RC filter with a cutoff frequency of ~160 Hz, smoothing out high-frequency electrical noise before it hits the ADC.
  • Mechanical Creep: If you place a 5 kg weight on an FSR 402, the force reading will slowly increase by 5% to 10% over the first 5 minutes as the polymer relaxes. Fix: Do not use FSRs for long-term static weighing scales. Use them for dynamic event detection (e.g., detecting a footstep or a button press). If static measurement is required, sample the reading immediately upon load application.
  • Temperature Drift: Conductive polymers shift resistance by roughly 1% to 2% per 10°C change in ambient temperature. For indoor IoT projects, this is negligible. For outdoor or automotive applications, you must include a thermistor in your circuit and apply a temperature-compensation multiplier in your firmware.

Decision Tree: Which Sensor Should You Buy?

The market is flooded with generic, unbranded 'pressure pads' that lack datasheets and exhibit massive unit-to-unit variance. Always buy from manufacturers that publish conductance graphs. Use the SparkFun Force Sensitive Resistor Hookup Guide as a baseline for standard maker components, but follow this decision path to select the exact part number for your bill of materials:

Sensor Selection Decision Matrix
Application Scenario Required Load Range Precision Need Recommended Part Number
Medical pulse monitoring, ultra-light touch interfaces 0.01 N to 1 N High (±5% repeatability) Tekscan FlexiForce A201
Robotics grippers, MIDI foot pedals, smart chair mats 0.2 N to 20 N Medium (±10% repeatability) Interlink FSR 402
Heavy industrial foot switches, automotive seat occupancy 10 N to 100 N Low (Threshold detection only) Interlink FSR 408
The Default Recommendation
If your project does not strictly require medical-grade precision or heavy industrial load bearing, buy the Interlink Electronics FSR 402 (Part # 30-81012). At roughly $7 to $9 per unit from authorized distributors like DigiKey or Mouser, it offers the best balance of durability, documented math models, and physical size (0.6" sensing diameter). Avoid unbranded eBay/AliExpress clones; their polymer degradation rates are unpredictable, and they will fail calibration within weeks of use.