Tutorial sobre la resistencia de detección de fuerza (FSR) con Arduino

Tutorial sobre la resistencia de detección de fuerza (FSR) con Arduino

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

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

En primer lugar, le mostraré el funcionamiento básico del sensor. A continuación, veremos cómo utilizar este sensor como un interruptor de palanca. Por último, le mostraré cómo puede utilizar los LED para mostrar la cantidad de presión aplicada al sensor.

Si desea conocer otros sensores, consulte los siguientes artículos:


Suministros

Componentes de hardware

fsr-402-roundSensor FSR 402 (redondo)× 1Amazon
fsr-406-cuadradoSensor FSR 406 (cuadrado)× 1Amazon
Arduino Uno Rev 3Arduino Uno Rev3× 1Amazon
Tablero de pruebas× 1Amazon
Cables de puente~ 10Amazon
resistenciaCaja de surtido de resistencias (ver valores en el cableado )× 1Amazon
rojo-ledLEDs~ 10Amazon
Cable USB tipo A/B× 1Amazon

Herramientas

multímetroMultímetroAmazon

Software

Arduino IDEArduino IDE

Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.


¿Cómo funciona un FSR?

La resistencia de un FSR depende de la presión que se aplique a la zona de detección. Cuanto más presión se aplique, menor será la resistencia. En realidad, el rango de resistencia es bastante amplio: > 10 MΩ (sin presión) a ~ 200 Ω (presión máxima). La mayoría de los FSR pueden detectar una fuerza en el rango de 100 g a 10 kg.

Construcción básica

Un FSR está formado por dos membranas y un adhesivo espaciador. Las membranas conductoras están separadas por un fino espacio de aire cuando no se aplica presión. Una de las membranas contiene dos trazos que van desde la cola hasta la zona de detección (la parte redonda). Estas trazas están entrelazadas, pero no se tocan. La otra membrana está recubierta de una tinta conductora. Cuando se presiona el sensor, la tinta pone en cortocircuito las dos trazas con una resistencia que depende de la presión.

Construcción FSR
Construcción FSR

¿Cómo se lee un FSR?

El siguiente gráfico muestra la curva de resistencia frente a la fuerza del sensor FSR 402. Obsérvese que los datos están representados en escalas logarítmicas. La respuesta no es lineal. Como puede ver, hay una enorme caída de la resistencia cuando se aplica una pequeña cantidad de presión. Después, la resistencia es inversamente proporcional a la fuerza aplicada. Alrededor de 10 kg (no se muestra en el gráfico) el sensor está saturado y un aumento de la fuerza produce poca o ninguna disminución de la resistencia.

FSR 402 Curva de resistencia frente a la fuerza
Curva de resistencia frente a la fuerza para el FSR 402

Circuito divisor de tensión

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

Circuito divisor de tensión Interlink FSR 402
Circuito divisor de tensión y curvas Vout vs Force para diferentes valores de R. Los datos representan la salida para el Interlink 402 FSR y V+ igual a 5 V. Referencia: Guía de integración de Interlink.

La selección del tamaño correcto de la resistencia para su sensor puede ser un poco complicada y depende del rango de fuerza que quiera medir.

El gráfico anterior muestra las curvas Vout vs Fuerza para diferentes valores de R (la resistencia pull-down). Una resistencia de 10 kΩ funciona bien si quieres utilizar el sensor en todo su rango de fuerza (de 100 g a 10 kg). Me gusta comprar estas cajas de surtido en Amazon para tener siempre una gama de resistencias a mano.

Ejemplo de cálculo

La tensión de salida (Vout) que medimos con el Arduino se describe mediante la siguiente ecuación:

Vout = Vcc x R / (R + Rfsr)

Así que la tensión es inversamente proporcional a la resistencia del FSR. Tenga en cuenta que la tensión de salida que se mide es la caída de tensión a través de la resistencia pull-down, no a través del FSR.

