Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola. He hecho un proyecto y realizo la adquisición de datos mediante LabVIEW a través de un puerto USB. El proyecto consiste en trasladar el movimiento de un helicóptero teledirigido al PC. Por ahora, lo que tengo es una gráfica con posición del helicóptero en los tres ejes, y el giro en z. Mi pregunta es, ¿puedo hacer con LabVIEW una aplicación que, a partir de estos datos, los represente en 3D?. Lo que quiero decir es si puedo representar una esfera, cuyo centro de masas siga los movimientos que ya recojo por el puerto, sumándole el giro, y que trabaje sin retardo (o un retardo aceptable)l. Toda la ayuada que me ofrezcais al respecto la agradecería. Por ejemplo, si LabVIEW no hace esto, ¿lo puede hacer MatLab?, o ¿puedo exportar los datos a MatLab?.
En Matlab sí que lo puedes hacer. En Labview no lo se, pero supongo que también, pero lo he usado muy poco y no controlo mucho del tema. Pero vamos, en Matlab puedes hacerlo sin problema.
Si los datos te entran por USB, lo más fácil es que uses el Matlab de Linux, y leas los datos del USB através de Linux, que es más fácil. En Windows te tendría que currar alguna librería (eso que se lo explique un informático mejor) o pillar algo que ya esté hecho, pero yo no encontré nada en mucha busqueda que realmente funcionara bien. Y los datos del USB, pues los pillas con el Matlab directamente (similar a como con el Matlab de Windows pillas datos del puerto serie) y te sacas la gráfica 3D, actualizandola en cada iteración (puedes usar un drawnow).
Bueno pues si los estás haciendo en Labview, igual es mejor que lo acabes por ahí...
Javier
He conseguido este código, pero no lo entiendo muy bien.
clear all
close all
% Disconnect and delete all instrument objects
instrreset
%Crear la interfaz serie
puerto = serial ('COM3');
%Configurar la comunicación
set(puerto, 'BaudRate', 38400);
set(puerto, 'FlowControl', 'none');
set(puerto, 'Terminator', 'LF');
set(puerto, 'Parity', 'none');
%Abrir la interfaz serie
fopen(puerto);
%Para obtener información sobre la configuración del puerto
instrhelp(puerto);
get(puerto);
%Espera
caract='x'; %Carácter atendido
out=[]; %init
while (out~=caract)
if (puerto.ValuesReceived)
out = fscanf(puerto);
else
pause(0.5);
end
end
%quand sort de la boucle : caract recu
%que veux tu dire par ouvrir un fichier: editer ou executer
%edit fichier.m
%editer
fichier
La primera parte es clara, configura la comunicación y abre la interfaz. Pero en la parte del bucle me confundo. ¿Qué hace?, ¿almacena las datos recibidos en out y cuando finaliza la comunicación espera 0.5 segundos (o milisegundos, ni idea de la unidad)?. Yo quiero ir representando continuamente los datos recibidos, y no sé donde acceder para leerlos.
Gracias.
Pues veamos, si mal no lo entiendo. Lo que hace es que mientras haya algo en el puerto, lo recibe con el fscanf, y vuelve a mirar pasados 0.5 segundos. Las unidades en Matlab (salvo que en el código se especifique antes, están dadas en segundos).
Digamos que el código lo que hace es que cada medio segundo mira si hay algo en el puerto, pero en el momento en el que detecte que hay algo, lo coge todo el tiempo, sin esperar esos 0.5 segundos.
En la web de Mathworks, los fabricantes de Matlab puedes encontrar información buena sobre como leer del puerto serie. Bueno, tú querías leer del USB, pero si consigues un emulador de puerto serie a partir de un USB que te funcione bien, pues también te vale. Para leer del puerto serie hay unas cuantas formas de hacerlo, pero hombre, la mejor yo creo es la que da el fabricante del software... a ver que lo busco un momento...
http://www.mathworks.com/support/soluti ... on=1-1884B
Bueno aquí puedes encontrar un sencillo código para hacer lo mismo que habías encontrado tú. Si tienes muchos problemas para leer el USB, pues te digo que yo me partí el craneo y no conseguí nada (entre otras razones porque no se programar en C++... y aunque supiera pues quizás tampoco...). Así que quizás podrías pasar del USB a TTL y leerlo por puerto RS232 a través de un convertidor (hacerte una pequeña plaquita).
Aunque hombre, siempre es más elegante lo de leer del USB. Por cierto, si alguien sabe como leerlo facilmante con Windows que me lo diga también... y digo facilmante... no me digais... Te creas una API, te curras una librería... Inviertes los códigos de la Estación Espacial, monitorizas el estado de la sonda Pioneer y listo, leyendo sin problemas el USB... Algo en plan, mira, mete este código en matlab, o desde matlab llama a este código en C, y a correr...
Un saludo y espero haberte ayudado en algo... aunque me da la impresión de que en poco...
Javier
Ah, perdona... una cosa. Para recibir los datos y representarlos en Tiempo Real, pues dentro del bucle de adquisición de los datos, metes el programa de representación de los datos. El tema es si el algoritmo es suficientemente rápido para representarlo en tiempo real... yo creo que no debes tener problema porque básicamente apenas tienes que hacer cálculos... Dibuja lo minimo posible que eso se como mucho tiempo de procesamiento.
Javier