Boa noite!!

projeto   "Medição de consumo de energia elétrica residencial"

 estou com dificuldade em controlar a leitura do custo da energia, o objetivo é ao ligar o arduino ele já mostre o valor do consumo simultaneamente, e que esse valor seja acumulativo partindo do R$ 0,0

estou utilizando o sensor sct 013, e a biblioteca Emonlib.h

se alguém puder me ajudar , desde já agradeço... 

Exibições: 459

Responder esta

Respostas a este tópico

Mostre o que já fez....Talvez possamos ajuda-lo.

segue o programa: 

//Programa : Medidor de energia elétrica com Arduino e SCT-013


//Baseado no programa exemplo da biblioteca EmonLib

//Carrega as bibliotecas
#include "EmonLib.h" 
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
EnergyMonitor emon1;

//Tensao da rede eletrica
int rede = 127.0;

//Pino do sensor SCT
int pino_sct = 1;

void setup() 
{
Serial.begin(9600); // iniciando a serial
lcd.begin(16, 4); // iniciando display
lcd.clear();


emon1.current(pino_sct, 29); //Pino, calibracao - Cur Const= Ratio/BurdenR. 1800/62 = 29.

//Informacoes iniciais display

lcd.print("Projeto TCC");
lcd.setCursor(0,1);
lcd.print("Med de Consumo");
lcd.setCursor(2,0);

delay(5000);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("A=");
lcd.setCursor(0,1);
lcd.print("KW=");
lcd.setCursor(0,2);
lcd.print("R$=");




void loop() 


double Irms = emon1.calcIrms(1480); //Calcula a corrente 
double potencia = Irms * 127.0/1000; //calcula a potência
double consumo = Irms * 127.0/1000 * 0.748406; // calcula o consumo em reais 
Serial.print("Irms: "); //Mostra o valor da corrente
Serial.print(Irms); //imprime a corrente na porta serial
lcd.setCursor(8,0); 
lcd.print(Irms);
// amostragem cálculo de potência
Serial.print(" A \t");
Serial.print("potencia: "); //imprime a potencia na serial
Serial.print(potencia); 
lcd.setCursor(8,1);
lcd.print(potencia); // imprime potência no lcd
//amostragem do cálculo de consumo
Serial.print("consumo: "); // imprime o consumo na serial
Serial.print(consumo);
lcd.setCursor(8,2);
lcd.print(consumo); // imprime o consumo no lcd
Serial.println();
delay(1000);

Oi JFZ, boa noite.

É recomendado que para esta finalidade você utilize um "relógio" preciso, tal qual um RTC.

Você também precisa estabelecer sua base de tempo.

O seu acumulo pode ser a cada segundo, a cada  x milissegundo, ou até a cada x microssegundo.

Cada base desta vai te dar uma determinada razão de erro, que causará uma determinada ordem

de grandeza de distorção dos valores acumulados.

Quanto menor a base de tempo melhor a sua resolução, mas, mais complexo o seu código.

Você pode usar as funções millis() ou micros() para sua referencia de tempo.

No seu code você usou um delay de 1000  (1seg),.

Este delay precisa ser repensado,pois ele afetara' o seu acumulo de consumo.

Para acumular, você pode criar uma variável e a cada base de tempo sua ela acumula o valor  

""  double consumo = Irms * 127.0/1000 * 0.748406; // calcula o consumo em reais "" 

Ex: double consumoACC  = double consumoACC +double consumo

No final de um período (hora/dia/semana/mês) você zera esta variável.

Rui

Boa noite ,Rui

 

 obrigado pela dica, vou tentar criar uma variável tempo utilizando a milliis,  faz pouco tempo que manipulo arduino por isso acho qe vou demorar a desenvolver essa parte..,  vai mudar muito de mili pra segundo o codigo? 

boa noite, modifiquei o programa, a leitura do consumo ainda nao está correta..

se alguem souber um exemplo com um pouco mais detalhes de como trabalhar com o millis , agradeço

programa está assim atualmente..

//Programa : Medidor de energia elétrica com Arduino e SCT-013


//Baseado no programa exemplo da biblioteca EmonLib

//Carrega as bibliotecas
#include "EmonLib.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
EnergyMonitor emon1;

//Tensao da rede eletrica
int rede = 127.0;

//Pino do sensor SCT
int pino_sct = 1;

long tempo_inicial = 0; // função millis de tempo , começa em zero
long intervalo = 1000;
int consumo = 0;


void setup()
{
Serial.begin(9600); // iniciando a serial
lcd.begin(16, 4); // iniciando display
lcd.clear();


emon1.current(pino_sct, 29); //Pino, calibracao - Cur Const= Ratio/BurdenR. 1800/62 = 29.

//Informacoes iniciais display

lcd.print("Projeto TCC");
lcd.setCursor(0,1);
lcd.print("Med de Consumo");
lcd.setCursor(2,0);

delay(5000);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("A=");
lcd.setCursor(0,1);
lcd.print("KW/h=");
lcd.setCursor(0,2);
lcd.print("R$=");


}

void loop()
{
// unsigned long tempo_agora =millis();
// if(tempo_agora - tempo_inicial >= intervalo)
// tempo_inicial = tempo_agora;
// Serial.print(tempo_agora);

{
double Irms = emon1.calcIrms(1480); //Calcula a corrente
double potencia = Irms * 127.0; //calcula a potência

Serial.print("Irms: "); //Mostra o valor da corrente
Serial.print(Irms); //imprime a corrente na porta serial
lcd.setCursor(8,0);
lcd.print(Irms);
// amostragem cálculo de potência
Serial.print(" A \t");
Serial.print("potencia: "); //imprime a potencia na serial
Serial.print(potencia);
lcd.setCursor(8,1);
lcd.print(potencia); // imprime potência no lcd


unsigned long tempo_agora =millis();
if(tempo_agora - tempo_inicial >= intervalo)
tempo_inicial = tempo_agora;
Serial.print(tempo_agora);

{ if (tempo_agora = 1000);


//amostragem do cálculo de consumo
double consumo = Irms * potencia * 0.748406; // calcula o consumo em reais
Serial.print("consumo: "); // imprime o consumo na serial
Serial.print(consumo);
lcd.setCursor(8,2);
lcd.print(consumo); // imprime o consumo no lcd
Serial.println();

}
}
}

Oi JFZ, boa tarde,

Com base no seu code , eu refiz alguns cálculos e segue anexo um code para acumular o consumo em R$.

Na linha --->    int long intervalo = 60000;       // 1 minuto  você estabelece a base de tempo para este acumulo.

Lembre-se que se quiser 1 hora, terá que escrever aí 3600000, (1 Hora), mas o refresh do display

tb levará 1 hora pra acontecer.

Como meu display é 16x2, alterei algumas linha do seu code original pra ver os meus resultados.

isto é fácil de vc resolver.

Rui

Anexos

Boa tarde Rui, Obrigado pela ajuda!!

 fiz o upload  do  code que vc mandou mas nao acumulou o valor em reais, ele ficou fixo,, nao sei se eh por causa da versão do IDE que estou usando ou outra coisa, att ,

testei aqui de novo, ele joga um valor fixo a cada um min nesse code Rui ? 

Oi JFZ, boa noite.
O código anterior mostrava o valor de 1 segundo com se fosse de 1 Hora.
Segue o novo corrigido.


Rui

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço