Problema código Ubidots

#include <Filters.h>
#include <Ethernet.h>
#include <SPI.h>
#include <UbidotsEthernet.h>
float testFrequency = 50; // Frecuencia (Hz)
float windowLength = 40.0/testFrequency; // promedio de la señal
int Sensor = 0; //A0
float intercept = -0.04; // to be adjusted based on calibration testing
float slope = 0.0405; // to be adjusted based on calibration testing
float volts; // Voltage
float valor_volts;
float valor_Irms;
float valor_potencia;
unsigned long periodo = 3000;
unsigned long tiempoAnterior = 0;
#include "EmonLib.h";
EnergyMonitor energyMonitor;
RunningStatistics inputStats;
double corriente = 0;
double voltaje= 0;
double potencia = 0;
// Parámetros para el servidor de Ubidots.*/
char const * TOKEN = "BBFF-ncrWSSsuupAsyfoolZEtI88VIrPYtq"; // Token asignado por Ubidots
char const * VARIABLE_LABEL_1 = "corriente_sct"; // Asigna una etiqueta de variable única para enviar los datos
char const * VARIABLE_LABEL_2 = "potencia"; // Asigna una etiqueta de variable única para enviar los datos 
char const * VARIABLE_LABEL_3 = "voltaje_zmpt"; // Asigna una etiqueta de variable única para enviar los datos 


 
/* Dirección MAC para el módulo ethernet */
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x0D, 0xA0, 0x88
};

Ubidots client(TOKEN);
// Crear una instancia EnergyMonitor

void setup() {
Serial.begin(9600);
 /* Inicializa la conexión Ethernet */
  Serial.print(F("Inicializando conexión ethernet..."));
  if (!Ethernet.begin(mac)) {
    Serial.println(F("ops hubo un problema"));
  } else {
    Serial.println(Ethernet.localIP());
  }
  // Esperamos un tiempo para el módulo arranque
  delay(2000);
  Serial.println(F("PLaca ethernet lista!!!"));
  energyMonitor.current(1, 1.6);
   inputStats.setWindowSecs(windowLength);
}

void loop() {
Ethernet.maintain();  
Sensor = analogRead(A0); //Leer pin Analógico
inputStats.input(Sensor);
if((unsigned long)(millis() - tiempoAnterior) >= periodo) {
volts = intercept + slope * inputStats.sigma(); //offset y amplitud
volts = volts*(40.3231); //calibración
tiempoAnterior = millis();
double valor_volts = volts;
// Obtenemos el valor de la corriente eficaz
// Pasamos el número de muestras que queremos tomar
double valor_Irms = energyMonitor.calcIrms(1484);
// Calculamos la potencia aparente
double valor_potencia = valor_Irms * valor_volts;
// Mostramos la información por el monitor serie

Serial.print(" Irms = ");
Serial.println(valor_Irms);
Serial.print("Voltage: ");
Serial.println(valor_volts);
Serial.print("Potencia = ");
Serial.print(valor_potencia);
}
}

En esta parte del código, todo funciona bien. El problema viene cuando añado la siguiente parte, la encargada de enviar las mediciones a ubidots.

 
  Irms = valor_corriente;
  potencia = valor_potencia;
  volts = valor_voltaje;

  /* Enviando datos a Ubidots*/
  client.add(VARIABLE_LABEL_1, valor_corriente);
  client.add(VARIABLE_LABEL_2, valor_potencia );
  client.add(VARIABLE_LABEL_3, valor_voltaje);
  client.sendAll();
  //Esperemos 5 segunsdo antes de volver a subir otro datos a Ubidots
  delay(5000);
}

Cuando añado esta parte, el resultado obtenido por el sensor de voltaje es constantemente -1,61. Aqui un ejemplo:


Si borro esta parte, el sensor mide correctamente. Aqui otro ejemplo

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

Ubidot es como si enviar por puerto serie.
Si tu código funciona enviará por puerto serie o por Ubidos mas alla de las instrucciones específicas.
Ejemplo
Dices que cuando sumas esto tienes problemas

Irms = valor_corriente;
  potencia = valor_potencia;
  volts = valor_voltaje;

  /* Enviando datos a Ubidots*/
  client.add(VARIABLE_LABEL_1, valor_corriente);
  client.add(VARIABLE_LABEL_2, valor_potencia );
  client.add(VARIABLE_LABEL_3, valor_voltaje);
  client.sendAll();
  //Esperemos 5 segunsdo antes de volver a subir otro datos a Ubidots
  delay(5000);

Bueno en luegar de perder tanto tiempo 5 seg que estará bien para Ubidots usa el monitor Serie con algo mas veloz y observa que ocurre.
Los valores valor_corriente, valor_potencia y valor_potencia se visualizan en el monitor serie con simples Serial. print()?
Si es asi hay que ver que ocurre con client.add()
tal vez se ha llenado la memoria pero especulo.

Lo veré mas tarde con mayor profundidad.

Moderador:
Lo primero es que no es tu primer mensaje. Cómo es posible que lo postees en el foro en inglés?
vamos hombre, hay que tener un poco mas de cuidado.
Quita la traducción a tu navegador para este sitio.

Y por otro lado, efectivamente con un serial print, consigo visualizar perfectamente los resultados y mediciones por el monitor serie.

El problema es cuando intento la última parte, que entonces el sensor de voltaje únicamente hace mediciones de -1,61. Las mediciones se registran en ubidots y puedo visualizarlas a través de el, pero son incorrectas.

No le encuentro ninguna lógica, esto está acabando conmigo

¿No debería ser: valor_voltaje = volts ?

Cual es el sentido de esto? No lo utilizas despues no?

Irms = valor_corriente;
  potencia = valor_potencia;
  volts = valor_voltaje;

Quiza te afecta el delay a las mediciones, prueba comentando todo lo de Ubidots y dejando el delay a ver si tambien te imprime mal las mediciones. Si ese fuera el problema pasa a millis

Yo uso Ubidots pero con ubidots.send(); no con ubidots.sendAll();

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.