Cuando no se aplica ninguna fuerza, la resistencia del FSR será realmente alta, toma 10 MΩ como ejemplo. He utilizado 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 ninguna fuerza:

Vout = 5 V x 10 kΩ/ (10 kΩ + 10 MΩ) = 0,005 V

Por lo tanto, casi 0 V. Si se presiona muy fuerte el FSR, la resistencia bajará a aproximadamente 200 Ω. Esto da como resultado la siguiente tensión de salida:

Vout = 5 V x 10 kΩ/ (10 kΩ + 200 Ω) = 4,9 V

Como puedes ver, deberías poder medir una tensión de salida entre 0 y 4,9V dependiendo de la cantidad de fuerza que apliques al sensor.

Especificaciones del FSR

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

Estas son las especificaciones del sensor redondo 402 que he utilizado en este tutorial.

Especificaciones del FSR 402

Fuerza de accionamiento~0,1N mínimo
Rango de sensibilidad a la fuerza~0,1N - 100N
Rango de resistencia>10 MΩ (circuito abierto) - ~200Ω
Resolución de la fuerzaContinuo (analógico)
Repetibilidad de la fuerza± 6%
Área activaØ 12,7 mm
Espesor nominal0,55 mm
Viaje de ida y vuelta0,15 mm
De por vida> 10 millones de accionamientos
Fuente de alimentaciónCualquiera. Utiliza menos de 1mA de corriente, dependiendo de la resistencia utilizada en el divisor de tensión.
CosteComprobar el precio

Para más información, puede consultar la hoja de datos aquí. También incluye datos de los demás sensores de la serie 400.


Conexión a una FSR

Se puede conectar fácilmente a un FSR utilizando una protoboard.

La forma más sencilla de conectar un FSR es utilizar una protoboard. Esto funciona muy bien para la creación de prototipos y pruebas. Si necesitas una solución más permanente, te recomiendo el conector FCI Clincher de Amphenol. Puedes sujetar estos conectores alrededor de las trazas plateadas del conector y conectar fácilmente los cables jumper o dupont.

Conector de cubierta Amphenol
Conector FCI Clincher de Amphenol

Advertencia

NO se recomienda soldar directamente a las trazas de plata expuestas del sensor. El sustrato se derretirá durante la soldadura y la unión soldada no se mantendrá. No doble ni arrugue la cola del FSR si lo está doblando; esto puede causar roturas en las trazas de plata impresas. Interlink sugiere un radio de curvatura mínimo de 2,5 mm.


Prueba de un FSR

La forma más fácil de ver si su FSR está funcionando correctamente es conectarlo a un multímetro. Utilicé cables de prueba tipo cocodrilo para conectar el multímetro a los cables expuestos del sensor. Poné tu sensor en modo de medición de resistencia (Ω) y deberías ver cómo cambia el valor de la resistencia cuando presionás el sensor.

Prueba de una resistencia sensible a la fuerza FSR
Medir el cambio de resistencia al aplicar una carga.

Como el rango de resistencia es tan grande (de 200 kΩ a 200 Ω), es mejor utilizar un multímetro con función de rango automático. Si no tienes uno de esos, simplemente juega con los ajustes de rango. 200 kΩ debería permitirte ver la mayor parte del rango.


Cableado - Conexión de una resistencia de detección de fuerza (FSR) a Arduino UNO

Ahora que sabes que el sensor funciona correctamente, es el momento de conectarlo al Arduino. Utilizaremos una protoboard y cables de puente, ya que es la forma más fácil de crear un prototipo de circuito.

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

El siguiente diagrama de cableado muestra cómo conectar el sensor FSR al Arduino. Tenga en cuenta que un FSR no está polarizado, al igual que las resistencias normales. No hay lado positivo o negativo, simplemente conéctalos en la orientación que quieras.

FSR con diagrama de cableado de Arduino
FSR con Arduino UNO diagrama de cableado

Conecta uno de los cables del FSR a la alimentación (5 V, pero 3,3 V también funciona bien) y el otro cable a la entrada analógica del Arduino (A0). La resistencia pulldown de 10 kΩ se conecta entre GND y A0.

