¿Qué tan fuerte presionas? Descúbrelo con el FSR402 y Arduino
Introducción
¿Cómo podemos saber si alguien está presionando un botón, si un objeto está sobre una superficie o qué tan fuerte se aprieta algo?
En esta práctica utilizaremos el sensor de fuerza resistivo FSR402 junto con un Arduino UNO.
El FSR402 es una lámina delgada y flexible que cambia su resistencia eléctrica según la fuerza que se aplica sobre ella: sin presión su resistencia es muy alta y, conforme presionamos, la resistencia disminuye. No necesita librerías ni protocolos de comunicación: basta con una resistencia y una entrada analógica del Arduino.
Su rango de detección va aproximadamente de 100 g a 10 kg, lo que lo hace útil para detectar contacto, presión de los dedos, peso aproximado de objetos y proyectos interactivos.
Durante esta práctica aprenderemos cómo funciona, cómo conectarlo correctamente al Arduino UNO, leer su señal y clasificar la presión en distintos niveles.
¿Qué es el FSR402?
FSR significa Force Sensitive Resistor, es decir, resistencia sensible a la fuerza. El FSR402 está formado por varias capas de película delgada: una capa con un material conductor especial y otra con pistas interdigitadas (en forma de peine), separadas por un pequeño espacio.
Cuando no hay presión, las capas apenas se tocan y la resistencia es mayor a 10 MΩ, prácticamente un circuito abierto. Al presionar el área circular, las capas hacen más contacto y la resistencia baja hasta unos pocos kΩ o menos.
A diferencia de una celda de carga, el FSR no es un instrumento de pesaje de precisión. Es ideal para detectar si hay presión y qué tanta de forma relativa: poca, media o mucha.
Sensor de fuerza resistivo circular FSR402.
Características principales
| Característica | Valor |
|---|---|
| Modelo | FSR402 |
| Tipo de sensor | Resistencia sensible a la fuerza (película delgada) |
| Salida | Resistencia variable (pasiva) |
| Rango de fuerza | Aproximadamente 100 g – 10 kg según el fabricante; por encima de unos 2 kg la lectura cambia muy poco |
| Resistencia sin presión | Mayor a 10 MΩ |
| Repetibilidad | ± 2 % (mismo sensor) / ± 6 % (entre sensores) |
| Histéresis | +10 % promedio |
| Tiempo de respuesta | Menor a 3 µs |
| Vida útil | Aproximadamente 10 millones de activaciones |
| Temperatura de operación | -30 °C a 70 °C |
| Diámetro total | 18.29 mm |
| Diámetro del área sensible | 14.68 mm |
| Espesor | 0.46 mm |
| Peso | 0.25 g |
| Montaje | Reverso autoadhesivo |
Estos valores corresponden a la hoja de datos del FSR402 y a la ficha del producto en Tecneu.
¿Cómo funciona?
El funcionamiento puede dividirse en varios pasos:
- Sin presión, la resistencia del sensor es muy alta (más de 10 MΩ).
- Al presionar el área circular, las capas internas hacen más contacto y la resistencia disminuye.
- Mientras más fuerza aplicamos, menor es la resistencia.
- Combinamos el sensor con una resistencia fija de 10 kΩ para formar un divisor de voltaje.
- El voltaje del divisor cambia según la fuerza aplicada.
- Arduino lee ese voltaje mediante una entrada analógica.
- El programa convierte la lectura en voltaje y resistencia, y clasifica el nivel de presión.
La relación entre fuerza y resistencia no es lineal: con poca fuerza la resistencia cae muy rápido y, con mucha fuerza, cambia cada vez menos. Por eso el FSR es excelente para distinguir niveles de presión, pero no para medir gramos exactos.
Material necesario
- Arduino UNO.
- Sensor de fuerza resistivo FSR402.
- Resistencia de 10 kΩ.
- Protoboard.
- Cables Dupont.
- Cable USB para Arduino UNO.
- Opcional: un LED y una resistencia de 220 Ω para la mejora con LED.
Tabla de conexiones
| Elemento | Arduino UNO | Función |
|---|---|---|
| Terminal 1 del FSR402 | 5V | Alimentación |
| Terminal 2 del FSR402 | A0 | Señal del divisor de voltaje |
| Resistencia de 10 kΩ | Entre A0 y GND | Resistencia de referencia (pull-down) |
El FSR402 no tiene polaridad: cualquiera de sus dos terminales puede ir a 5V. Lo importante es que el punto donde se unen el sensor y la resistencia de 10 kΩ llegue al pin A0.
Nota: las terminales del sensor son delicadas. Evita doblarlas justo en la unión con la lámina y no las sueldes directamente con mucho calor, ya que el plástico puede derretirse. Lo más práctico es insertarlas en la protoboard o usar un conector.
Conexión física del sensor FSR402 a la protoboard y al Arduino UNO.
Diagrama de conexión del FSR402 con Arduino UNO: un extremo a 5V, el otro a A0 y resistencia de 10 kΩ de A0 a GND.
¿Por qué usamos una resistencia de 10 kΩ?
El FSR402 no genera voltaje por sí mismo: solo cambia su resistencia. Para que Arduino pueda medirlo, lo combinamos con una resistencia fija y formamos un divisor de voltaje.
El voltaje en A0 se calcula así:
Vout = 5V × R_fija / (R_fija + R_FSR)
Sin presión, la resistencia del FSR es enorme y el voltaje en A0 queda cerca de 0 V. Al presionar, la resistencia del FSR baja y el voltaje sube hacia 5 V. Así, más fuerza significa una lectura más alta.
La resistencia de 10 kΩ es un buen valor general para presiones con los dedos. Si quieres más sensibilidad con fuerzas ligeras puedes probar con una de 47 kΩ o 100 kΩ, y para fuerzas grandes una de 3.3 kΩ o 4.7 kΩ.
El código
Ahora podemos utilizar un programa sencillo para leer el sensor y mostrar la lectura, el voltaje, la resistencia y el nivel de presión en el Monitor Serial.
// ==========================================
// SENSOR DE FUERZA RESISTIVO FSR402
// ARDUINO UNO
// DIVISOR CON RESISTENCIA DE 10 k
// ==========================================
const int pinFSR = A0; // Union del FSR y la resistencia
const float R_FIJA = 10000.0; // Resistencia de 10 k a GND
const float VCC = 5.0; // Voltaje de alimentacion
void setup() {
Serial.begin(9600);
Serial.println("================================");
Serial.println(" SENSOR DE FUERZA FSR402");
Serial.println("================================");
}
void loop() {
// Leer el divisor de voltaje (0 - 1023)
int lectura = analogRead(pinFSR);
// Convertir la lectura ADC a voltaje
float voltaje = lectura * (VCC / 1023.0);
Serial.print("Lectura: ");
Serial.print(lectura);
Serial.print(" | Voltaje: ");
Serial.print(voltaje, 2);
Serial.print(" V");
if (lectura < 10) {
// Practicamente 0 V: no hay presion
Serial.println(" | Sin presion");
} else {
// Resistencia del FSR a partir del divisor
float resistenciaFSR = R_FIJA * (VCC - voltaje) / voltaje;
Serial.print(" | Resistencia FSR: ");
Serial.print(resistenciaFSR / 1000.0, 1);
Serial.print(" k");
// Clasificar el nivel de presion
if (lectura < 200) {
Serial.println(" | Presion ligera");
} else if (lectura < 500) {
Serial.println(" | Presion media");
} else if (lectura < 800) {
Serial.println(" | Presion fuerte");
} else {
Serial.println(" | Presion muy fuerte");
}
}
delay(300);
}
¿Qué hace el programa?
Primero definimos el pin donde llega la señal y los valores del divisor:
const int pinFSR = A0;
const float R_FIJA = 10000.0;
const float VCC = 5.0;
Después iniciamos la comunicación con el Monitor Serial:
Serial.begin(9600);
En el loop() Arduino lee el voltaje del divisor:
int lectura = analogRead(pinFSR);
Esta lectura tiene un valor entre 0 y 1023. La convertimos a voltaje:
float voltaje = lectura * (VCC / 1023.0);
Si la lectura es casi cero, no hay presión. En caso contrario, calculamos la resistencia del FSR despejándola de la fórmula del divisor:
float resistenciaFSR = R_FIJA * (VCC - voltaje) / voltaje;
El if inicial evita dividir entre cero cuando el voltaje es 0 V. Por último, comparamos la lectura con varios umbrales para clasificar la presión en ligera, media, fuerte o muy fuerte. Puedes ajustar estos umbrales según tu proyecto.
Prueba en el Monitor Serial
Después de cargar el programa en el Arduino UNO, abrimos el Monitor Serial y seleccionamos:
9600 baudios
Monitor Serial mostrando la lectura, el voltaje, la resistencia y el nivel de presión.
Sin tocar el sensor deberías ver:
Lectura: 0 | Voltaje: 0.00 V | Sin presion
Y al presionarlo con el dedo, algo similar a esto:
Lectura: 612 | Voltaje: 2.99 V | Resistencia FSR: 6.7 k | Presion fuerte
Los valores reales dependerán de la fuerza aplicada y de cómo apoyes el dedo sobre el área circular.
Realizando la prueba
Para comprobar el funcionamiento, presiona el círculo del sensor primero suavemente y luego cada vez más fuerte. La lectura debe subir conforme aumenta la presión y regresar a cero al soltar.
Esta tabla muestra la relación entre la resistencia del FSR y el voltaje en A0 con una resistencia fija de 10 kΩ:
| Resistencia del FSR | Voltaje en A0 | Lectura aproximada | Presión |
|---|---|---|---|
| Más de 10 MΩ | ≈ 0 V | 0 | Sin presión |
| 100 kΩ | 0.45 V | 93 | Ligera |
| 30 kΩ | 1.25 V | 256 | Media |
| 10 kΩ | 2.50 V | 512 | Fuerte |
| 2 kΩ | 4.17 V | 853 | Muy fuerte |
Puedes verificar estos valores midiendo con un multímetro la resistencia del sensor mientras lo presionas, o el voltaje entre A0 y GND.
¿Por qué la medición puede variar?
Es importante entender que el FSR no es una báscula de precisión.
La medición puede verse afectada por diferentes factores:
- La forma y el tamaño del objeto que presiona: la fuerza debe caer dentro del área circular.
- Superficies irregulares o curvas debajo del sensor.
- Histéresis: la lectura al aumentar la presión no es idéntica a la lectura al disminuirla.
- Deriva: con una carga constante durante mucho tiempo, la resistencia puede seguir bajando lentamente.
- Diferencias entre un sensor y otro (± 6 %).
- Tolerancia de la resistencia de 10 kΩ y variaciones en la alimentación de 5 V.
Importante: para obtener lecturas consistentes, coloca el sensor sobre una superficie plana y rígida y, si es posible, pon un pequeño disco de goma o plástico encima para que la fuerza se reparta en toda el área sensible.
Mejora: controlar el brillo de un LED
Una forma visual de ver la presión es usarla para controlar el brillo de un LED: mientras más fuerte presionas, más brilla.
Conecta un LED con su resistencia de 220 Ω al pin 9 del Arduino (ánodo al pin 9 a través de la resistencia y cátodo a GND). Después agrega esta línea antes del setup():
const int pinLED = 9; // Pin PWM
Dentro del setup() configura el pin como salida:
pinMode(pinLED, OUTPUT);
Y al final del loop(), antes del delay, agrega:
// Convertir la lectura (0 - 1023) a brillo PWM (0 - 255)
int brillo = map(lectura, 0, 1023, 0, 255);
analogWrite(pinLED, brillo);
El resto del programa permanece igual.
Calibración del sensor
Si quieres relacionar la lectura con un peso aproximado, puedes calibrar el sensor colocando objetos de peso conocido sobre él y anotando la lectura que obtienes.
Por ejemplo:
Peso colocado Lectura Voltaje
-------------------------------------------
200 g 150 0.73 V
500 g 330 1.61 V
1 kg 480 2.35 V
2 kg 610 2.98 V
Con estos datos puedes crear tus propios umbrales en el programa. Los valores de la tabla son solo un ejemplo: cada sensor y cada montaje darán resultados diferentes, y aun calibrado, el FSR solo ofrece una estimación del peso.
Ventajas del FSR402
- Muy delgado y ligero: solo 0.46 mm de espesor, se adapta a casi cualquier superficie.
- Conexión sencilla: solo necesita una resistencia y una entrada analógica.
- Sin librerías: se lee directamente con analogRead().
- Autoadhesivo: fácil de fijar en guantes, botones, plataformas o pinzas.
- Larga vida útil: alrededor de 10 millones de activaciones.
- Compatible con cualquier microcontrolador: Arduino, ESP32, Raspberry Pi Pico y más. En placas de 3.3 V conecta el FSR a 3.3 V (nunca a 5 V) y ajusta VCC = 3.3 en el código; en el ESP32 la lectura va de 0 a 4095.
Aplicaciones
Este sensor puede utilizarse en diferentes proyectos electrónicos y de robótica:
- Botones y teclados sensibles a la presión.
- Instrumentos musicales electrónicos.
- Detección de contacto en pinzas de robots.
- Detección del suelo en las patas de robots caminantes.
- Detección de presencia en sillas, camas o tapetes.
- Estimación aproximada de peso.
- Prototipos de rehabilitación y proyectos de ergonomía.
- Proyectos educativos e interactivos.
FSR402 vs. celda de carga
| Característica | FSR402 | Celda de carga + HX711 |
|---|---|---|
| Precisión | Baja (niveles de presión) | Alta (gramos) |
| Espesor | 0.46 mm | Varios milímetros |
| Circuito necesario | Una resistencia | Amplificador HX711 |
| Librería | No requiere | Requiere |
| Uso ideal | Detectar contacto y presión | Básculas y pesaje |
Conclusión
En esta práctica aprendimos a utilizar el sensor de fuerza resistivo FSR402 con un Arduino UNO.
Aprendimos que este sensor disminuye su resistencia cuando aumenta la fuerza aplicada y que, combinándolo con una resistencia de 10 kΩ en un divisor de voltaje, podemos leerlo sin librerías usando una sola entrada analógica.
También aprendimos a realizar las conexiones básicas:
FSR402 / RESISTENCIA ARDUINO UNO
Terminal 1 FSR ───────────→ 5V
Terminal 2 FSR ───────────→ A0
Resistencia 10 k ─────────→ A0 y GND
Finalmente utilizamos Arduino para convertir la lectura analógica en voltaje y resistencia, y clasificar la presión en distintos niveles en el Monitor Serial.
Este proyecto representa una base muy útil para desarrollar sistemas más avanzados. Por ejemplo, podemos activar un servomotor cuando se detecte presión, crear un tambor electrónico, detectar si una silla está ocupada o darle sentido del tacto a la pinza de un robot.
El siguiente paso recomendado sería calibrar el sensor con objetos de peso conocido y ajustar los umbrales del programa a tu aplicación.
Productos relacionados
Estos son los productos utilizados en esta práctica y puedes consultarlos directamente en Tecneu:
Productos utilizados en esta práctica
Arduino UNO
Placa de desarrollo utilizada para leer el divisor de voltaje del sensor y clasificar el nivel de presión.
Sensor de fuerza resistivo FSR402
Sensor de película delgada utilizado para detectar presión entre aproximadamente 100 g y 10 kg.
No comments
0 comments