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.
Tags:
link aonde peguei o cód. fonte:
http://www.mybotic.com.my/webshaper/store/viewProd.asp?pkProductIte...
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por