Você está na página 1de 16

29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

m r n 0

Início  Módulos  Medidor de corrente AC com ACS712 e Emonlib

Medidor de corrente AC com ACS712 e Emonlib


Módulos 
17 de outubro de 2017 
Haroldo Amaral

Tenho visto um aumento na quantidade de projetos relacionados a medição do consumo de energia


elétrica e acho isso muito interessante por dois motivos, primeiramente porque gosto muito dessa área de
estudo, e segundo porque as pessoas aparentemente têm se preocupado mais com a eficiência no
consumo, seja por questões financeiras, seja por questões ideológicas ou ambas. Dentro do meio maker
uma biblioteca que se destacou bastante foi a Emonlib utilizada no projeto Open Energy Monitor.
Geralmente os projetos envolvendo essa biblioteca utilizam um transformador de corrente que permite o
monitoramento da corrente elétrica, como neste post do blog. Neste artigo demonstrarei como utilizar
outro transdutor, o ACS712 da Allegro, usado como um medidor de corrente AC.

Breve introdução
Muitos de vocês já devem ter visto ou utilizado o ACS712 fabricado pela Allegro, um transdutor de corrente
baseado no Efeito Hall. Geralmente é utilizado para medição de corrente DC, mas também pode ser
utilizado para medição em AC o que o torna muito versátil. Se você quer um transdutor versátil, este é um
grande candidato.


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 1/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

No meu primeiro contato com ACS712 tive a seguinte reação: “Não, isso não vai aguentar os (5A, 20A, 30A)”,
afinal, é só um pequeno SMD de 8 pinos. Mas ele cumpre muito bem sua função.

Como principais benefícios em se utilizar o ACS712 posso citar:

Segurança: Esse componente garante isolamento galvânico entre o circuito que será medido e a sua
saída analógica (desde que sejam tomados os devidos cuidados no projeto).
Simplicidade: O componente em si depende de poucos componentes adicionais para sua utilização,
no nosso caso, não dependemos de nenhum componente já que o módulo possui toda a circuitaria
necessária.
Linearidade: Possui excelente linearidade em todo range de operação.
Versatilidade: Por poder ser utilizado tanto em DC como em AC torna-se muito versátil na sua maleta
de sensores/transdutores.

Uma informação importante: Os modelos do ACS712 referem-se a corrente DC suportada continuamente


pelo mesmo, ou seja, o ACS712-30A pode suportar até ±30A (bidirecional). Para corrente AC um bom
parâmetro da corrente máxima suportada é dividir o valor de pico pela raiz quadrada de 2 (mesmo valor
utilizado para obter o valor eficaz de uma onda senoidal), ou seja, em regime senoidal a corrente máxima
será de aproximadamente 21,21A.

A biblioteca Emonlib por sua vez possui os recursos necessários para medição das grandezas básicas em
corrente alternada. Isso é importante visto que os métodos/algoritmos são bastante diferentes dos
aplicados para medição em corrente contínua. A biblioteca implementa um algoritmo RMS para medição

https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 2/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

da tensão e corrente, o que permite que seus resultados seja muito próximos dos reais, mesmo em formas
de onda muito distorcidas (elevado índice de distorção harmônica), como a corrente em uma lâmpada
fluorescente compacta.

Principais materiais utilizados


Para este projeto de medidor de corrente AC com o ACS712 vamos utilizar:

Placa Nano V3.0


Sensor de corrente ACS712-30A
Display OLED Azul e Amarelo
Fonte para protoboard

Montagem do circuito medidor de corrente AC


LEMBRE-SE, MEXER COM A TENSÃO/CORRENTE DA REDE ELÉTRICA NÃO É UMA BRINCADEIRA,
PODENDO SER POTENCIALMENTE DANOSO OU LETAL CASO OS DEVIDOS CUIDADOS NÃO SEJAM
TOMADOS!

