Skip to Content

Tutorial de Resistencia Sensora de Fuerza (FSR) con Arduino

Tutorial de Resistencia Sensora de Fuerza (FSR) con Arduino

Los FSR son sensores de presión súper robustos que se usan en todo tipo de industrias. Los encontrarás en baterías electrónicas, teléfonos móviles, dispositivos de juego portátiles y muchos otros dispositivos electrónicos portátiles. Estos sensores son fáciles de usar y excelentes para detectar presión.

En este tutorial aprenderás cómo funciona un FSR y cómo usarlo con Arduino. He incluido 3 ejemplos con un diagrama de conexiones y código para que puedas empezar a experimentar con tu sensor.

Primero te mostraré el funcionamiento básico del sensor. Luego, veremos cómo usar este sensor como un interruptor de palanca. Por último, te mostraré cómo usar LEDs para indicar la cantidad de presión aplicada al sensor.

Materiales

Componentes de hardware

fsr-402-round Sensor FSR 402 (redondo) × 1 Amazon
fsr-406-square Sensor FSR 406 (cuadrado) × 1 Amazon
Arduino Uno Rev 3 Arduino Uno Rev3 × 1 Amazon
Protoboard × 1 Amazon
Cables jumper ~ 10 Amazon
resistor Caja surtida de resistencias (ver wiring para valores) × 1 Amazon
red-led LEDs ~ 10 Amazon
Cable USB tipo A/B × 1 Amazon

Herramientas

multimeter Multímetro Amazon

Software

Arduino IDEArduino IDE

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

¿Cómo funciona un FSR?

La resistencia de un FSR depende de la presión aplicada en el área sensible. Cuanta más presión apliques, menor será la resistencia. El rango de resistencia es bastante amplio: > 10 MΩ (sin presión) hasta ~ 200 Ω (presión máxima). La mayoría de los FSR pueden detectar fuerzas en el rango de 100 g a 10 kg.

Construcción básica

Un FSR consta de dos membranas y un adhesivo separador. Las membranas conductoras están separadas por una delgada capa de aire cuando no se aplica presión. Una de las membranas contiene dos trazos que van desde la cola hasta el área sensible (la parte redonda). Estos trazos están entrelazados, pero no se tocan. La otra membrana está recubierta con una tinta conductora. Al presionar el sensor, la tinta conecta los dos trazos con una resistencia que depende de la presión.

FSR Construction
Construcción del FSR

¿Cómo leer un FSR?

El gráfico a continuación muestra la curva de resistencia frente a fuerza para el sensor FSR 402. Ten en cuenta que los datos están en escala logarítmica. La respuesta no es lineal. Como puedes ver, hay una gran caída en la resistencia cuando se aplica una pequeña cantidad de presión. Después de eso, la resistencia es inversamente proporcional a la fuerza aplicada. Alrededor de 10 kg (no mostrado en el gráfico) el sensor se satura y un aumento en la fuerza produce poca o ninguna disminución en la resistencia.

FSR 402 Resistance vs Force curve
Curva de resistencia vs fuerza para FSR 402

Circuito divisor de voltaje

Para medir la fuerza aplicada con un Arduino, necesitas construir un circuito divisor de voltaje con el FSR y una resistencia pull-down. Este circuito crea una salida de voltaje variable que puede ser leída por la entrada ADC (convertidor analógico a digital) del microcontrolador.

Voltage divider circuit Interlink FSR 402
Circuito divisor de voltaje y curvas de Vout vs fuerza para diferentes valores de R. Los datos representan la salida para el FSR Interlink 402 con V+ igual a 5 V. Referencia: guía de integración Interlink.

Seleccionar el tamaño correcto de la resistencia para tu sensor puede ser un poco complicado y depende del rango de fuerza que quieras medir.

El gráfico anterior muestra las curvas de Vout vs fuerza para diferentes valores de R (la resistencia pull-down). Un  resistor de 10 kΩ funciona bien si quieres usar el sensor en todo su rango de fuerza (100 g a 10 kg).

