Go Down

Topic: Ajuda com Energy monitor (resolvido) (Read 1 time) previous topic - next topic

igorayres

Mar 25, 2013, 03:18 pm Last Edit: Mar 28, 2013, 12:43 pm by igorayres Reason: 1
Fala galera, tudo tranquilo?

Seguinte, estou utilizando a biblioteca Emon.lib (http://openenergymonitor.org/emon/), para mediar a corrente em um fio, e preciso de alguém com experiencia para me ajudar, na verdade a minha dúvida é bem simples.

O meu projeto contém alguns medidores de corrente (10), e para mensurar tais valores, estou utilizando o exemplo que acompanha a  biblioteca, algo muito simples:

Code: [Select]
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3

#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance

void setup()

  Serial.begin(9600);
 
  emon1.current(1, 111.1);             // Current: input pin, calibration.
}

void loop()
{
  double Irms = emon1.calcIrms(1480);  // Calculate Irms only
 
  Serial.print(Irms*230.0);        // Apparent power
  Serial.print(" ");
  Serial.println(Irms);        // Irms
}



Neste exemplo, o pino de referencia (input pin calibration) é o pino 1.

O que eu preciso, é criar um laco para os pinos analógicos, que no meu caso serão 10 (isso é tranquilo), e fazer com que ele print a corrent do pino específico, vamos supor se eu enviar 2, ele printa a corrente do pino 2, se eu enviar 7, do pino 7, e assin sucessivamente.  No exemplo ele simplesmente printa a variavél "Irms", que foi previamente relacionada ao pino1, eu não quero isso, quero printar a corrente do pino de referencia.

Será que eu devo criar uma instancia diferente para cada pino de leitura, ou simplesmente criando um laço eu consigo o resultado desejado?

Outra dúvida, é como eu complemento uma variável? Vamos supor que eu tenha uma variavél X do tipo int, cujo valor é 10, o arduino compreende se eu passar desta forma:

Serial.println(Irms(X));

Alguém pode me ajudar?

bubulindo

Ok...

Se não me engano essa biblioteca é para enviar dados pela Internet para o emoncms, não?

Outra coisa, que placa estás a usar para teres 10 ADs?

O CalcIrms precisa do número de amostras que vais usar... tens a certeza acerca das 1480?

Porque não crias diferentes instâncias do emon?

Code: [Select]


#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon[10];                   // Create an instance
const int pinos[10] = {1,2,3,4,5,6,7,8,9,10};  //configurar pinos do AD.

void setup()

  Serial.begin(9600);
  for (int i = 0; i <10; i++ {
     emon[i].current(pinos[i], 111.1);             // Current: input pin, calibration.  /
  }

void loop()
{
  for (int j = 0; j <10; j++) {
     double Irms = emon[j].calcIrms(1480);  // Calculate Irms only
     Serial.print("Sensor ");
     Serial.println(j);
     Serial.print(Irms*230.0);        // Apparent power
     Serial.print(" ");
     Serial.println(Irms);        // Irms
  }
}

This... is a hobby.

igorayres


Ok...

Se não me engano essa biblioteca é para enviar dados pela Internet para o emoncms, não?

Outra coisa, que placa estás a usar para teres 10 ADs?

O CalcIrms precisa do número de amostras que vais usar... tens a certeza acerca das 1480?

Porque não crias diferentes instâncias do emon?

Code: [Select]


#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon[10];                   // Create an instance
const int pinos[10] = {1,2,3,4,5,6,7,8,9,10};  //configurar pinos do AD.

void setup()

  Serial.begin(9600);
  for (int i = 0; i <10; i++ {
     emon[i].current(pinos[i], 111.1);             // Current: input pin, calibration.  /
  }

void loop()
{
  for (int j = 0; j <10; j++) {
     double Irms = emon[j].calcIrms(1480);  // Calculate Irms only
     Serial.print("Sensor ");
     Serial.println(j);
     Serial.print(Irms*230.0);        // Apparent power
     Serial.print(" ");
     Serial.println(Irms);        // Irms
  }
}




Babulindo, ótima ideia de criar laços para iniciar as instnacias! vou testar (o meu pouquissimo conhecimento que tenho sobre programação adquiri nos útimos meses, com este projeto).

O medior em questão, no caso, é este daqui:

http://dx.com/p/ac-ta12-100-current-sensor-module-for-arduino-white-red-161183

Está biblioteca, até eu sei, é para mensurar, corrente, tensão e voltagem de um projeto.

No scketh que você me mandou, onde eu defino qual o pino de referencia? gostaria de enviar um "7" para a entrada serial, e ele printar os dados da porta 7, e pelo que eu percebi, esse Irms, irá printar a tensão de todos os pinos  não é isso?

Obrigado

bubulindo

Tens de configurar isso aqui:

Code: [Select]
const int pinos[10] = {1,2,3,4,5,6,7,8,9,10};  //configurar pinos do AD.

Em vez de 1,2,3,4... metes os pinos do AD. Por exemplo:

Code: [Select]
const int pinos[10] = {A0,A1,A2,A3,A4,A5,A6,A7,A8,A9};  //configurar pinos do AD.
Estes estão visíveis na placa.
This... is a hobby.

igorayres

Muito obrigado babulindo!!

Resolveu!!

Go Up