MEDIÇÃO DE CORRENTE 'CONTINUA'_SENSOR ACS712 - 5Amp.

Galera, primeiramente obrigado pela oportunidade de poder compartilhar conteúdo com todos aqui!

Estou elaborando juntamente com um grupo de alunos da Faculdade um projeto de geração

de energia Eólica, o objetivo é: Gerar energia limpa simulando uma torre em escala; carregar 

uma bateria qualquer e de alguma forma obter controle da energia gerada.

Enfim, meu conhecimento com Arduino é bem singelo, já usei em vários trabalhos acadêmicos

e sem mais delongas, vamos as dúvidas.

-Primeiro: verifiquei varias Sketch's, mas somente para simulações em AC e não DC como necessito, o mais próximo foi:

//Programa : Medidor de Energia preciso
//Usando sensor de Tensão caseiro e sensor de corrente ACS712-05A

/** Incluindo Bibliotecas **/
#include <LiquidCrystal.h> //Carrega a biblioteca LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Define os pinos que serão ligados ao Display

const int viPin = A0;
long valorTensao;
long volts;
long valorCorrente;
float amper;
long amper_aux;
float potencia;
float consumo;
float consumo_aux;
float vs1Pin = 6.273;

//float tarifa = 0.3907;

void setup()
{
/* Inicializa LCD */
lcd.begin(16, 2); //inicia o lcd

/* Inicializa a Serial */
Serial.begin(9600); //inicia a porta serial
}

void loop ()
{

/* Rotina de leitura do Sensor de Tensão */

valorTensao = (vs1Pin); // Atribui a variavel valorTensao o valor do pino vs1Pin
volts = valorTensao; // Atribui a variavel temperatura o valorLido * cte


valorCorrente = analogRead(viPin);
amper = valorCorrente * 2.5 / 511;

potencia = amper * volts;
potencia = potencia / 1000;

consumo_aux = potencia * 0.3907;
consumo = consumo + consumo_aux;

/*** Interface do display ***/
lcd.clear();
lcd.print("Tensao: ");
lcd.print(volts);
lcd.print(" V");
lcd.setCursor(0, 1);
lcd.print("Corrente: ");
lcd.print(amper);
lcd.print(" A");
delay(2000);

lcd.clear();
lcd.print("Potencia: ");
lcd.print(potencia);
lcd.print("KWh");
lcd.setCursor(0, 1);
lcd.print("R$: ");
lcd.print(consumo);
delay(2000);

}

Com essa Sketch, consigo visualizar os valores de corrente e tensão que já é pré setada pelo software, sendo necessario o calculo da potência, se testarem irão ver que aparece valores em um Display 16x2, porém não são reais.

O segundo passo seria desenvolver uma lógica SE/ELSE, para trabalhar os valores baixos de corrente, o que indica que minha bateria foi carregada, acionando uma das saídas do Arduino.

Será que alguem consegue me ajudar com alguma Sketch que leia fielmente o valor de corrente DC? Ou pelo menos como consertar essa que estou trabalhando.

Desde de já, obrigado.

 

Exibições: 2572

Responder esta

Respostas a este tópico

 

valorCorrente = analogRead(viPin);

valorCorrente  = valorCorrente  - 512; // retira o offset de 2,5V do sensor
amper = (float)  valorCorrente * 2.5 / 511 ;

Tenta assim pra ver, se sai algo proporcional a corrente que circula no sensor.

Irei tentar isto também.

Já fiz inúmeras modificações e testes!

Você pode trabalhar com miliamperes e não amperes, deve estar ocorrendo da sua corrente ser muito baixa e não esta conseguindo medir.

valorCorrente = analogRead(viPin);

valorCorrente  = valorCorrente  - 512; // retira o offset de 2,5V do sensor
amper = valorCorrente * 2500 / 511 // agora em corrente em milliamperes

Oi SN, boa tarde,

qual e'  a faculdade que voce(s) cursa(m)? (Eletronoca/Eletrica)?

A medida da corrente deste code está para corrente alternada, então o cara multiplicou por

um coeficiente para corrigir o valor.

Para DC não deve multiplicar  

Esta linha : amper = valorCorrente * 2.5 / 511;  

deve ser modificada para :  amper = valorCorrente ;

Outra coisa, ele usou tambem um coeficiente aqui :   float vs1Pin = 6.273;

este coeficiente tamb'em deve ser modificado para 1.

Tem outra modificação:

Nestas linhas:

      consumo_aux = potencia * 0.3907;
      consumo = consumo + consumo_aux;

remova as 2 e substitua por :

     consumo = potencia;

Teste e depois conte o resultado.