Ejemplo de cálculo

El voltaje de salida (Vout) que medimos con el Arduino se describe con la siguiente ecuación:

Vout = Vcc x R / (R + Rfsr)

Así que el voltaje es inversamente proporcional a la resistencia del FSR. Ten en cuenta que el voltaje de salida que mides es la caída de voltaje a través de la resistencia pull-down, no a través del FSR.

Cuando no se aplica fuerza, la resistencia del FSR será muy alta, toma 10 MΩ como ejemplo. Usé una resistencia pull-down de 10 kΩ y un Vcc de 5 V para este tutorial, lo que resulta en la siguiente salida cuando no se aplica fuerza:

Vout = 5 V x 10 kΩ / (10 kΩ + 10 MΩ) = 0.005 V

Así que casi 0 V. Si presionas muy fuerte el FSR, la resistencia bajará a aproximadamente 200 Ω. Esto resulta en el siguiente voltaje de salida:

Vout = 5 V x 10 kΩ / (10 kΩ + 200 Ω) = 4.9 V

Como ves, deberías poder medir un voltaje de salida entre 0 y 4.9 V dependiendo de la fuerza que apliques al sensor.

Especificaciones del FSR

La tecnología usada en los FSR está patentada por Interlink Electronics, que opera desde 1985. Los tipos más comunes de FSR que encontrarás son los Interlink FSR 402  y FSR 406.

Estas son las especificaciones del sensor redondo 402 que usé en este tutorial.

Especificaciones del FSR 402

Fuerza de activación ~0.1N mínimo
Rango de sensibilidad a la fuerza ~0.1N – 100N
Rango de resistencia >10 MΩ (circuito abierto) – ~200Ω
Resolución de fuerza Continua (analógica)
Repetibilidad de fuerza ± 6%
Área activa Ø 12.7 mm
Espesor nominal 0.55 mm
Recorrido del interruptor 0.15 mm
Vida útil > 10 millones de activaciones
Alimentación ¡Cualquiera! Usa menos de 1 mA de corriente, dependiendo de la resistencia usada en el divisor de voltaje.
Costo Check price

Para más información, puedes consultar la hoja de datos aquí. También incluye datos para otros sensores de la Serie 400.

Conexión a un FSR

Puedes conectar fácilmente un FSR usando una protoboard.

La forma más sencilla de conectar un FSR es usar una protoboard. Esto funciona muy bien para prototipos y pruebas. Si necesitas una solución más permanente, te recomiendo mucho el  Amphenol FCI Conector Clincher. Solo tienes que sujetar estos conectores alrededor de los trazos plateados del conector y conectar fácilmente cables jumper o Dupont.

Amphenol clincher connector
Conector Clincher Amphenol FCI

Advertencia

NO se recomienda soldar directamente sobre los trazos plateados expuestos del sensor. El sustrato se derretirá durante la soldadura y la unión no será firme. No dobles ni pliegues la cola del FSR si la estás flexionando; esto puede causar rupturas en los trazos plateados impresos. Interlink sugiere un radio mínimo de curvatura de 2.5 mm.

Probando un FSR

La forma más fácil de verificar si tu FSR funciona correctamente es conectarlo a un multímetro. Usé cables con pinzas de cocodrilo para conectar el multímetro a los terminales expuestos del sensor. Pon tu sensor en modo de medición de resistencia (Ω) y deberías ver cómo cambia el valor de resistencia al presionar el sensor.

Testing an FSR Force Sensitive Resistor
Midiendo el cambio de resistencia al aplicar carga.

Debido a que el rango de resistencia es tan amplio (200 kΩ a 200 Ω), es mejor usar un multímetro con función autorango. Si no tienes uno, simplemente prueba con los ajustes de rango. 200 kΩ debería permitirte ver la mayor parte del rango.

Conexiones – Conectar un sensor de fuerza (FSR) a Arduino UNO