Utilizaremos um pequeno módulo que contém o ACS712-30A, os bornes para conexão com o circuito
elétrico a ser medido, alguns componentes passivos e um barramento com 3 pinos contendo as entradas
de alimentação (VCC e GND) e a saída analógica. A alimentação padrão é de 5V, ou seja, compatível com as
placas Arduino mais tradicionais (Uno, Nano). A saída analógica do ACS712 fica grampeada sobre uma
tensão de aproximadamente VCC/2 (2,5V), quando há corrente circulando a saída irá excursionar sobre este
ponto DC.

O módulo deverá ser inserido “dentro” do circuito onde a corrente será medida, ou seja, a corrente deverá
atravessar o componente. No caso de corrente alternada não existe uma polaridade definida, mas por
questão de segurança indico colocar o módulo na linha do Neutro. Você deve estar pensando, “oras, qual a
diferença?’. Caso uma falha ocorra o potencial de tensão é próximo a zero, minimizando os riscos.


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 3/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

Para este projeto de medidor de corrente AC montei uma pequena extensão com um plug 2P (dois pinos)
para conectar em uma tomada e uma tomada dupla onde os dispositivos serão conectados. A conexão foi
realizada conforme a figura a seguir. Note que o condutor do neutro é interrompido e cada uma das
pontas é conectada aos bornes de medição do módulo, ou seja, a corrente consumida pela carga irá passar
por dentro do ACS712, conforme a figura abaixo.

O esquema de ligação com o Arduino será bastante simples e minimalista. O pino “VCC” do módulo será
conectado a alimentação de 5V fornecida pela fonte para protoboard. O pino “GND” será conectado ao GND
do circuito. A saída analógica “OUT” será conectada ao pino A1 (a biblioteca restringe os pinos que podem
ser utilizados). Além disso temos a conexão do display OLED utilizado para apresentar os valores.


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 4/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

É importante utilizar a fonte para protoboard e com isso manter a integridade e estabilidade da linha de
alimentação. Neste projeto (e na maioria dos projetos), o Arduino utiliza a linha de Vcc como referência. Se
você utilizar a alimentação fornecida pela USB encontrará valores inconsistentes e com certo erro.

A sketch
Antes de partirmos para a sketch do medidor de corrente AC com ACS712 é necessário que instalemos as
bibliotecas utilizadas. Para isso a maneira mais simples é utilizar o próprio utilitário da IDE: “Sketch > Incluir
Biblioteca > Gerenciar Bibliotecas”. Será necessário instalar as seguintes bibliotecas:

Adafruit GFX Library (funções gráficas para o display)


Adafruit SSD1306 (driver para o display oled)
Emonlib (biblioteca de medição)

Irei apresentar a sketch deste projeto e explicar alguns pontos chave. Por segurança, sempre que trabalhar
com um projeto envolvendo a rede elétrica é interessante manter o circuito desconectado da rede
enquanto você carrega o código, após completamente carregado você poderá conectar a extensão
modificada na tomada.

Como o foco deste artigo é mostrar o ACS712 funcionando iremos considerar a tensão como constante,
abordando como medir e condicionar o sinal da tensão em um próximo artigo.

A biblioteca Emonlib foi desenvolvida de uma forma que sensores/transdutores para diversos ranges
podem ser utilizados. Quando vamos configurar a instância da biblioteca indicamos qual o canal do ADC
utilizado e também a constante de calibração. Para o ACS712-30A essa constante foi obtida de maneira
empírica, ou seja, utilizei um multímetro como referência para então calcular a constante que iremos
utilizar. O loop de setup irá basicamente inicializar o display e a biblioteca Emonlib.

Dentro do loop chamamos a função “emon1.calcIrms(1996)” e uma dúvidas mais comuns é de onde vem
os valores dentro dos parênteses. Esse número indica a quantidade de amostras utilizadas no algoritmo
RMS. Um ponto importante, para que a medição tenha boa exatidão é necessário que o número de pontos
seja o equivalente de amostras dentro de N ciclos completos da rede.

Com algumas modificações na biblioteca (usando a função “micros()”) verifiquei que a função inicia uma
conversão do ADC em média a cada 166,86us. Sabendo que um ciclos da rede de 60Hz tem duração de
16,66ms é possível de se calcular que precisamos de 99,84 amostras por ciclos. Quanto mais ciclos
completos forem amostrados, mais estáveis serão as medições. Neste caso escolhi 20 ciclos completos, ou
seja, aproximadamente 1996 amostras.

