14 abril 2016

Como usar o sensor de corrente ACS712

Procurando um sensor de corrente para o seu projeto? Veja neste post como utilizar o sensor de corrente ACS712.

como usar o sensor de corrente ACS712

O sensor de corrente ACS712 (datasheet) pode medir correntes entre -30 e +30A de maneira fácil e segura, pois utiliza o efeito hall para realizar a medição e gerar no pino OUT uma tensão proporcional à corrente detectada (66mV/A).


Sensor de corrente ACS712 Pinagem

A utilização do sensor de efeito hall detecta o campo magnético gerado pela passagem de corrente, isolando completamente os bornes de ligação e os pinos Vcc, GND e OUT.

Esse sensor é do tipo invasivo, ou seja, precisamos interromper o circuito para realizar a medição, diferente de outros sensores em que você pode apenas envolver um dos fios do circuito para medir a corrente. Isso faz do sensor de corrente ACS712 uma ótima opção para instalações permanentes, como por exemplo em projetos de automação residencial e monitoração à distância.

Medidor de corrente com o sensor ACS712


Vamos usar o sensor de corrente ACS712 com Arduino e display Oled, seguindo o esquema de conexão abaixo. A alimentação do sensor ACS712 é de 5V e será feita pelo próprio Arduino. A saída OUT do sensor deve ser ligada à porta analógica A0 do Arduino.

O display Oled utiliza a interface I2C, e tem a cor amarela na faixa superior e o restante dos pixels são acionados na cor azul. Usamos esse display anteriormente no post do medidor de luz com TSL2561.

Circuito medidor de corrente ACS712

Medimos a corrente em um roteador comum, com fonte de alimentação DC de 12V, mas o sensor ACS712 serve também para medir correntes AC.

Programa sensor de corrente ACS712


Antes de carregar o programa no Arduino, baixe a biblioteca U8Glib (download), que vamos utilizar para controlar o display Oled. Descompacte o arquivo e coloque-o dentro da pasta LIBRARIES da IDE do Arduino.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//Programa: Medidor de corrente com sensor ACS712
//Autor: Arduino e Cia

#include <Wire.h>
#include <U8glib.h>

//Definicoes do display Oled
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

//int valor = 0;
String str;
int tamanho;

const int analogIn = A0;
int mVperAmp = 66; 
int RawValue = 0;
int ACSoffset = 2500;
double Voltage = 0;
double Amps = 0;

void draw()
{
  //Comandos graficos para o display devem ser colocados aqui
  u8g.drawRFrame(0, 16, 128, 48, 4);
  u8g.drawRFrame(0, 0, 128, 16, 4);
  u8g.setFont(u8g_font_8x13B);
  u8g.setColorIndex(0);
  u8g.setColorIndex(1);
  u8g.drawStr( 20, 13, "Corrente (A)");
  u8g.setFont(u8g_font_fur25);
  str = String(Amps);
  tamanho = str.length();
  u8g.setPrintPos(64 - (tamanho * 10), 53);
  u8g.print(Amps,3);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Sensor de Corrente ACS712"); Serial.println("");
  Serial.println("");
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255, 255, 255);
  }
}

void loop(void)
{
  Calcula_corrente();
  //Chama a rotina de desenho na tela
  u8g.firstPage();
  do
  {
    draw();
  }
  while ( u8g.nextPage() );
  delay(150);
}

void Calcula_corrente()
{
  RawValue = analogRead(analogIn);
  Voltage = (RawValue / 1024.0) * 5000; // Gets you mV
  Amps = ((Voltage - ACSoffset) / mVperAmp);
  delay(2000);
}

O programa faz a leitura da porta analógica A0, que está ligada ao pino OUT do sensor de corrente ACS712, e calcula a tensão de entrada e também a corrente que está circulando no circuito naquele momento. 

Lembra dos 66mV/A ? Colocamos esse valor na linha 15 na variável mVperAmp, que será usada para calcular a corrente do circuito na subrotina Calcula_Corrente() (linha 69).

Se você tiver um outro sensor ACS712, como os modelos de 5A e 20A, esse número deverá ser alterado. Pàra usar o sensor de 5A, altere o valor da variável mVperAmp para 185, e para o de 20A, altere para 100.

