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...
Tags:
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por