Inicio
Usando Arduino como DAQ en Labview 9 abril abril,, 2012 2012 20: 20:56 56 | 26 Comme Comments nts | Bas Bastian tian
Desde hace tiempo estaba buscando alguna forma de hacer o conseguir de manera barata una tarjeta de adquisición de datos que jubilen las improductivas PCLAB-812pg PCLAB-812pg.. Estas tarjetas de adquisición de datos las tenemos de dotación en el instituto y solo tienen un "pequeño" problema… el bus ISA, que hace que solo se puedan usar en ordenadores más que obsoletos y de los que cada vez quedan menos. Hace algún tiempo Angel Perles (gran profesor y mejor director de proyecto) me mando el siguiente enlace por si me interesaba, y vaya si me ha interesado. NI LabVI EW Interface for for Arduino Toolkit – Utilic Utilicee E/S Arduino con LabVIEW – National Nat ional Instruments
Acerca de…
Post antiguos….
SUSCRÍBETE AL A L BLOG POR CORREO ELECTRÓNICO Introduce tu correo electrónico para suscribirte a este blog y recibir notificaciones de nuevas entradas. Únete a otros 6 suscriptores Correo electrónico Suscribir
Por cierto, Angel es el autor de cheapDAQ cheapDAQ,, del que ya hablaré más adelante. Bueno, pues resulta que los amigos de NI nos han hecho un traje a medida. Han creado componentes para Labview (VI) y el firmware necesario para convertir una placa de arduino en una tarjeta de adquisición de datos y poder manejarla por USB desde labview. Las características de la DAQ resultante no es que sea como para tirar cohetes (200hz), pero es mejor que lo que teníamos (nada). Pues nada os explico como he conseguido que funcione. Al lío! Requisitos: Un arduino (Obvio) basado en el ATMEGA328 o superior (en el ATMEGA168 no cabe el firmware). Vale un Duemilanove, pero en nuestro caso será un Arduino UNO. El IDE de Arduino (versión 1) Labview 2009 o superior (vale la versión trial) Kit de drivers VISA. VIPM (VI package manager). manager). Labview Interface for Arduino (en adelante )
BUSCAR: Search
ETIQUETAS:
16F876 arduino ART2003 brazo robot c18 Campus Competicion concurso conversor USB-RS232 cp210x CS113
DAQ
Electronica Entrenadora HC06 bluetooth IDE IDE X2 labview mplab PCB Pingubot Pinguino pinguino32 Desafío Robot
pinguino X2 programa programador dor PIC
Robot
shield Software tutorial ubuntu velocista Videotutorial script servo
Lo primero que necesitamos instalar es Labview. Podemos descargar la versión de evaluación del siguiente enlace, aunque para hacerlo primero tendremos que registrarnos.
Videotutoriales X3
http://www.ni.com/trylabview/
SITIOS DE INTERES
Una vez unstalado Labview, procedemos a instalar el pack de drivers de VISA, que podemos descargarlo desde la siguiente página. Yo he instalado la versión 5.1.1, pero funciona con la versión 5.0.3 y ya han sacado la 5.1.2.
A.R.D.E. C.I.r.E. El Electrón Libre
NI-VISA 5.1.1 Después instalamos el gestor de paquetes VI (VIPM). Podemos descargar la versión de la comunidad (free) de la siguiente página. Este programa será el que descargue e instale los VI de Arduino en Labview. JKI VI Package Package Manager Manager.. Una vez instalado todo esto, ejecutamos el gestor de VI (VIPM) y buscamos "Arduino". Solo
MI granja digital. Pingubot Pinguino Xbot
Hacemos clic con el botón derecho sobre el dispositivo desconocido y elegimos la opción "Actualizar software de controlador" . En la siguiente ventana elegimos la opción "Buscar software de controlador en el equipo ". Ahora se nos pedirá que indiquemos en que carpeta están los drivers de arduino. Tendremos que seleccionar la carpeta "drivers" que hay dentro del directorio de Arduino.
y aceptamos la instalación del driver, tras lo cual, nuestro arduino estará reconocido en el sistema como un puerto serie. El número de puerto serie lo necesitaremos en los siguientes pasos.
Ya tenemos arduino conectado al usb y reconocido por el sistema, ahora toca programar el arduino con el sketch que comunica la placa con labview. El sketch de arduino se instala con LIFA, por lo que tenemos que ir a la carpeta donde se ha instalado. La ruta es un poco larga, así que mejor lo miráis en el pantallazo de la derecha.
En
el
directorio
LVIFA_Base,
se
encuentra el archivo LVIFA_Base.pde que es el sketch que debemos abrir. Se nos abrirán además todas las librerías. Cuando lo tenemos todo abierto lo programamos en la placa de arduino. Primero seleccionamos el tipo de placa que estamos utilizando, que en nuestro caso es una arduino UNO. Se selecciona desde el menú
, en la opción
.
Labview Orge en Usando Arduino como DAQ en Labview
Ahora elegimos el puerto serie (COM) que utiliza el sistema para comunicarse con la placa de arduino. En mi caso es el COM14, pero el sistema nos puede haber asignado cualquier otro. Lo puedes averiguar en el
. El puerto se
selecciona en la opción "Serial Port" del menú Tools. Y ya podemos programar la placa con el botón de la flecha de la parte superior.
Eso es todo. Con esto ya tenemos lista la placa de arduino para comunicarse con Labview y en Labview tenemos montones de VI que nos van a permitir hacer facilmente aplicaciones para controlar procesos usando arduino como tarjeta de adquisición de datos. Si abrimos labview podemos usar alguno de los ejemplos que vienen con LIFA. Como ejemplo vamos a ver el hace uso de una entrada analógica. Los ejemplos de LIFA para Labview se instalan por defecto en la carpeta de ejemplos de Labview, y el ejemplo que buscamos es . Este ejemplo consiste en leer una entrada analógica de Arduino y mostrar la tensión de entrada en un indicador. Primero montamos un circuito que nos varíe la tensión en una entrada con un potenciómetro por ejemplo. El propio ejemplo nos da una esquema para hacerlo:
Una vez montado el circuito y abierto el ejemplo tendremos que modificar en el VI (Arduino Init) los datos referentes a la placa de arduino: Puerto de comunicación y modelo de Arduino. En la ventana del front end del ejemplo, seleccionamos "Show Block Diagram " del menú Window . En el diagrama de bloques haremos doble clic sobre el VI de inicialización de Arduino. Este
es
el
encargado
de
iniciar
la
comunicación con la placa, por lo que es aquí donde hay que configurar el modelo de placa de Arduino que utilizamos y el puerto serie.
En la ventana que nos aparece al hacer doble clic, seleccionamos el modelo de Arduino y el puerto serie que utiliza. Se muestra que opciones hay que modificar en la siguiente imagen.
Sergio MT on 11 mayo, 2012 at 14:18 said:
Gracias, muy bueno!! Reply↓
Geovanny Mx on 19 mayo, 2012 at 23:01 said:
Muy bu en aporte la verda estoy por realizar un proyecto me estaba dando dolor de cabeza lo q necesitaba era lo de la conf. del arduino y finalizar con la seleccion del puerto con VI pero creeme si hubiese visto primero tu pag no hub iese batallado tanto antes Reply↓
miguel on 20 junio, 2012 at 7:30 said:
DISCULPA AMIGO PERO AL ARDUINO NO SE LE CORRE NINGUN PROGRAMA? Reply↓
Bastian on 23 junio, 2012 at 15:02 said:
Si!. El Arduino debe de ejecutar el programa que lo comunica con labview por usb. Lo explico a mitad del post, cuando digo: “…ahora toca programar el arduino con el sketch que comunica la placa con labview. El sketch de arduino se instala con LIFA, por lo que tenemos que ir a la carpeta donde se ha instalado. La ruta es un poco larga, así que mejor lo miráis en el pantallazo de la derecha. En el directorio LVI FA_Base, se encuentra el archivo L VIFA_Base.pde que es el sketch que debemos abrir. Se nos abrirán además todas las librerías. Cuando lo tenemos todo abierto lo programamos en la placa de arduino…” Reply↓
Sohail on 19 agosto, 2012 at 1:20 said:
Thanks for the compiled tuariotl!Just another data point: This still works with Arduino 0021 (the latest pack)Also, those who would want to u se this with Uno and MEGA, please check out:Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/boards.txtThi file contains all the values for the M CU, upload speed and the protocol. [WORDPRESS HASHCASH] The poster sent us ’0 which is not a hashcash value. Reply↓
Victor on 14 agosto, 2012 at 18:01 said:
ayuda, me sale esto:
LVIFA_Base.cpp: In function ' void processCommand(unsigned char*)': LVIFA_Base.pde:-1: error: 'BYTE' was not declared in this scope Desde Arduino 1.0, la palabra clave 'BYTE' ya no está soportada en Serial.print(var, BYTE). Por favor utiliza Serial.write() en su lugar. LVIFA_Base.pde:-1: error: 'class TwoWire' has no member named 'send' Desde Arduino 1.0, la función Wire.send() ha sido renombrada Wire.write() para mantener la consistencia con otras librerías. LVIFA_Base.pde:-1: error: 'class TwoWire' has no member named 'receive' Desde Arduino 1.0, la función Wire.receive() ha sido renombrada Wire.read() para mantener la consistencia con otras librerías. LVIFA_Base.cpp: In function ' void spi_sendReceive(unsigned char*)': LVIFA_Base.pde:-1: error: 'BYTE' was not declared in this scope Desde Arduino 1.0, la palabra clave 'BYTE' ya no está soportada en Serial.print(var, BYTE). Por favor utiliza Serial.write() en su lugar. LVIFA_Base.pde:-1: error: 'BYTE' was not declared in this scope Desde Arduino 1.0, la palabra clave 'BYTE' ya no está soportada en Serial.print(var, BYTE). Por favor utiliza Serial.write() en su lugar. Reply↓
Bastian on 15 agosto, 2012 at 7:12 said:
Tiene pinta de que estás compilando una versión antigua del LIFA… te has descargado la v ersión correcta/última? Reply↓
Carlos on 18 agosto, 2012 at 2:41 said:
Hola, tengo un problema al tratar de compilar el archivo L VIFA_Base en el arduino. Me sale esto: AFmotor\AFMotor.cpp.o: In function `AFM otorController': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:25: multiple definition of `AFMotorController::AFMotorController()' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AFM otorController': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:25: multiple definition of `AFMotorController::AFMotorController()'
AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AF_ DCMotor::setSpeed(unsigned char)': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:299: multiple definition of `AF_DCMotor::setSpeed(unsigned char)' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AF_Stepper::setSpeed(unsigned int)': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:360: multiple definition of `AF_Stepper::setSpeed(unsigned int) ' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AFM otorController::latch_tx() ': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:49: multiple definition of `AFMoto rController::latch_tx()' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AF_ Stepper::onestep(unsigned char, unsigned char)': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:414: multiple definition of `AF_Stepper::onestep(unsigned char, unsigned char)' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o:(.data.microstepcurve+0×0): multiple definition of `microstepcurve' AFMotor.cpp.o:(.data.microstepcurve+0×0): first defined here AFmotor\AFMotor.cpp.o: In function `AF_Stepper::step(unsigned int, unsigned char, unsigned char)': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:377: multiple definition of `AF_Stepper::step(unsigned int, unsigned char, unsigned char)' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function ` AF_Stepper::release()': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:366: multiple definition of `AF_Stepper::release()' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AF_DCMotor::run(unsigned char)': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:265: multiple definition of `AF_DCMotor::run(unsigned char)' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AFM otorController::enable()': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:27: multiple definition of `AFMoto rController::enable()' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AF_DCMotor': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:235: multiple definition of `AF_DCMotor::AF_DCMotor(unsigned char, unsigned char)' AFMotor.cpp.o:C:\Users\Admin\AppData\Local\Temp\build4009067262730563549.tmp/AFMot first defined here AFmotor\AFMotor.cpp.o: In function `AF_DCMotor': C:\Users\Admin\Documents\Programas\arduino-1.0-windows(1)\arduino1.0\libraries\AFmotor/AFMotor.cpp:235: multiple definition of
`AF_DCMotor::AF_DCMotor(unsigned char, unsigned char)' Reply↓
Carlos Tapia Ayala on 30 agosto, 2012 at 16:19 said:
Muy buen aporte estimados, pero me preguntaba si se puede el proceso pero de manera inversa, es decir, tomar un control numerico, desde labview, y enviarlo hacia arduino, y en arduino almacenar ese dato en una variable y comenzar a jugar con esa informacion obtenida.. espero su respuesta y ay da…. Reply↓
Bastian on 31 agosto, 2012 at 13:02 said:
Por poder, se puede hacer, pero esto no te sirve. Tienes que hacer en labview un proceso que controle el CNC y envie al puerto serie (el que utiliza arduino) el dato que necesitas. Luego debes programar el aurduino para que procese la información obtenida por el puerto serie.. Reply↓
Carlos Tapia Ayala on 31 agosto, 2012 at 18:28 said:
Muchas Gracias Bastian, por tu respuesta. ENtonces, no puedo utilizar unos de tantos puertos pwm que tiene el arduino, para poder leer ese valor, que envio desde labview ?? Reply↓
Carlos Tapia Ayala on 31 agosto, 2012 at 18:35 said:
Ademas, me olvide mencionarlo, desde arduino puede enviar : una senal digital, una senal analogica y recibir en labview y desde labview, puedo enviar una senal digital, y recibirlo en arduino, me parece que si podria hacer recibir una senal analogica o utilizando un control number desde labview, para recibirlo en arduino. me parece que la clave es en pwm. A decir verdad, ya hecho esa prueba, pero cuando la recibo en el arduino, no sabria como tomarla. me parece que algun comando me hace falta para leerla. EN el labview , le indico que el puerto3 (pwm), envia un cont rol number y en el arduino, de tipo la recibo ?? ? analogica ?, digital ??? , y como hago para leer esa senal que esta enviada a traves del pin pwm ?? , porque segun lo que yo se existe la programacion DigitalWrite para pwm y analogRead para senales digitales ?? ……..porfa estimado ayudame..
Reply↓
Jorge on 26 septiembre, 2012 at 17:16 said:
Hola Bastian soy nuevo ,mi pregunta es para la instalación de drivers en labview por que instale el paquete Visa y me da error de drivers error 5005 a que se debe?. Un saludo ,gracias Reply↓
hector on 25 noviembre, 2012 at 5:45 said:
buen dia a todos espero y me puedan ayudar el problema es que y o tengo un arduino duemilanove y al intentar correr el programa para labview no me lo permite me dise que la memoria es insuficiente que puedo aser para poder comunicar mi arduino duemilanove con labview Reply↓
raulsb on 28 noviembre, 2012 at 2:42 said:
que tal amigo, lo que pasa es que no me aparece la libreria LIFA_BASE por lo tanto cuando ya quiero hacer el ultimo paso me marca este error core.a(main.cpp.o): In function `main': C:\Users\Lenovo\Documents\arduino-1.0.2-windows (1)\arduino1.0.2\hardware\arduino\cores\arduino/main.cpp:5: undefined reference to `setup' C:\Users\Lenovo\Documents\arduino-1.0.2-windows (1)\arduino1.0.2\hardware\arduino\cores\arduino/main.cpp:15: undefined reference to `loop' Reply↓
Mario on 12 marzo, 2013 at 14:33 said:
Hola, he querido desargar el Lifa desde VIPM pero me sle un error que no encuentranla ubicacion del repositorio o algo asi…a alguien le ha pasado esto? Saludos!!! Reply↓
Joel on 28 abril, 2013 at 22:21 said:
Hola me sale error a la hora de querer instalar vipm-2012, tengo labview 2010. VIMP 2012 windows setup requiere a v ersion 2011 (or compatible) Labview run-time engineTo correct this problem, please contact the vendor of v imp 2012. or download labview runtime engine from the national instruments web site. Ya lo he descargado y lo tengo instalado y aun así no me deja ejecutar el VIMP Reply↓
Joel on 29 abril, 2013 at 4:17 said:
Hola tengo problemas al compilar el
de ejemplo
LIFA_Base.cpp.o: In function ` loop': C:\Users\Joel\Desktop\arduino-1.0.4-windows\arduino-1.0.4/LIFA_Base.ino:59: undefined reference to `checkForCommand()' C:\Users\Joel\Desktop\arduino-1.0.4-windows\arduino-1.0.4/LIFA_Base.ino:65: undefined reference to `sampleContinously()' LIFA_Base.cpp.o: In function ` setup': C:\Users\Joel\Desktop\arduino-1.0.4-windows\arduino-1.0.4/LIFA_Base.ino:39: undefined reference to `syncLV( )' Reply↓
ee on 3 mayo, 2013 at 1:49 said:
Buen dia tengo el problema que no me puedo comunicar desde labview con el arduino uno que tengo, ya hice t odo lo que indicas pero hay una diferencia que en el archivo LVIFA_Base.pde no me aparece solo esta una carpeta con el nombre LIF A_Base y use un programa LIFA_Base.ino pues no tengo otro que aparezca. El problema que al correr un programa aunque sea uno de prueba sencillo como encender un led me manda el error 5001 me podrias ayudar y decirme en que estoy mal el equipo que uso es a 64 bits, tengo todo en 64bits menos el software de Arduino y el VIPM no se si esto me afecta puedes ayudarme me urge gracias Reply↓
Ezreal on 28 mayo, 2013 at 5:47 said:
Buenísimo, muchas gracias por el aporte todo claro y preciso. Reply↓
Joshua on 20 junio, 2013 at 19:48 said:
Olles yo tengo una duda sobre la conexion con el arduino mega como hacer para que funcionen todos los pines ya que solo puedo controlar hasta el pin 13 como si tuv iera un arduino one, y ya le configure en el bloque de apertura escritura y leer los puse en mega 2650 y aun asi no puedo Reply↓
JOrge on 13 julio, 2013 at 12:23 said:
yo tengo una msp 430 launchpad y l progamo con un soft llamado energia quees muy similar a la ide de arduino que posibilidades tengo d e que este proyectio sea compatible con
mi launchpad si todo archivo que tengamos en arduino lo podemos montar en la launchpad si modificar el programam y funciona
Reply↓
Bastian on 22 julio, 2013 at 14:04 said:
NO creo que te funcione el mismo programa para la launchpad. El problema es que aunque la programación sea compatible entre energia y arduino, el hardware no lo es con lo cual no creo que te funcione sin modificar el programa. Por cierto, yo estoy usando energia pero con la Stellaris (Cortex-M4) y tiene buena pinta. Salu2! Reply↓
taka on 21 julio, 2013 at 23:04 said:
Para los que tienen problemas con este error: LIFA_Base.cpp.o: In function ` loop': C:\Users\Joel\Desktop\arduino-1.0.4-windows\arduino-1.0.4/LIFA_Base.ino:59: undefined reference to `checkForCommand()' C:\Users\Joel\Desktop\arduino-1.0.4-windows\arduino-1.0.4/LIFA_Base.ino:65: undefined reference to `sampleContinously()' LIFA_Base.cpp.o: In function ` setup': C:\Users\Joel\Desktop\arduino-1.0.4-windows\arduino-1.0.4/LIFA_Base.ino:39: undefined reference to `syncLV( )' Solo tienen que copiar el archivo que se encuentra dentro de una carpeta que se encuentra en la carpeta de LIF A_BASE me parece que se llama lab view interface bueno es la única carpeta que se encuentra. Ese archivo lo copian y lo pegan afuera de la misma cárpete ejecuten LIFA_Base.ino y lo abren con arduino y compilan el error debería desaparecer por lo menos me funciono a mi. Reply↓
Bastian on 22 julio, 2013 at 14:04 said:
Gracias por la info!
Salu2! Reply↓
kike on 28 agosto, 2013 at 13:45 said: