Dúvidas Monitor de Energia com Arduino

Olá, estou buscando um projeto para meu TCC de engenharia elétrica, e gostei do video que o Manoel Lemos fez do projeto Monitor de Energia com Arduino apresentado no Campus Party, tenho bastante dúvidas que são as seguintes, no caso eu queira monitorar 3 fases o que eu preciso incrementar nos códigos e no hardware?, e por favor explique como faz para configurar o servidor web, se possivel um passo a passo pois essa parte não tenho conhecimento, qual servidor usar, configuração para comunicação entre arduino e servidor web, etc, o post do Manoel Lemos abriu uma luz no fim do túnel pois eu estava sem projetos para meu TCC que incorporasse microcontroladores e elétrica de potência, agradeço a todos que deram uma atenção a meu projeto.

2 curtidas

Olá @lucaswmsilva, tudo joia?

Vamos lá…

  1. Monitorar 3 fases: isto é bastante simples. Basta você precisará de 3 sensores de corrente (um para cada fase) e de repetir o circuito de integração do sensor de corrente para o Arduino. Sendo que cada um deles entrará numa entrada analógica diferente do Arduino. Depois, no software, você precisará de criar três instâncias do monitor de energia, uma para cada fase, repetindo o código que faz isto e configurando corretamente o pino onde cada sensor está conectado.

  2. O servidor de web pode ser implementado de várias maneiras. O jeito mais simples é um pequeno script php que simplesmente recebe os valores enviados pelo Arduino nos parâmetros da URL. Você prefere trabalhar com qual tecnologia para o servidor web? Na apresentação utilizei o servidor de web SINATRA com a programação em RUBY.

Espero ter ajudado e fico aguardando novos contatos.

[]s e obrigado por usar o Fórum Fazedores.

Ahh… e se quiser/puder nos ajudar, divulgue nosso site e nosso fórum em sua escola. Tenho certeza de que outros alunos também gostarão de participar desta aventura. :wink:

2 curtidas

Olá pessoal
estou pensando em fazer um medidor de energia com o arduino, mas gostaria também de medir o fator de potência.
Alguém poderia me ajudar.
Obs.:
A base para medir o fator de potência seria eu ter as potências aparente (VA) e ativa (W) consumidas

1 curtida

Manoel sou seu fã acompanho seus trabalhos há algum tempo, uma vez te mandei um email com algumas dúvidas, estou desenvolvendo o projeto do open energy monitor, porém travei na parte de enviar as informações para página web dos sensores de corrente, os CT, vc me deu uma luz de usar o Ruby e tal, mas como nunca mexi no Ruby antes estou tomando uma surra e não sai nada, meu TCC tem q ser entregue em dezembro e não consegui desenvolver a parte de envio de dados para página web, por favor me envie algum exemplo de arquivo de PHP, ou envie algum material, arquivos, ou como rodar aqueles arquivos no github que vc disponibilizou para usar no Ruby, resumindo meu problema é visualizar os dados na página web, por favor me ajude, se possível eu te dou uma grana pra me ajudar, estou desesperado. Vc possui algum contato direto? Sou amigo do Tiago e do Marcelo, eu estava presente no Arduino Day, eu te add no face, Abraços.

Olá Lucas, relax… vou tentar montar um código bem simples em PHP para receber os dados, ok?
Vc teria um servidor com PHP para eu usar?

ohhh glória Deus abençoe Manoel, eu uso o wamp e o xampp, muito obrigado mesmo, sem palavras mesmo cara obrigado de coração.

:slight_smile: que desespero @lucaswmsilva! uhahuahuahu :slight_smile:

Brother, é TCC meu velho, sabe quando a situação ta no ultimo segundo do segundo tempo, sou eu nesse projeto, mas confio em vcs galera.

Obrigado pela força Manoel, preciso muito da sua ajuda, acredito que vc entenda minha situação afinal um dia vc já deve ter passado por isso na faculdade, aguardo ansiosamente pra ver funcionando, e parabéns pelo prêmio de Os mais influenciadores de SP, vc merece, abraços .

Vamos lá @lucaswmsilva

  1. Estou assumindo que você está com Apache, PHP e MySQL funcionando ok em sua máquina. Fiz na minha com a instalação padrão do MAMP que é tipo o XAMP mas para Mac.

  2. Crie um database chamado energy e crie uma tabela chamada medidas com a seguinte estrutura:

  3. Agora basta criar uma pasta chamada energy na raiz do seu apache (htdocs) e colocar nelas dois aquivos:

  1. Você precisara ajustar estes arquivos para os dados de seu servidor (host, porta, usuario, senha, etc).

  2. Você também precisará mudar no código do Arduino os parâmetros do servidor e a URL para onde ele enviará os dados.

Bom… acho que é isto! Se tudo der certo depois de enviar medidas para o servidor você deverá ver algo assim:

PS:. Não melhorei as explicações, comentários, código, etc porquê estou bem ferrado de tempo por aqui. :wink:

Se tiver dúvidas avise!

s e Boa Sorte!

Manoel Lemos

Caro mestre Manoel, estou desde ontem tentando descobrir os erros que estão na página web, as imagens estão em anexo.
Estou utilizando o Wamp Server 2.5 para Windows 8.1 64bits, testei também com o Xampp, porém o erro foi o mesmo. O banco de dados está configurado conforme você me explicou, mas favor peço que confira na foto em anexo, O código do Arduino está apontando para o endereço IP da minha máquina local, onde está instalado o wamp server (minha máquina local), por favor confira na imagem anexo, sketch Arduino a seguir, tem imagem anexo também. =>

// Envia dados para servidor. void sendData(double Irms, double Potencia) { client.connect(“192.168.1.103”,4000); // endereço do Meu Servidor Wamp ou Xampp …Conecta no servidor na porta 80 (vamos usar http). delay(500);

OBS: A parte do código PHP que fica visivel na página web desapareceu substituindo <? por <?php, mas não sei se é exatamente isso que está afetando a conexão com o bando de dados,mas os erros persistem, o que você acha que pode ser? será que possa ser privilégios de acesso no bando de dados? se for, como recomendaria a conexão com o banco de dados? será que pode ser configuração do endereço de IP no código do arduino, apontamento para o servidor?
Acredito que deva ser um erro idiota por minha parte, porém algum detalhe essencial para o correto funcionamento.
Manoel desculpe tomar seu tempo, mas estou na reta final, obrigado de verdade, forte abraço.

Olá @lucaswmsilva, vamos lá…

Primeiro vamos garantir que seu servidor (com o código PHP) está funcionando corretamente:

  1. Sim, troque os <? por <?php em todo o código!
  2. O que acontece quando você abre a URL: http://localhost/energy/index.php ?
  • Se seu servidor não estiver na porta 80, use a url assim (alterando o número da porta): http://localhost:8080/energy/index.php
  • Se tudo der certo, você deverá ver a tela que apresenta o gráfico de consumo, o consumo e as últimas leituras.
  1. Agora vamos ver se o script que recebe as leituras está ok.
  1. Agora repita o passo 1 e veja se apareceram dados na página (inclusive o gráfico).

Se tudo estiver ok, passaremos para o sketch do Arduino. Mas basicamente o que deve estar de errado no seu código é que a URL e a porta estão erradas!

Nele o sketch deve ser adaptado para as características de seu ambiente. O único trecho de código a ser modificado é o que está abaixo. Veja as dicas nos comentários. São 3 pequenas modificações (ip, porta e URL).

// na linha abaixo altere o IP para o IP de seu servidor
// e também altere a porta 4000 para a porta de seu servidor
client.connect("192.168.0.100",4000);	
delay(500);
  
if (client.connected()) {
  // na linha abaixo fica a URL que deve ser modificada
  // originalmente era /medida mas deve ser alterada para
  // /energy/medida.php?
  client.print("GET /energy/medida.php?");
  client.print("irms=");
  client.print(Irms);
  client.print("&potencia=");
  client.print(Potencia);
  client.println(" HTTP/1.1");
  client.println("Host: 192.168.0.100");
  client.println();
  delay(500);

Acho que agora vai!

[]s

Manoel

Manoel, essas dicas que voce passou deu resultado, consegui a partir do que voce me mostrou, tirar o erro do código PHP que aparecia parte do código na página web, no sketch arduino eu estava errando na parte de configurar os dados do servidor ( IP + Porta ), não havia declarado a porta, apenas o IP do servidor, analisando os dados recebidos na página web, percebi que o horário está diferente do horário real, acredito que alguma configuração do MySQL resolva, e também percebi que existe o seguinte erro, veja em imagem anexo: Warning: mysql_close(): no MySQL-Link resource supplied in C:\xampp\htdocs\energy\index.php on line 152, alguma sugestão?

Uma outra dúvida que me surgiu, como eu poderia incorporar na página web o consumo momentâneo, dos dados obtidos dos sensores, ex: um campo com Corrente e outro com Potência, mostrando em destaque na página.

Uma outra dúvida e sugestão para podermos melhorar ainda mais o monitor de energia, seria como colocar um visor LCD para mostrar os valores que são mostrados na página, olhando no site energymonitor.org eu vi um post que estava rolando no fórum que existe uma código em Pearl que envia informações para o arduino e mostra os valores do bando de dados no LCD, alguma idéia melhor mestre Manoel? e cara, ja estou começando ver a luz no fim do túnel, vou começar a parte escrita do TCC, graças a você, muito obrigado Manoel Lemos, e vamos conversando para aperfeiçoar o monitor de energia, se soubesse que ia quebrar tanto a cabeça com esse projeto eu tinha pego emprestado o seu já montado lá no dia do Arduino Day rsrsrs, forte abraço.

1 curtida

Olá @lucaswmsilva,

Excelente!!! Tivemos um bom progresso, né?

  1. O horário vem do PHP mesmo (ao inserir o registro no banco ele pega o horário do servidor. O que pode estar rolando é ele apresentar sem formatação e mostrar num timezone maluco. Você consegue identificar qual é o erro do horário? É algumas horas pra frente ou para trás?

  2. O erro do mysql_close() é que tem um mysql_close() a mais no código. Na linha 152. Acho que tirando ele dali a mensagem vai sumir. De qualquer modo você precisa checar se para cada connect tem um close e se eles estão no local correto. A mensagem de warning não é tão séria, não chega a ser um erro. Sinceramente não tomei este tipo de cuidado pela pressa. O ideal mesmo era juntar todas as aberturas do banco numa única e também um único fechamento. Com jeito você mesmo consegue organizar seu código assim. É tempo e paciência.

  3. O consumo momentâneo é facilmente calculado usando a última leitura de corrente e potência. Veja, se é momentâneo é melhor ver a potência (que é a velocidade que você está consumindo). O consumo é a potência vezes o tempo. Então na leitura momentânea o que faz sentido é a potência. Ou você pode pensar numa janela de tempo… tipo… na última hora o consumo foi de tanto ou a potência media foi de tanto. Basta pegar os dados - que você já tem - e fazer a conta que fizer sentido.

  4. Isto é bem simples… basta conectar o display no Arduino seguindo os vários tutoriais que existem na rede e, a cada loop de medição, imprimir a corrente e a potência da última medida nele. Se quiser por o consumo no Arduino a coisa fica mais chata pelas contas e porquê ele não tem um relógio interno. Mas também dá para fazer.

Agora que você já tem o básico funcionando @lucaswmsilva o caminho é entender de fato como cada pedaço do software funciona - e também a teoria do cálculo da potência e do consumo por trás de tudo - e ir fazendo suas modificações.

Boa Sorte!

@mlemos

  1. O horário corrigi com uma configuração no servidor Xampp, precisamente no arquivo de configuração do Timezone no Apache.

  2. O erro mysql_close() realmente foi o que vc passou, tinha um mysql_close a mais, eu exclui e sumiu o erro.

  3. Cara eu estou querendo mostrar na página web o cálculo do gasto em R$ a partir da somatória dos valores totais de KWh e mostrar num campo próximo ao gráfico de consumo, só que eu não consigo adaptar esse cálculo ao código index.php, sendo que, segundo os valores atuais da Eletropaulo o preço do KiloWatt/hora em SP é de R$ 0,17106, então o cálculo seria:
    R$ 0,17106 x KiloWatt obtido dos sensores = Preço da Conta de energia, vc poderia me dar uma luz de como efetuar esse calculo no PHP e printar esse valor num campo ao lado do gráfico.

Segue um exemplo de cálculo do preço do KWh preço atual de SP Capital ( Eletropaulo),
Para saber quantos KWh um equipamento consome faça o seguinte cálculo, vamos utilizar um chuveiro como exemplo, considerando a potência de 5500 W na posição inverno; a fórmula é:

Consumo = (potência em watt/1000) x (tempo) número de horas = total em KWh, que nesse caso será: (5500/1000) x 1 hora de uso do chuveiro = 5,5 KWh x 0,17106 (preço do KWh em sp) =
R$ 0,94083

  1. Em relação a adaptação do código PHP e Sketch Arduino para 3 sensores, seria incluir mais 2 variveis ( CT 2 e CT 3) CT modelo SCT 013 100 no sketch Arduino? No index.php eu precisaria adaptar o código para mais 2 sensores, ou o sketch do Arduino já mandaria por GET os valores de potência e corrente já somados de cada sensor CT1 + CT2 + CT3?

Obrigado pela colaboração, logo reunirei todo o material e postarei um tutorial passo a passo aqui no fórum,

Abraços.

Lucas Macedo

Olá @lucaswmsilva, vamos lá…

É bem simples fazer o cálculo, basta multiplicar o consumo em KWh pelo preço do KWh da Eletropaulo.

A variável $consumo do código do index.php tem o consumo em joules.
Dividindo por 3600000 temos o consumo em KWh (é assim que ele é apresentado na página).
Então… poderia ter algo assim:

$gasto = $consumo / 3600000 * 0.17106

E ai na variável @gasto você teria o gasto de energia naquele período.

Para ler três fases, você precisa de:

  • três circuitos de interface dos SCTs com o Arduino (um em cada pino)
  • três SCTs
  • repetir o código que criar o monitores de energia

Você pode somar as potências no Arduino e enviar só o total (ai seu código PHP não muda nada).
Ou pode mudar o código do Arduino e do PHP para receber seis parâmetros na URL (no GET) ao invés de apenas 2.

Bele?

Bela clareada nas ideias @mlemos, vou trabalhar nisso agora, logo posto os resultados,
mais uma vez salvando a pátria, valeu mesmo mestre, abração.

1 curtida

Manoel, quando eu ligo o nosso arduino, sem colocar o sensor no fio da carga, ele já mostra um consumo relativamente grande (na faixa de 23 watts). Como fazer para zerar essa medição errônea?

@caiocosta Esse resíduo de potência que vc enxerga mesmo não medindo nada (em vazio), pode ser proveniente de várias variáveis: Interferência externa, ex: seu notebook muito próximo do circuito interfere e muito nas medidas, os valores dos resistores divisores de tensão tem que ser de valores entre 10K ~ 470K ( a tolerância desses resistores tem que ser de no máximo 1%), no seu código verifique se a calibração está em 111.11 para sensor CT 013 000 de 100A MAX, e outro detalhe que tem que ser observado é a qualidade de solda dos componentes, tudo tem que estar bem colocado e bem soldado para evitar mal contato, pois qualquer problema de solda mal feita ou fios longos demais interferem nos resultados.

hum…ótimas observações. De fato meu notebook está bem próximo do circuito, vou testar com ele mais distante. Agora que você citou me surgiu uma dúvida: essa calibragem para o sensor sct-013 ( que é o que eu uso), em qual linha eu altero ela, pois eu fiz alguns testes ontem com essa calibragem mas não vi diferença. Seria por acaso nessa linha:
"emon1.current(CT_PIN, 64); // Calibração do sensor (deveria ser 111.1 para o SCT-013-100)."
e aonde está 64 eu colocaria 111.11?
Já com relação aos resistores do divisor de tensão. Não seria o caso então de se colocar um trimpot neste range?