Ejemplo 1 Conexión de un FSR a Arduino UNO

1. FSR con código de ejemplo de Arduino - Lectura de tensión analógica

Ahora que has cableado el sensor, puedes cargar el siguiente código de ejemplo utilizando el IDE de Arduino.

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

Como se ha mencionado anteriormente, la tensión de salida del sensor estará entre 0 V (sin presión aplicada) y aproximadamente 5 V (presión máxima aplicada). Las placas Arduino contienen un convertidor analógico-digital multicanal de 10 bits. Esto significa que asignará la tensión 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 de serie, dependiendo de lo fuerte 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ía ver la siguiente salida en el monitor de serie:

Monitor de serie FSR
Salida de monitorización en serie

Asegúrese de que el monitor en serie también está ajustado a una velocidad de transmisión de 9600.


2. Uso de una resistencia de detección de fuerza (FSR) como interruptor de palanca

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

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

Resistencia sensible a la fuerza (FSR) con Arduino y diagrama de cableado del LED
FSR con Arduino y diagrama de cableado del LED

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

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

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

El boceto que se muestra a continuación encenderá y apagará el LED cuando se pulse sobre el FSR. Mira el valor del pin de entrada analógica y cambia el estado del LED cuando el valor excede de 500. Esto significa que una pulsación muy ligera no será detectada.

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

/* 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 varios LEDs con un FSR como sensor de presión

El ejemplo siguiente permite ver fácilmente la presión que se aplica al FSR. Cuanta más presión se aplique, más LEDs se encenderán.

Puedes cablear los LEDs de la misma manera que antes, ver el diagrama de cableado de abajo. Los LEDs se conectan a los pines digitales 2 a 7. El FSR también se conecta de la misma manera que antes.

FSR-con-mano-LEDS-y-Arduino-diagrama-cableado-esquema-pinout
FSR con múltiples LEDs y diagrama de cableado de Arduino

Debido a que el voltaje de salida del FSR no es lineal, establecí un rango personalizado para que cada LED se encienda. Es posible que tenga que ajustar esto ligeramente para su 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 encontrará todos los archivos CAD de los sensores de la serie interlink 400.


Conclusión

En este artículo, te he mostrado cómo funciona un FSR y cómo puedes utilizarlo con Arduino. Espero que lo hayas encontrado útil e informativo. Si lo has hecho, ¡compártelo con un amigo al que también le guste la electrónica!

Me encantaría saber qué proyectos planeas construir (o ya has construido) con un FSR. Si tienes alguna pregunta, sugerencia, o si crees que faltan cosas en este tutorial, por favor deja un comentario abajo.

Tenga en cuenta que los comentarios son retenidos por la moderación para evitar el spam.

Beth

Lunes 20 de junio de 2022

Gracias por este tutorial. Estoy construyendo un sensor de presión para un artrómetro de rodilla que hemos diseñado en mi laboratorio. Mi objetivo es poder aplicar la cantidad correcta de presión sobre la rótula sin que la pierna se duerma mientras mido el movimiento de la articulación. Soy MUY nuevo en todo esto. El sensor y el script funcionan bien. Sin embargo, no sé qué significan realmente los números en el script. ¿Pueden ayudarme a aclararlo? He puesto 3,3 resistencias en la protoboard (basándome en otro tutorial). Estoy tratando de averiguar cuánta fuerza se aplica a la rótula. Mi objetivo es poder aplicar la misma fuerza/presión a todos mis sujetos y mantener la pierna fija en su lugar mientras traduzco su tibia y mido su activación cortical. Tengo que ser específico acerca de los cálculos, pero esto está fuera de mi casa de la rueda. He mirado en la ecuación de Ohm y Joule, pero no estoy seguro de que 1023 se mide en o cómo incorporar las resistencias. Ahora seguro que me puedes ayudar o dirigir de alguna forma o manera. ¡Gracias por todo!