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

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 medidor de corrente

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.

//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, 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.

4/5 - (1 vote)