Un sensor de flexión o sensor de curvatura es un sensor de bajo coste y fácil de usar diseñado específicamente para medir la cantidad de desviación o flexión.

Se hizo popular en los años 90 debido a su uso en el Power Glove de Nintendo como interfaz de juego. Desde entonces se utiliza como goniómetro para determinar el movimiento de las articulaciones, como sensor de puertas, como interruptor de parachoques para la detección de paredes o como sensor de presión en pinzas robóticas.

Visión general del sensor flexible

Un sensor flexible es básicamente una resistencia variable que varía su resistencia al doblarse. Dado que la resistencia es directamente proporcional a la cantidad de flexión, a menudo se llama un potenciómetro flexible.

Los sensores flexibles suelen estar disponibles en dos tamaños: uno de 2,2″ (5,588cm) de longitud y otro de 4,5″ (11,43cm).

Construcción

Un sensor flexible consiste en un sustrato de resina fenólica con tinta conductora depositada. Encima se coloca un conductor segmentado para formar un potenciómetro flexible en el que la resistencia cambia al desviarse.

Instrucciones de uso

Los sensores flexibles están diseñados para flexionarse en una sola dirección: en dirección opuesta a la tinta (como se muestra en la figura). Doblar el sensor en otra dirección puede dañarlo.

También hay que tener cuidado de no doblar el sensor cerca de la base, porque la parte inferior del sensor (donde se encuentran los pines) es muy frágil y puede romperse si se dobla.

¿Cómo funciona el sensor flex?

La tinta conductora impresa en el sensor actúa como una resistencia. Cuando el sensor está recto, esta resistencia es de unos 25k.

Cuando el sensor se dobla, la capa conductora se estira, lo que provoca una reducción de la sección transversal (imagine que estira una goma elástica). Esta reducción de la sección transversal se traduce en un aumento de la resistencia. En un ángulo de 90°, esta resistencia es de unos 100KΩ.

Cuando el sensor se endereza de nuevo, la resistencia vuelve a su valor original. Midiendo la resistencia, se puede determinar cuánto se ha doblado el sensor.

Lectura de un sensor flex

La forma más sencilla de leer el sensor flex es conectarlo con una resistencia de valor fijo (normalmente 47kΩ) para crear un divisor de tensión. Para ello, conecta un extremo del sensor a la alimentación y el otro a una resistencia pull-down. Luego el punto entre la resistencia pull-down de valor fijo y el sensor flexible se conecta a la entrada ADC de un Arduino.

De esta manera puedes crear una salida de voltaje variable, que puede ser leída por la entrada ADC de un Arduino.

Ten 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 sensor de flexión.

La salida de la configuración del divisor de tensión se describe mediante la ecuación:

En la configuración mostrada, la tensión de salida disminuye al aumentar el radio de curvatura.

Por ejemplo, con una alimentación de 5V y una resistencia pull-down de 47K, cuando el sensor está plano (0°), la resistencia es relativamente baja (alrededor de 25kΩ). Esto da como resultado la siguiente tensión de salida:

Cuando se flexiona por completo (90°), la resistencia se eleva a 100KΩ. El resultado es la siguiente tensión de salida:

Cableado del sensor Flex a Arduino UNO

Es bastante fácil conectar un sensor flex a un Arduino.

Tienes que conectar una resistencia pull-down de 47kΩ en serie con el sensor flex para crear un circuito divisor de tensión. A continuación, el punto entre la resistencia pull-down y el FSR se conecta a la entrada A0 del ADC de un Arduino.

Ten en cuenta que los sensores flexibles son básicamente resistencias. Esto significa que puedes conectarlos de cualquier manera y funcionarán bien.

Código Arduino

Aquí hay un simple sketch que lee los datos del sensor desde el pin ADC del Arduino e imprime la salida en el monitor serial. Para la mayoría de los proyectos, esto es prácticamente todo lo que se necesita.

const int flexPin = A0;			// Pin connected to voltage divider output

// Change these constants according to your project's design
const float VCC = 5;			// voltage at Ardunio 5V line
const float R_DIV = 47000.0;	// resistor used to create a voltage divider
const float flatResistance = 25000.0;	// resistance when flat
const float bendResistance = 100000.0;	// resistance at 90 deg

void setup() {
	Serial.begin(9600);
	pinMode(flexPin, INPUT);
}

void loop() {
	// Read the ADC, and calculate voltage and resistance from it
	int ADCflex = analogRead(flexPin);
	float Vflex = ADCflex * VCC / 1023.0;
	float Rflex = R_DIV * (VCC / Vflex - 1.0);
	Serial.println("Resistance: " + String(Rflex) + " ohms");

	// Use the calculated resistance to estimate the sensor's bend angle:
	float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);
	Serial.println("Bend: " + String(angle) + " degrees");
	Serial.println();

	delay(500);
}

Si todo está bien, deberías ver un cambio en la resistencia y en el cálculo del ángulo estimado, al doblar el sensor de flexión.

Explicación del código:

El sketch comienza con la declaración del pin de Arduino al que se conectan el FSR y el pulldown de 47K.

const int flexPin = A0;

A continuación, definimos un par de constantes: VCC es el voltaje de tu sistema, R_DIV es la resistencia utilizada para crear un divisor de voltaje, flatResistance y bendResistance son la resistencia de tu sensor flexible cuando está plano y doblado a 90°. Asegúrate de establecer estas constantes con precisión.

const float VCC = 5;
const float R_DIV = 47000.0;
const float flatResistance = 25000.0;
const float bendResistance = 100000.0;

En la función setup() inicializamos la comunicación serie con el PC y establecemos el flexPin como INPUT.

void setup() {
	Serial.begin(9600);
	pinMode(flexPin, INPUT);
}

En la función de bucle, primero tomamos la lectura del ADC.

int ADCflex = analogRead(flexPin);

Cuando el Arduino convierte esta tensión analógica en digital, en realidad la convierte en un número de 10 bits de rango 0 a 1023. Así que, para calcular la tensión de salida real, utilizamos la siguiente fórmula:

float Vflex = ADCflex * VCC / 1023.0;

A continuación, calculamos la resistencia del sensor de flexión utilizando la fórmula derivada de la fórmula del divisor de tensión y la mostramos en el monitor de serie.

float Rflex = R_DIV * (VCC / Vflex - 1.0);
Serial.println("Resistance: " + String(Rflex) + " ohms");

Por último, utilizamos la resistencia calculada para estimar el ángulo de flexión del sensor. Para ello utilizamos la función map() incorporada en el IDE.

La función map() mapea y convierte la resistencia del sensor en el ángulo de flexión del mismo. Así, cuando llamamos a map(Rflex, flatResistance, bendResistance, 0, 90.0), el valor de flatResistance se mapearía a 0°, un valor de bendResistance a 90° y valores intermedios a valores intermedios.

float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0);
Serial.println("Bend: " + String(angle) + " degrees");
Serial.println();

Intefacing Flex sensor with Arduino. Last Minute Engineers. https://lastminuteengineers.com/flex-sensor-arduino-tutorial/