21 comentários:

  1. Faltou deixar melhor explicado que o valor em 'mVperAmp' é tirado do datasheet do componente. Para o modelo de 5A, o valor é 185, e para o de 10A é 100

    ResponderExcluir
    Respostas
    1. Oi Jc!

      Muito obrigado! Post alterado. :)

      Abraço!

      Excluir
  2. Não entendi com clareza a descrição sobre modo de uso, ela opera em tempo real com a malha que esta medindo corrente ?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Exato, a corrente passa pelo sensor, como se fosse um fio passando ao lado do CI, e este mede a corrente via campo magnético.

      Abraço!

      Excluir
  3. Qual seria a voltagem maxima que este sensor trabalha?

    ResponderExcluir
    Respostas
    1. Oi Mauro,

      No datasheet consta a informação de 2100V, mas creio que para isso seja necessário algum tipo de material isolante no circuito. Recomendo a leitura do datasheet para informações adicionais.

      Abraço!

      Excluir
  4. Olá, estou tentando encontrar alguma forma de reduzir a corrente q está passando. Vi algo relativo ao potenciômetro digital AD5206, mas não fiquei seguro se realmente conseguirei diminuir a corrente utilizando este item. Tem alguma ideia?

    ResponderExcluir
  5. Existe alguma forma de reconfigurar algumas portas do arduino durante a execução do código?
    Por exemplo, no setup eu configuro os pinos 4 e 5 como saída e o pino 6 como entrada, e em um determinado momento eu preciso que o 5 seja entrada e o 6 seja saída, é possível rodar uma função dentro do loop que mude esse configuração e, quando sair da função, volte para a configuração inicial?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Interessante a sua pergunta. Eu realmente nunca tentei, mas teoricamente você pode mudar o PINMODE dentro do loop e reconfigurar a porta.

      Abraço!

      Excluir
    2. Vc pode mudar a configuração dos pinos a qualquer momento. Eu costumo usar essa técnica para ler sensores de distancia HCSR04 com apenas um pino do arduino. Coloco o pino como saída para disparar o trigger e depois mudo para entrada para ler o echo. Funciona bem. Mais informações em: https://fperrotti.wikispaces.com/Bibliotecas+para+Arduino

      Excluir
  6. boa tarde; me tire uma dúvida, para uma medição de uma corrente de 380V, teria que ser 3 sensores de corrente para cada uma da fases

    ResponderExcluir
    Respostas
    1. Saudações.
      Em um circuito trifásico,bifasico e monofásico com tensões (V) variadas, você pode medir a corrente (A) de cada fase individualmente.Basta inserir um sensor em cada fase.

      Excluir
  7. Não possuo um display, consigo ver essa resposta do sensor pelo próprio software?
    Obrigado.

    ResponderExcluir
    Respostas
    1. Oi Alysson,

      Consegue sim. Mande a saída para a serial, utilizando comandos Serial.print() e Serial.println()

      Abraço!

      Excluir
  8. Preciso usar um sensor de corrente na linha do chuveiro (41Amp),esse sensor irá apenas dar um Start Up no temporizador, pergunto; existe deste modelo para 41 amperes? Desde já agradeço a colaboração.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Sugiro um sensor de corrente de 100A, dê uma olhada nesse post, por favor: http://blog.filipeflop.com/sensores/medidor-de-corrente-sct013-com-arduino.html

      Abraço!

      Excluir
  9. Ola, utilizei esse esquema enviando os dados pelo serial, mas minha corrente está variando muito. Utilizei ele em AC na rede 220v com uma carga resistiva (ferro de passar) de 1200W, ou seja alto em torno de 5.5A. E a resposta esta como abaixo:

    Sensor:511 Corrente:-0.07A
    Sensor:511 Corrente:-0.07A
    Sensor:512 Corrente:0.00A
    Sensor:535 Corrente:1.70A
    Sensor:600 Corrente:6.51A
    Sensor:420 Corrente:-6.81A
    Sensor:501 Corrente:-0.81A
    Sensor:610 Corrente:7.25A
    Sensor:438 Corrente:-5.47A
    Sensor:475 Corrente:-2.74A
    Sensor:614 Corrente:7.55A
    Sensor:462 Corrente:-3.70A
    Sensor:451 Corrente:-4.51A
    Sensor:512 Corrente:0.00A
    Sensor:511 Corrente:-0.07A
    Sensor:512 Corrente:0.00A
    Sensor:512 Corrente:0.00A

    obs: Ferro estava desligado no inicio e no final da leitura.

    ResponderExcluir
  10. Tenho duas dúvidas:
    1- este sensor consegue me dar o consumo de eletricidade ou simplesmente a tensão que está passando pelo borne?
    2- estou usando em um esp8266, que recebe em sua entrada analógica até 1v, num teste ligando o out direto na porta analógica a leitura ficou fixa, sem variação. Em um Arduino funciona normalmente. Preciso fazer alguma regulagem na tensão? Como?

    ResponderExcluir
  11. Boa tarde. Estou iniciando e peço que me ajudem em algumas dúvidas. Quero medir uma corrente sendo gerada e preciso armazenar esta medição na nuvem. Quais sensores ou placas preciso. Ainda não tenho nenhum componente. Obrigado.

    ResponderExcluir
    Respostas
    1. Boa noite Maurivan,

      Tudo vai depender do tipo de conexão que você tem, mas não vai precisar de muita coisa não. Você pode usar um módulo como o ESP8266, que é relativamente barato e faz a conexão que você precisa, ou ainda utilizar um módulo GSM, usando a rede de telefonia celular para se conectar à internet.

      Por favor faça uma busca aqui no site por "internet" e "gsm", tenho alguns posts sobre isso.

      Abraço!

      Excluir