LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Comunicacion serial Arduino Labview

Buenas tardes, estoy realizando un proyecto con Arduino y Labview, en el que tomo datos de un Shield GPS y otros sensores en el Arduino, al tomar los datos del GPS no tengo problema, mi inconveniente es al querer tomar los demas datos, realizo la interrupcion para leer los sensores pero igual no me toman los datos, al parecer al hacer eso me genera conflicto leyendo todos los datos, alguien alguna idea de como solucionar este problema? Muchas gracias

0 Kudos
Message 1 of 16
(5,468 Views)

Hola Cesar;

 

Podrías por favor colocar tu código; este problema de sincronización se puede dar debido a que no se respeta el flujo de datos en LabVIEW. 

 

Exito

0 Kudos
Message 2 of 16
(5,433 Views)

Hola, claro este es el codigo de Labview y el del arduino, pero para el arduino es necesario instalar 2 librerias nuevas.

 

#include "TinyGPS.h"
#include "DHT.h"

TinyGPS gps;

#define GPS_TX_DIGITAL_OUT_PIN 5
#define GPS_RX_DIGITAL_OUT_PIN 6
#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

char in;
int temp, hum;
long startMillis;
long secondsToFirstLocation = 0;

#define DEBUG

float latitude = 0.0;
float longitude = 0.0;
float alture=0.0;

void setup()
{
#ifdef DEBUG
Serial.begin(9600);

#endif
dht.begin();
// Serial1 is GPS
Serial1.begin(9600);

// prevent controller pins 5 and 6 from interfering with the comms from GPS
pinMode(GPS_TX_DIGITAL_OUT_PIN, INPUT);
pinMode(GPS_RX_DIGITAL_OUT_PIN, INPUT);

startMillis = millis();
Serial.println("Starting");
}

void loop()
{
readLocation();
if(Serial.available() >0 )
{
in=(byte)Serial.read()& ~(0x20);
if(in=='T'){
temp= dht.readTemperature();
Serial.println(temp);
}
else if (in=='H'){
hum=dht.readHumidity();
Serial.println(hum);
}
}


}

//--------------------------------------------------------------------------------------------
void readLocation(){
bool newData = false;
unsigned long chars = 0;
unsigned short sentences, failed;

// For one second we parse GPS data and report some key values
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (Serial1.available())
{
int c = Serial1.read();
Serial.print((char)c); // if you uncomment this you will see the raw data from the GPS
++chars;
if (gps.encode(c)) // Did a new valid sentence come in?
newData = true;
}
}

if (newData)
{
// we have a location fix so output the lat / long and time to acquire
if(secondsToFirstLocation == 0){
secondsToFirstLocation = (millis() - startMillis) / 1000;
Serial.print("Acquired in:");
Serial.print(secondsToFirstLocation);
Serial.println("s");
}

unsigned long age;
gps.f_get_position(&latitude, &longitude,&age);

latitude == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : latitude;
longitude == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : longitude;
alture == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : alture;

Serial.print("Location: ");
Serial.print(latitude, 6);
Serial.print(" , ");
Serial.print(longitude, 6);
Serial.println("");
Serial.print(alture, 6);
Serial.println("");
}


if (chars == 0){
// if you haven't got any chars then likely a wiring issue
Serial.println("Check wiring");
}
else if(secondsToFirstLocation == 0){
// still working
}
}

0 Kudos
Message 3 of 16
(5,396 Views)

Hola cesar;

 

Te recomendaría colocar tus tres adquisiciones en el mismo lazo y conectar sus terminales de error para asegurar que una ocurra después de la otra;  de lo contrario, te arriesgas a que los tres ciclos traten de obtener un valor del puerto al mismo tiempo ocasionando entonces un conflicto de recursos; algo así

 

car.png

 

Te recomendaría colocar el código repetido en un subVI para hacer más pequeño el programa

 

La segunda opción sería la de colocar semáforos para proteger el acceso a recursos compartidos; aquí un tutorial

 

Exito

0 Kudos
Message 4 of 16
(5,383 Views)

Si intente eso amigo, pero al hacer eso no me lee nada el buffer, y no obtengo datos ni del gps ni del sensor, y aplicando el programa en arduino si me funciona, pero al pasar al labview muere todo, algun consejo?

0 Kudos
Message 5 of 16
(5,375 Views)

Hola!

 

Ahorita lo que estas haciendo es enviar el comando H a tu sensor, probablemente, el error ocurre porque el comando es incorrecto;como se menciona aquí

 

Has intentado usar el toolkit de Arduino en lugar de VISA?

 

Exito

0 Kudos
Message 6 of 16
(5,372 Views)

Si intente usar lifa_base, pero no me sirve para leer los datos del gps, me tocaria modificar el codigo del lifa para eso, por eso opte por trabajar de manera directa con visa, y si pongo solo el GPS si me funciona correctamente, pongo la parte del sensor y muere todo, no se por que? intente de varias formas, pero no logro obtener el dato del sensor DHT22 de ninguna forma en labview, el sensor esta conectado al arduino te adjunto una foto.

0 Kudos
Message 7 of 16
(5,364 Views)

Eran 2 codigos separados, que los uni para trabajar, el GPS y el sensor, en el lector serial de arduino me lee perfectamente, pero al querer leer en LAbview muere la parte del sensor, si uno muere todo.

0 Kudos
Message 8 of 16
(5,354 Views)

A ver si entendía bien... 

 

Tienes un Arduino que contiene un GPS, un sensor de temp y uno de humedad.

Lees desde LabVIEW con VISA el GPS sin problemas

Lees desde LabVIEW con el toolkit de Arduino sin problemas

 

El detalle es cuando tratas de leer con visa los sensores de humedad y temp o con el de arduino el GPS?

Tienes la hoja de datos de los sensores???

Que tarjeta de Arduino estas usando?

 

 

0 Kudos
Message 9 of 16
(5,352 Views)

Estoy usando un arduino MEGA, y no uso el Arduino toolkit para nada, todo leo mediante VISA,el problema es que Labview no me manda ningun dato cuando pongo todo en un mismo lazo, cuando pongo por separado me manda del GPS, pero no del sensor, y si uso solo el programa del sensor cargado en el Arduino y hago el programa en LAbview solo para eso si me lee el sensor, mi problema es al mezclar ambos programas, no se como discriminar ambos datos, porque no me lee todo junto.

 

En el anterior mensaje te envie una foto de como esta conectado el Arduino Mega con el GPS y el Sensor.

 

Muchas gracias por tu ayuda.

0 Kudos
Message 10 of 16
(5,350 Views)