Bienvenido a un nuevo tutorial de Lunegate, hoy vamos a prender a usar un componente un tanto diferente, y que las aplicaciones estarán focalizadas en sitios muy explícitos, y es ahí donde entra en juego vuestra imaginación.
INTRODUCCIÓN
Este sensor de unos 8cm de largo aumenta su resistencia al ser flexionado y es perfecto para entornos donde se necesita este tipo de sensores como por ejemplo en guantes inteligentes. Es una tecnología patentada por Spectra Symbol y fue utilizado en el Power glove de Nintendo.
El conector tiene un espaciado de 0.1 pulgadas por lo que se puede conectar directamente a una protoboard. Hay que tener en cuenta que no se debe flexionar demasiado su base ya que se recomienda hacerlo únicamente a partir de su superficie útil de trabajo para que no sufra daños.
Es importante mencionar, que la forma de doblarse es en la dirección que se muestra en la imagen.
Las dimensiones son 8 cm x 0.75 cm aunque la parte útil que medirá la resistencia doblado es de 6 cm. El precio de estas resistencias es bastante elevado, rondan los 10€ la unidad.
Su dataSheet podéis descargaroslo aquí.
Para este tutorial, se requerirá:
MATERIAL NECESARIO
A continuación os describo el material necesario para realizar el tutorial y donde conseguirlo:
Imagen
Nombre producto
Donde comprarlo
MONTAJE
Bien una vez que disponemos de todos los componentes, vamos a ponernos manos a la obra. Para ello os dejo a continuación un esquemático de como debéis interconectar los diferentes componentes para que esto funcione.
Como podéis ver, la conexión es muy sencilla, el Vcc del sensor flex (que es la linea continua del sensor) a 5v de Arduino, el GND a tierra de Arduino y por último estará comunicada en serie nuestra entrada analógica 0 a una resistencia de 47k ohms con tierra.
PROGRAMACIÓN
Una vez montado todo correctamente (verificar las conexiones que eso trae mucho de cabeza). Conectamos nuestro Arduino a el ordenador y añadimos el código que os pongo a continuación:
const int FLEX_PIN = A0; // Pin connected to voltage divider output
// Measure the voltage at 5V and the actual resistance of your
// 47k resistor, and enter them below:
const float VCC = 4.98; // Measured voltage of Ardunio 5V line
const float R_DIV = 47500.0; // Measured resistance of 3.3k resistor
// Upload the code, then try to adjust these values to more
// accurately calculate bend degree.
const float STRAIGHT_RESISTANCE = 37300.0;
const float BEND_RESISTANCE = 90000.0;
void setup()
{
Serial.begin(9600);
pinMode(FLEX_PIN, INPUT);
}
void loop()
{
// Read the ADC, and calculate voltage and resistance from it
int flexADC = analogRead(FLEX_PIN);
float flexV = flexADC * VCC / 1023.0;
float flexR = R_DIV * (VCC / flexV - 1.0);
Serial.println("Resistance: " + String(flexR) + " ohms");
Serial.println("flexADC: " + String(flexADC) + " ohms");
// Use the calculated resistance to estimate the sensor's
// bend angle:
float angle = map(flexR, STRAIGHT_RESISTANCE, BEND_RESISTANCE,
0, 90.0);
Serial.println("Bend: " + String(angle) + " degrees");
Serial.println();
delay(500);
}
// Measure the voltage at 5V and the actual resistance of your
// 47k resistor, and enter them below:
const float VCC = 4.98; // Measured voltage of Ardunio 5V line
const float R_DIV = 47500.0; // Measured resistance of 3.3k resistor
// Upload the code, then try to adjust these values to more
// accurately calculate bend degree.
const float STRAIGHT_RESISTANCE = 37300.0;
const float BEND_RESISTANCE = 90000.0;
void setup()
{
Serial.begin(9600);
pinMode(FLEX_PIN, INPUT);
}
void loop()
{
// Read the ADC, and calculate voltage and resistance from it
int flexADC = analogRead(FLEX_PIN);
float flexV = flexADC * VCC / 1023.0;
float flexR = R_DIV * (VCC / flexV - 1.0);
Serial.println("Resistance: " + String(flexR) + " ohms");
Serial.println("flexADC: " + String(flexADC) + " ohms");
// Use the calculated resistance to estimate the sensor's
// bend angle:
float angle = map(flexR, STRAIGHT_RESISTANCE, BEND_RESISTANCE,
0, 90.0);
Serial.println("Bend: " + String(angle) + " degrees");
Serial.println();
delay(500);
}
Bien, ¿cómo funciona este código?, es sencillo y a la vez desquiciante, para poder conseguir que la resistencia mida correctamente, debemos "calibrarla" primero. ¿Como haremos esto?, sencillo hay que a través de prueba error afinarla.
Para ello debemos ajustar 2 valores: STRAIGHT_RESISTANCE (resistencia sin doblar) y BEND_RESISTANCE (resistencia doblada). Primero ajustaremos la STRAIGHT_RESISTANCE, hasta que marque cero grados, en mi caso cuando empecé con los 37300, me marcaba -22 grados, así que simplemente empecé a bajar hasta que para cero grados usé 23500. y posteriormente ajustamos BEND_RESISTANCE.
PUNTUACIÓN
Calidad Componentes
4,5
Montaje
4,5
Precio
2,0
Características
3,5
Puntuación Global
4,0
Arduino
Sensores
spectrasymbol
Tutoriales