0

Sensor de Corrente – Como medir energia com o Arduino?

Hoje vamos ver como podemos medir correntes de -30A a +30A utilizando o Arduino ou outro microcontrolador semelhante. Com o módulo Sensor de Corrente ACS714 da Pololu permite medir essa faixa de corrente com uma margem de erro de apenas ±1,5%.

Sensor de Corrente ACS714

Esse sensor utiliza um CI Allegro ACS714 com sensor de efeito hall (datasheet) para medição da corrente, o que garante um perfeito isolamento do circuito. Nesse post vamos trabalhar com baixa tensão e corrente, mas o ACS714 suporta tensões de até 2.1 kV RMS.

MEDIR CORRENTE E TENSÃO

Antes de mostrarmos  como medir corrente com Arduino, vamos ver de uma maneira resumida a diferença de procedimento entre medir tensão e medir corrente, já que uma ligação incorreta pode danificar o circuito ou até mesmo o aparelho medidor.

Para medir tensão, temos este exemplo usando um voltímetro (ou multímetro), um circuito com uma lâmpada e uma bateria. Devemos colocar o voltímetro na escala de tensão (V), e medir dessa maneira, com as pontas de prova em paralelo ao circuito:

 

 

Já para a medição da corrente,  devemos ligar um Amperímetro ou Multímetro) em série com o circuito, na escala de Amperes:

 

 

LIGAÇÃO DO SENSOR DE CORRENTE COM ARDUINO

Vamos testar o sensor utilizando um motor DC de 5v, ligado em SÉRIE com o Sensor de Corrente ACS714. O sensor irá enviar os dados ao Arduino por meio do pino analógico A3. A alimentação do sensor é feita pelo próprio Arduino (5v), e para a alimentação do motor utilizamos pilhas comuns. Assim, podemos mostrar o isolamento do circuito do motor em relação ao Arduino e o restante dos componentes:

No display LCD 20×4, teremos as informações do valor “puro” lido do sensor (entre 0 e 1024) e o valor da corrente calculada pelo programa abaixo. A cada ampere de variação na entrada do sensor, a tensão de saída varia 66mV. A atualização é feita a cada 1 segundo.

//Carrega a biblioteca do LCD
#include <LiquidCrystal.h>

//Inicializa o LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Define o pino analogico usado pelo ACS714
int AnalogInputPin = 3;

void setup()
{
//Define o LCD com 20 colunas e 4 linhas
lcd.begin(20, 4);
//Informacoes iniciais no display
lcd.setCursor(1,0);
lcd.print("==Arduino Portugal==");
lcd.setCursor(0,1);
lcd.print("Sensor : ");
lcd.setCursor(0,2);
lcd.print("Amp :");

Serial.begin(9600);
}

void loop()
{
//Chama rotina que calcula a corrente
double Current = currentSensor(analogRead(AnalogInputPin));
//Imprime as informacoes no display e na serial
Serial.print(" Amp : ");
printDouble(Current, 2);
Serial.print(" A");
Serial.println("");
lcd.setCursor(11,2);
lcd.print("A");
delay(1000);
}

void printDouble(double val, byte precision)
{
Serial.print (int(val));
if( precision > 0)
{
Serial.print(".");
lcd.setCursor(7,2);
lcd.print(".");
unsigned long frac, mult = 1;
byte padding = precision -1;
while(precision--) mult *=10;
if(val >= 0) frac=(val-int(val))*mult;
else frac=(int(val)-val)*mult;
unsigned long frac1 = frac;
while(frac1 /= 10) padding--;
while(padding--) Serial.print("0");
lcd.setCursor(6,2);
lcd.print("0");
Serial.print(frac,DEC) ;
lcd.setCursor(8,2);
lcd.print(frac, DEC);
}
}

long readInternalVcc()
{
long result;
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}

// Calculate current with Allegro ACS714
double currentSensor(int RawADC)
{
int Sensitivity = 66; // mV/A
long InternalVcc = readInternalVcc();
double ZeroCurrentVcc = InternalVcc / 2;
double SensedVoltage = (RawADC * InternalVcc) / 1024;
double Difference = SensedVoltage - ZeroCurrentVcc;
double SensedCurrent = Difference / Sensitivity;
Serial.print("Sen: ");
Serial.print(RawADC);
Serial.print("/1024");
lcd.setCursor(9,1);
lcd.print(RawADC);
return SensedCurrent;
}

Para utilização do programa sem precisar de um LCD, os resultados são impressos também no Monitor Serial, e assim podemos confirmar os valores da corrente lidos pelo sensor.

—————
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica ElectroFun.

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nossoGrupo no Facebook Arduino Portugal – Qual o teu projeto?

Comments

Comentários

Admin

Deixar uma resposta