Ahora que sabes que el sensor funciona correctamente, es hora de conectarlo al Arduino. Usaremos una protoboard y cables jumper, ya que es la forma más fácil de prototipar un circuito.

Como se mencionó en la introducción, necesitas crear un circuito con una resistencia pull-down de 10 kΩ.

El diagrama de conexiones a continuación muestra cómo conectar el sensor FSR al Arduino. Ten en cuenta que un FSR no tiene polaridad, igual que las resistencias normales. No hay lado positivo o negativo, solo conéctalo en la orientación que quieras.

FSR with Arduino wiring diagram
Diagrama de conexiones FSR con Arduino UNO

Conecta uno de los terminales del FSR a la alimentación (5 V, aunque 3.3 V también funciona bien) y el otro terminal a la entrada analógica del Arduino (A0). La resistencia pull-down de 10 kΩ se conecta entre GND y A0.

Example 1 Connecting an FSR to Arduino UNO
Sensor de fuerza en protoboard

1. Código de ejemplo para FSR con Arduino – Lectura de voltaje analógico

Ahora que has conectado el sensor, puedes subir el siguiente código de ejemplo usando el Arduino IDE.

Este sketch leerá los datos del sensor desde la entrada analógica del Arduino y mostrará la salida en el monitor serial.

Como se mencionó antes, el voltaje de salida del sensor estará entre 0 V (sin presión) y aproximadamente 5 V (presión máxima). Las placas Arduino tienen un convertidor analógico a digital de 10 bits y múltiples canales. Esto significa que mapeará el voltaje de entrada entre 0 y 5 V a valores enteros entre 0 y 1023. Así que deberías ver un valor entre 0 y 1023 en el monitor serial, dependiendo de la fuerza con la que aprietes el sensor.

/* Simple example code for Force Sensitive Resistor (FSR) 
  with Arduino. More info: https://www.makerguides.com */

// Define FSR pin:
#define fsrpin A0

//Define variable to store sensor readings:
int fsrreading; //Variable to store FSR value

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Read the FSR pin and store the output as fsrreading:
  fsrreading = analogRead(fsrpin);

  // Print the fsrreading in the serial monitor:
  // Print the string "Analog reading = ".
  Serial.print("Analog reading = ");
  // Print the fsrreading:
  Serial.print(fsrreading);

  // We can set some threshholds to display how much pressure is roughly applied:
  if (fsrreading < 10) {
    Serial.println(" - No pressure");
  } else if (fsrreading < 200) {
    Serial.println(" - Light touch");
  } else if (fsrreading < 500) {
    Serial.println(" - Light squeeze");
  } else if (fsrreading < 800) {
    Serial.println(" - Medium squeeze");
  } else {
    Serial.println(" - Big squeeze");
  }

  delay(500); //Delay 500 ms.
}

Deberías ver la siguiente salida en el monitor serial:

FSR serial monitor
Salida del monitor serial

Asegúrate de que el monitor serial también esté configurado a una velocidad de 9600 baudios.

2. Usar un sensor de fuerza (FSR) como interruptor de palanca

En este ejemplo usarás el sensor FSR como un interruptor de palanca. Puedes usar este programa para controlar todo tipo de funciones, en este caso para encender y apagar un LED.

Tendrás que añadir un LED con una resistencia al circuito, como se muestra en el diagrama a continuación.

Force sensitive resistor (FSR) with Arduino and LED wiring diagram
Diagrama de conexiones FSR con Arduino y LED

El terminal negativo del LED (el más corto) se conecta a GND a través de una resistencia y el terminal positivo al pin digital 2. El valor de la resistencia depende del color del LED que uses. Puedes usar los siguientes valores como guía:

  • Azul, verde, blanco o UV: 68 Ω
  • Rojo, amarillo o amarillo-verde: 150 Ω

Si no tienes estos valores de resistencia, intenta encontrar uno cercano. También puedes poner varias resistencias en serie para obtener el valor correcto.