Se funcionar, depois voce pode retirar varias igualdades desnecessarias e simplificar o codigo.

Eu não fiz isto pra ficar mais fácil orientar sobre as modificações necessarias.

Rui

Ok, vou tentar. Muito obrigado por enquanto.

Por acaso vocês chegaram a testar a Sketch?

Vou modificar e posto os resultados aqui.

Obrigado.

Realizei os testes, não deu certo! Não sei mais o que fazer!

//Programa : Medidor de Energia preciso
//Sensor de corrente ACS712-05A

/** Incluindo Bibliotecas **/
#include <LiquidCrystal.h> //Carrega a biblioteca LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Define os pinos que serão ligados ao Display

const int viPin = A0;
long valorTensao;
long volts;
long valorCorrente;
float amper;
long amper_aux;
float potencia;
float consumo;
float consumo_aux;
float vs1Pin = 1;

//float tarifa = 0.3907;

void setup()
{
/* Inicializa LCD */
lcd.begin(16, 2); //Inicia o LCD 16 colunas X 2 Linhas

/* Inicializa a Serial */
Serial.begin(9600); //Inicia a porta serial
}

void loop ()
{

/* Rotina para valor de tensão da fonte */

valorTensao = (vs1Pin); // Valor constante para tensão da fonte 6.273, atribuí o valor medido na sensor ACS712 à valorTensao
volts = valorTensao; // Variavel para calc. da potência, atribuí o valorTensao à volts

/* Rotina para leitura valor de corrente no sensor */

valorCorrente = analogRead(viPin); // Lê o valor da corrente no pino A0 e atribui este valor à viPin
amper = valorCorrente; // Atribuí o valor lido no sensor à amper, para realizar o calculo posteriormente

potencia = amper * volts; //Calcula a potência consumida
potencia = potencia / 1000; //Divide por mil para igualar o valor medido e representar no Display em kW

consumo_aux = potencia * 0.3907; //Simula o consumo em R$, tarifa de R$ 0.3907 por kW/h
consumo = potencia; //Soma o valor calculado no valor imediato anterior

/*** Interface do display ***/
lcd.clear();
lcd.print("Tensao: ");
lcd.print(volts);
lcd.print(" V");
lcd.setCursor(0, 1);
lcd.print("Corrente: ");
lcd.print(amper);
lcd.print(" A");
delay(2000);

lcd.clear();
lcd.print("Potencia: ");
lcd.print(potencia);
lcd.print("KWh");
lcd.setCursor(0, 1);
lcd.print("R$: ");
lcd.print(consumo);
delay(2000);

}

Sérgio, vamos por partes. 

Você conectou o sensor de corrente em série com o Gerador eólico e a bateria ? 

Favor enviar um diagrama. Qual gerador esta usando ? 

O sinal CA do gerador esta sendo retificado ?

Qual bateria esta usando? Qual a corrente de carga ?

O ACS712-05B poderá medir no máximo uma corrente de 5A. 

O sensor ACS712-05B tem uma sensibilidade típica de  185  mV/A (pode variar entre 180 e 190) 

Data sheet do sensor :  Existe o sensor ACS712-05A ??

http://www.allegromicro.com/~/media/Files/Datasheets/ACS712-Datashe...

Muito importante que a tensão de alimentação do Sensor e do Arduino seja conhecida. 

Meça a tensão com um multimetro. Informe qual tensão medida. Essa tensão é a referência usada pelo 

conversor ADC do Arduino. Existem rotinas específicas para conferir essa tensão. 

valorCorrente = analogRead(viPin);  Ok, você esta medindo a tensão de saida do sensor ACS712-05A


amper = valorCorrente * 2.5 / 511;  Porque isso ? 

Veja no exemplo do site que enviou : 

dVoltage = (RawValue / 1023.0) * 5;                              // voltage value in V
dAmps = abs((dVoltage - ACSoffset) / VperAmp);          // current value in A

A tensão de offset do sensor ACS712 é de 50% da tensão de alimentação. 

Considerando que a tensão de alimentação seja de 5V, o offset será de 2,5V.

VperAmp = 0,185 ( sensibilidade do sensor) - Você poderá alterar esse valor entre 180 e 190 para aumentar a precisão na medição. 

Faça um teste usando esse calculo !

dVoltage = (RawValue / 1023.0) * 5;                              // voltage value in V
dAmps = abs((dVoltage - ACSoffset) / VperAmp);          // current value in A

Faça testes com o programa e averigue com um amperimetro. 

Dependendo da ligação : 

Se a corrente for negativa, estará consumindo corrente

Se a corrente for positiva, estará carregando a bateria 

Envie os resultados. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço