Saturday, March 17, 2012

Lectura de Voltajes Análogos por Medio de NI LabVIEW 2010 y La Tarjeta Arduino Uno

Desde hace algún tiempo se me encargo el proyecto de obtener una lectura de voltaje análogo como parte de mi servicio de becario. El voltaje provenía de un piranómetro (sensor de la radiación solar). Luego de obtener la lectura debía enviarse de manera digital por el puerto USB y recibirlo en una computadora para guardarlo en una base de datos y dar acceso a la información por una pagina de HTML a través de HTTP.


En un principio, considere usar una computadora con Fedora instalado, ya que este sistema operativo simplifica el uso del puerto USB y la configuración de servidor de HTTP. Sin embargo, me vi obligado a hacerlo en Windows por requerimiento del profesor, que deseaba entender y poder administrar el proyecto en un futuro.

Ya que no encontré ningún tutorial con relación a lo que estaba haciendo, decidí hacer uno. Así que aquí se describe el procedimiento que se siguió para resolver este problema.

Cuando se desea obtener una lectura de voltaje de tipo análogo y procesarla mediante software con una computadora, es necesario pasar por las 4 etapas mostradas en el siguiente diagrama:


Cada etapa tiene sus propios retos. Sin embargo, este proceso puede simplificarse significativamente mediante el uso de dos herramientas:

  • La tarjeta Arduino Uno. Esta tarjeta contiene un microcontrolador ATmega328P, que tiene varias entradas que permiten la lectura de valores análogos. Además, tiene la capacidad de comunicarse con una computadora por medio del puerto USB. Esto cubre las primeras dos etapas del diagrama anterior.
  • El software de desarrollo NI LabVIEW. LabVIEW esta enfocado a la integración de hardware y un lenguaje de programación gráfico. Simplifica en gran medida la tarea de enviar y recibir información por medio de puertos seriales como el USB. Usando LabVIEW se pueden cubrir de manera sencilla las ultimas dos etapas del diagrama.




Programación de Arduino Uno para Convertir una Lectura Análoga en un Valor Digital y Enviarlo a Través de USB

Como ya se menciono, la Tarjeta Arduino Uno tiene varias entradas análogas, en total son seis. Cada una de estas entradas puede leer un valor de 0 a 5 volts. Internamente, el voltaje análogo se trata como un numero entero de 0 a 1023 por lo que cada unidad equivale a 5V / 1024 = 4.9 mV, este es el cambio mínimo que distinguirá la Tarjeta Arduino Uno.


El microcontrolador del arduino se programa usando lenguaje C. El siguiente es el ejemplo que se uso para leer el voltaje análogo y enviarlo a través del puerto USB:


Este código es bastante simple; el método setup() sucede una sola vez al encender el arduino. En este método se le da al puerto USB (serial) un intervalo de transmisión de 9600 baudios (estándar) y se asigna la referencia de medida (tierra) por defecto. Esta es toda la configuración inicial necesaria para usar las entradas análogas.

El segundo método, loop(), se repite indefinidamente mientras el arduino este encendido. En este método se obtiene el valor entero que representa la lectura análoga de la entrada A0. Finalmente se envía a través del puerto USB y se produce un tiempo de espera de 100 milisegundos.

Programación de una Interface en NI LabVIEW para recibir y mostrar el Valor recibido a Través del Puerto USB.

La programación en LabVIEW es de manera gráfica y tiene una gran cantidad de funciones útiles incluidas.

Este es el diagrama y programa usado para leer el valor que el arduino esta enviando por el puerto serial:


Lo primero que debe hacer el programa de LabVIEW es leer continuamente el puerto USB, en este caso es el puerto COM3 de la computadora (puede variar según la instalación del arduino). Esto se logra con el primer bloque del programa, llamado Instrument I/O Assistant, es una función predefinida que se puede configurar fácilmente con ayuda del programa en esta ventana:


Los siguientes bloques en el programa hacen operaciones aritméticas simples para convertir el número entero de 0 a 1023 en su valor equivalente en volts. Se le multiplica por 4.9 mV y se divide entre 1000 para mostrar el valor análogo aproximado en volts.

Finalmente el último bloque muestra el resultado continuamente en la siguiente interfaz gráfica predefinida:


Circuito Físico de Prueba

El circuito que se utilizo para esta prueba es el siguiente:


Por medio del potenciómetro se puede hacer variar la entrada de voltaje desde aproximadamente 1.7 volts hasta 3.3 volts.

Haciendo esta prueba con el programa hecho en NI LabVIEW se obtuvieron los siguientes resultados:


Esto fue el resultado de aumentar y disminuir arbitrariamente la resistencia con ayuda del potenciómetro.

4 comments:

  1. Muy buen aporte estimado, sabes algo parecido yo deseo hacer, pero de manera inversa, es decir, de enviar un dato desde labview y recibirlo en arduino... Me podrias ayudar o darme pautas de como hacelo te agradeceria mucho !..

    ReplyDelete
    Replies
    1. Disculpa que haya tardado tanto en responder. Según recuerdo, en la misma ventana de LabVIEW ("Instrument I/O Assistant") vienen las opciones para enviar datos. y en cuanto al Arduino en está página hay un código de ejemplo para leer el puerto serial: http://arduino.cc/en/Serial/read

      Espero que te sea de ayuda :)

      Delete
  2. Hola, quiero hacer algo parecido pero con el arduino mega2560, pero me tira siempre errores que me falta algo labview cuando quiero usar el nstrument I/O Assistant, podrias mandarme un link si es que tengo que descargarlo, o como hago? gracias, mi correo es fernandompedrazzoli@gmail.com

    ReplyDelete
  3. ayuda quiero enviar y recibir datos de arduino y labiew, sin usar el LIFA del toolkit ; ayuda porfa mi correo vsolano1894@gmail.com

    ReplyDelete