El sketch a continuación alternará el LED encendido y apagado cuando presiones el FSR. Observa el valor del pin de entrada analógica y cambia el estado del LED cuando el valor supera 500. Esto significa que una presión muy ligera no será detectada.

Este ejemplo también elimina el rebote de la entrada y está basado en el  Arduino Switch  tutorial.

/* Example code to use Force Sensitive Resistor (FSR) 
   as toggle switch to control LED. 
   More info: https://www.makerguides.com */

// Define pins:
#define fsrpin A0
#define ledpin 2

// Define variables:
int fsrreading; // The current reading from the FSR
int state = HIGH; // The current state of the output pin
int previous = 0; // The previous reading from the FSR
// The follow variables are long's because the time, 
// measured in miliseconds, will quickly become a 
// bigger number than can be stored in an int
long time = 0;  // The last time the output pin was toggled
long debounce = 40; // The debounce time, increase if the output flickers

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Set ledpin as output:
  pinMode(ledpin, OUTPUT);
}

void loop() {
  // Read the FSR pin and store the output as fsrreading:
  fsrreading = analogRead(fsrpin);

  // Print the fsrreading in the serial monitor:
  Serial.println(fsrreading);

  // If the input just went from below 500 to above 500 
  // and we've waited long enough to ignore any noise on the circuit, 
  // toggle the output pin and remember the time:
  if (fsrreading > 500 && previous < 500 && millis() - time > debounce) {
    if (state == HIGH)
      state = LOW;
    else
      state = HIGH;
    time = millis();
  }

  digitalWrite(ledpin, state);

  previous = fsrreading;
}

3. Controlar múltiples LEDs con un FSR como sensor de presión

El siguiente ejemplo facilita ver cuánta presión aplicas al FSR. Cuanta más presión apliques, más LEDs se encenderán.

Puedes conectar los LEDs de la misma forma que antes, mira el diagrama de conexiones a continuación. Los LEDs están conectados a los pines digitales 2 a 7. El FSR también está conectado igual que antes.

FSR-with-many-LEDS-and-Arduino-wiring-diagram-schematic-pinout
Diagrama de conexiones FSR con múltiples LEDs y Arduino

Debido a que el voltaje de salida del FSR no es lineal, configuré un rango personalizado para que cada LED se encienda. Puede que necesites ajustar esto ligeramente para tu propio sensor.

/* Arduino example code to control multiple LEDs with a 
   Force Sensitive Resistor (FSR) as pressure sensor. 
   More info: https://www.makerguides.com */

// Define pins:
#define fsrpin A0
#define led1 2
#define led2 3
#define led3 4
#define led4 5
#define led5 6
#define led6 7

// Define variables:
int fsrreading;

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Set LED pins as output:
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
}

void loop() {
  // Read the FSR pin and store the output as fsrreading:
  fsrreading = analogRead(fsrpin);

  // Print the fsrreading in the serial monitor:
  Serial.println(fsrreading);

  // Control the LEDs:
  if (fsrreading > 200) {
    digitalWrite(led1, HIGH);
  }
  else digitalWrite(led1, LOW);
  if (fsrreading > 450) {
    digitalWrite(led2, HIGH);
  }
  else digitalWrite(led2, LOW);
  if (fsrreading > 550) {
    digitalWrite(led3, HIGH);
  }
  else digitalWrite(led3, LOW);
  if (fsrreading > 650) {
    digitalWrite(led4, HIGH);
  }
  else digitalWrite(led4, LOW);
  if (fsrreading > 800) {
    digitalWrite(led5, HIGH);
  }
  else digitalWrite(led5, LOW);
  if (fsrreading > 900) {
    digitalWrite(led6, HIGH);
  }
  else digitalWrite(led6, LOW);
}

Archivos CAD

A continuación puedes encontrar todos los archivos CAD para los sensores de la Serie 400 de Interlink.

Conclusión

En este artículo te he mostrado cómo funciona un FSR y cómo puedes usarlo con Arduino.

Si tienes alguna pregunta, sugerencia o crees que falta algo en este tutorial, por favor deja un comentario abajo.