domingo, 31 de julio de 2016

Tutorial: Aprender a usar un sensor Flex con Arduino


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á
Dificultad:

           Tiempo:  15 minutos (montarlo y programarlo)


MATERIAL NECESARIO

A continuación os describo el material necesario para realizar el tutorial y donde conseguirlo:

Imagen
Nombre producto
Donde comprarlo
Sensor Flex
Arduino Uno
Resistencia de 47k ohms (Amarillo, morado, naranja, oro)
Cualquier tienda de electrónica
Conectores universales


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);
}

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


Tags: , , ,

Ude

Eduardo Parada Pardo

Soy desarrollador e investigador en robótica, me gusta aprender nuevas tecnologías y todo lo relacionado con el mundo de la robótica. Si te gusta este blog, no dudes en preguntar cualquier duda.

6 comentarios:

Matias Guerrero dijo...

Hola, el tutorial es excelente,

Consulta como puedo exportar los datos entregados del sensor a un excel?

Matias Guerrero dijo...

Hola, el tutorial es excelente,

Consulta como puedo exportar los datos entregados del sensor a un excel?

Ude dijo...

Muy buenas, pues se me ocurren 2 formas asi rapidamente, una es a traves de un wemos o un Arduino con wifi, ya que puedes a traves de HTML generar una web dinamica que vaya recogiendo dichos datos y exportarlos a excel.

Otra forma, es que pintes en el serial print el valor y lo dejes un rato el tiempo que necesites, copies y pegues todo el contenido un excel. Depende un poco de que cantidad de datos quieras mostrar.

Mireya Nacevilla dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

hola una pregunta de donde se obtiene este valor¿?

const float R_DIV = 47500.0;

Ude dijo...

Buenas tardes, si te fijas en el diseño marca que elegimos una resistencia de 47k ohms. De ahi los 47500 del R_DIV.

 

Productos y tecnologias usadas en este blog:

  • No te pierdas ninguna entrada

    Subscribete aquí en nuestro newsletter y ¡no te pierdas nada!

    Copyright © LuneGate™ is a registered trademark.
    Designed by Templateism. Hosted on Blogger Platform.