A função “emon1.calcIrms( )” irá realizar todo o trabalho de amostrar os sinais, realizar os cálculos e
retornar resultado.


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 5/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

Após isso iremos apresentar os dados no display. Além da corrente medida iremos apresentar a potência
aparente consumida pela carga, que é o resultado da multiplicação direta entre a corrente medida pela
tensão “constante” que você definir, no meu caso 127V. Note que a unidade de medida é VA (Volt-Ampère)
e não W (Watts).

Com a sketch rodando você verá no display os valores referentes a corrente RMS e a potência aparente
consumidos pelas cargas conectadas na extensão. Veja na foto que a resolução é bastante interessante.


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 6/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

/***************************************************************
* Medidor de corrente AC utilizando o ACS712-30A
*
* developed by: Haroldo Amaral - agaelema@gmail.com
* 2017/09/23 - v 1.0
***************************************************************/

#include <Wire.h> // biblioteca wire (I2C)


#include <Adafruit_GFX.h> // biblioteca grafica
#include <Adafruit_SSD1306.h> // biblioteca para o display OLED

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET); // cria instancia do display OLED

#include "EmonLib.h" // inclui a biblioteca


EnergyMonitor emon1; // Cria uma instância

#define SAMPLING_TIME 0.0001668649 // intervalo de amostragem 166,86us


#define LINE_FREQUENCY 60 // frequencia 60Hz Brasil

#define VOLTAGE_AC 127.00 // 127 Volts


#define ACS_MPY 15.41 // ganho/calibracao da corrente

double Irms = 0;

void setup()
{
emon1.current(1, ACS_MPY); // Corrente: pino analógico, calibracao.

/* inicia o display oled no endereço 0x3c - 128x64 */


display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

/* limpa o buffer e atualiza o display (vazio) */


display.clearDisplay();

/* fixa texto no display */


display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("ACS712 e Emonlib");
display.display();
}

void loop()
{
/* chama função para calculo da corrente */
Irms = emon1.calcIrms(1996); // Calculate Irms only

/* seta parametros do texto */


display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.setCursor(0,20);

/* imprime a corrente no display OLED */


display.println("Corrente");
display.print("-> "); display.print(Irms, 3); display.println(" A "); 
https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 7/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

/* imprime a potencia aparente no display OLED */


display.println();
display.println("Pot. Aparente");
display.print("-> "); display.print(Irms * VOLTAGE_AC); display.println(" VA ");

/* atualiza a imagem no display */


display.display();
}

A figura abaixo apresenta uma comparação do medidor de corrente AC com o ACS712 e a realizada por um
multímetro, veja que os resultados ficam bastante próximos.

Talvez você note que mesmo sem nenhuma carga o display irá apresentar alguns miliamperes de corrente
(algo próximo a 75mA). Isto acontece por dois motivos: Primeiro pela resolução do ADC do Atmega 328P
juntamente com seu ruído intrínseco, segundo pelo próprio ruído interno do ACS712 (cada modelo possui
seus próprios valores que você pode verificar no datasheet). Esse ruído irá afetar percentualmente as
medidas com menor corrente, sendo que para cargas com maior consumo o impacto pode ser
desprezado.

Chegamos ao final deste artigo sobre o medidor de corrente AC, qualquer dúvida sinta-se a vontade de
deixar seus comentários.

Achou este artigo interessante? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar
uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 8/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

Haroldo Amaral

Apaixonado por eletrônica embarcada, analógica e afins. Colaborador do site FILIPEFLOP.

Deixe uma resposta

Conectar com:

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Comentário

Nome * E-mail *

Site

Publicar comentário

https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 9/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

12 Comentários

Gostaria de contribuir ao blog,  o ACS712 foi descontinuado, o substituto dele é o ACS723.

André Barros 2 de julho de 2018 Responder

Olá André

Nós temos aqui ainda o 712!

Abraços!

André – Equipe FILIPEFLOP

André Rocha 2 de julho de 2018 Responder

Gostaria de entender melhor o calculo da constante de calibração.

