Академический Документы
Профессиональный Документы
Культура Документы
m r n 0
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.
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.
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.
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:
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
***************************************************************/
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET); // cria instancia do display OLED
double Irms = 0;
void setup()
{
emon1.current(1, ACS_MPY); // Corrente: pino analógico, calibracao.
void loop()
{
/* chama função para calculo da corrente */
Irms = emon1.calcIrms(1996); // Calculate Irms only
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
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
Olá André
Abraços!
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.
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.
Com a versão de 5A talvez você consiga medida úteis a partir dos 50mA.
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.
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);
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 .
Olá Gerson!
Abraços!
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)
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
https://www.filipeflop.com/blog/medidor-de-corrente-ac-acs712-emonlib/ 16/16