#define ACS_MPY 15.41 // ganho/calibracao da corrente

Felipe 4 de agosto de 2018 Responder


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 10/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

Essa constante é obtida empiricamente (até pode ser calculada, mas no final será necessário aplicar
algumas correções).

Inicialmente adotando o valor “1” você compara a corrente medida pelo projeto com um instrumento
de referência, como um multímetro. Aí é calcular a relação entre as duas, o resultado será a
constante.

Haroldo Amaral  4 de agosto de 2018 Responder

Gostaria de saber, se esse modulo lê correntes baixas de mA? Ou só lê correntes na faixa de 1A para cima?
Estou precisando de um sensor de corrente para um projeto de TCC da faculdade.

Gabriel 19 de agosto de 2018 Responder

Com a versão de 5A talvez você consiga medida úteis a partir dos 50mA.

Haroldo Amaral  19 de agosto de 2018 Responder


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 11/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

Na verdade vou ter que procurar outro circuito, vou fazer medidas a partir de 30mA pra cima.
Obrigado pela dica.

Gabriel 24 de agosto de 2018 Responder

Na descrição do item diz que ele possui 5us de atraso.


Isso significa que dada uma variação, ele demora 5ms para chegar ao regime permanente?
e o que acontece entre esse tempo é “perdido”?
No meu caso, preciso medir a corrente instantânea em em 60Hz.
Se ele simplesmente deslocar a onda ainda serviria.

Dário 26 de agosto de 2018 Responder

De qual atrasado de 5us (ou 5ms) você se refere?

Haroldo Amaral  27 de agosto de 2018 Responder

Boa tarde, estou usando uma placa ESP8266 e quando vou declarar no void setup:

emon1.current(1, ACS_MPY);

o 1 não existe, pois faz referencia ao pino analógico 1 do arduino correto? Neste caso deveria usar o pino
analógico do ESP, mas este já esta sendo usado por uma placa multiplexer para aumentar as entradas
analógicas. Eu uso a função getAnalog(1) , onde o 1 é o numero do pino analógico na placa multiplexer. Só

https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 12/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

que como é uma função acho que não esta funcionando bem dentro do void setup, pois fiz isso.

emon1.current(getAnalog(1), ACS_MPY);

não deu certo.

Alguém pode me ajudar quanto a este problema?

José Petri de Lima 21 de outubro de 2018 Responder

O artigo me ajudou muito. Obrigado por compartilhar vosso conhecimento. Gostaria de ver a continuação
abordando como medir e condicionar o sinal da tensão . Abraços .

Gerson 15 de novembro de 2018 Responder

Olá Gerson!

Bom que você gostou do conteúdo do nosso blog!

Você pode dar uma olhada nesse post também:


https://www.filipeflop.com/blog/medidor-de-corrente-sct013-com-arduino/

Nele o sinal passa por um pequeno filtro, é algum condicionamento.

Abraços!

André – Equipe FilipeFlop

André Rocha 16 de novembro de 2018 Responder


Material Necessário
https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 13/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

Sensor de Corrente ACS712 -30A a +30A Fonte Ajustável para Protoboard MB102

Placa Nano V3.0 + Cabo USB para Arduino Jumpers Macho-Fêmea x40 Unidades

R$26,90 a R$13,90 a
Fonte DC Chaveada 9V 1A Plug P4 Display OLED 0.96″ I2C Azul Amarelo

R$34,90 a R$11,90 a
Protoboard 400 Pontos

R$14,90 a R$49,90 a

Maker Hero


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 14/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

R$13,90 a

Categorias

 Arduino (108)

 Display (11)

 Embarcados (60)

 ESP8266 (21)

 Impressão 3D (2)

 Módulos (22)

 Motores e Servos (19)

 News (62)

 Outros (19)

 Raspberry Pi (81)

 Sensores (27)

 Shield (4)

 Wearable (6)

 Wireless (62)

y

y
https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 15/16
29/04/2019 Medidor de corrente AC com ACS712 e Emonlib - FilipeFlop

    

Alguma dúvida? Entre em


contato!
(48) 3307-3495


https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 16/16

Você também pode gostar