- Descrição: O Módulo Real Time Clock RTC DS3231 é um relógio…
Como usar com Arduino – Sensor de Corrente (AC e DC) ACS712 (5A / 20A / 30A)
– Descrição:
O Sensor de Corrente (AC e DC) ACS712 possibilita realizar a leitura de corrente alternada (AC) e contínua (DC). Este sensor utiliza efeito hall para fazer a detecção do campo magnético que é gerado pela passagem da corrente e no pino de saída do mesmo é identificado uma tensão proporcional à entrada. Os terminais de ligação são totalmente isolados da saída do MCU (microcontrolador).
OBS: para esta prática foi utilizado o ACS712-30A, contudo, os passos mencionados aqui são válidos para o ACS712-5A e ACS712-20A.
– Especificações e características (ACS712-30A):
– Controlador: ACS712-30A
– Tensão de operação: 5VDC
– Faixa de medição: -30A a +30A
– Tempo de resposta: 5µs
– Saída analógica proporcional: 66mV/A
– Largura de banda: 80KHz
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário fazer a detecção de corrente AC ou medir o valor de corrente AC (amperímetro). Este sensor é comumente aplicado em projetos de automação residencial, onde é necessário monitorar o consumo de um equipamento elétrico (dentro das especificações do sensor), por exemplo. Para isto, o mesmo deve ser aliado a um Sensor de Tensão AC de forma que seja possível fazer o cálculo de potência.
– Proposta da prática:
Utilizar o Sensor de Corrente (AC e DC) ACS712 (5A / 20A / 30A) em conjunto com o Arduino e medir a corrente AC consumida por uma lâmpada.
– Lista dos itens necessários:
01 – Arduino com Cabo USB
01 – Sensor de Corrente (AC e DC) ACS712 (5A ou 30A)
03 – Cabos Jumper macho-fêmea
01 – Lâmpada
01 – Receptáculo (boquilha)
01 – Cabo paralelo de 1,5mm ou 2,5mm
01 – Tomada (Rede alternada de 127V)
– Esquema de ligação da prática:
ATENÇÃO: MUITO CUIDADO AO EXECUTAR PRÁTICAS QUE ENVOLVAM TENSÃO / CORRENTE ALTERNADA! FAÇA TODAS AS LIGAÇÕES COM O CIRCUITO COMPLETAMENTE DESLIGADO E ANTES DE FAZER OS TESTES VERIFIQUE CADA UMA DAS LIGAÇÕES PARA ELIMINAR A POSSIBILIDADE DE CURTO ENTRE FASE / NEUTRO OU FASE / FASE.
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Biblioteca:
– Importando bibliotecas para o ambiente de programação do Arduino:
Arduino – Importando bibliotecas para a IDE
– Código (Calibração):
1) No código há a variável de calibração CURRENT_CAL. Esta variável tem como função fazer uma compensação no cálculo de forma que o sensor possa ficar calibrado e efetuar medições o mais próximo do real.
2) No código, a variável CURRENT_CAL está com o valor de 18.40, contudo, pode ser necessário que você altere ela para um valor menor ou maior. Isto vai depender do valor de corrente AC que será apresentado no monitor serial do ambiente de programação do Arduino.
3) Após efetuar o carregamento do código abaixo no Arduino, vai ser necessário o uso do multímetro para fazer a medição da corrente que está sendo consumida pela carga. Se você não sabe medir corrente com o multímetro, recomendo que assista alguns vídeos no Youtube que ensinam a fazer a medição de corrente. Em seguida com a lâmpada acesa faça o ajuste do valor de CURRENT_CAL até que consiga uma medição no monitor serial, próxima da medição mostrada pelo multímetro:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include "EmonLib.h" //INCLUSÃO DE BIBLIOTECA #define CURRENT_CAL 18.40 //VALOR DE CALIBRAÇÃO (DEVE SER AJUSTADO EM PARALELO COM UM MULTÍMETRO MEDINDO A CORRENTE DA CARGA) const int pinoSensor = A2; //PINO ANALÓGICO EM QUE O SENSOR ESTÁ CONECTADO EnergyMonitor emon1; //CRIA UMA INSTÂNCIA void setup(){ Serial.begin(9600); //INICIALIZA A SERIAL emon1.current(pinoSensor, CURRENT_CAL); //PASSA PARA A FUNÇÃO OS PARÂMETROS (PINO ANALÓGIO / VALOR DE CALIBRAÇÃO) } void loop(){ emon1.calcVI(17, 100); //FUNÇÃO DE CÁLCULO (17 SEMICICLOS / TEMPO LIMITE PARA FAZER A MEDIÇÃO) double currentDraw = emon1.Irms; //VARIÁVEL RECEBE O VALOR DE CORRENTE RMS OBTIDO Serial.print("Corrente medida: "); //IMPRIME O TEXTO NA SERIAL Serial.print(currentDraw); //IMPRIME NA SERIAL O VALOR DE CORRENTE MEDIDA Serial.println("A"); //IMPRIME O TEXTO NA SERIAL } |
4) O ACS712 possui um pequeno ruído no sinal de leitura, logo, o ideal é encontrar este valor. Para isto, utilizando o código anterior já com a variável CURRENT_CAL calibrada, deixe a lâmpada desligada e veja no monitor serial o valor de corrente que está sendo apresentado mesmo com a lâmpada apagada. O valor que estiver sendo mostrado é o ruído produzido na saída do sensor. Este valor você deverá colocar no lugar do 0.08 que está definido na variável ruído no código que está mais abaixo.
– Código (Final):
5) Na variável float ruído substitua o valor 0.08 pelo valor de ruído que você encontrou anteriormente.
6) Para esta prática, foi utilizado uma lâmpada de 70W. No momento em que a medição da lâmpada estava sendo feita pelo sensor, o multímetro estava apresentado uma corrente de 570mA e no monitor serial a corrente RMS estava variando entre 550mA e 570mA. A tensão AC medida pelo multímetro foi de aproximadamente 121V. Logo, fazendo o cálculo de potência (P = V * I à P = 121 * 0,57 à P = 68,97W), temos que a potência da lâmpada estava se mantendo em 68,97 watts.
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 |
#include "EmonLib.h" //INCLUSÃO DE BIBLIOTECA #define CURRENT_CAL 18.40 //VALOR DE CALIBRAÇÃO (DEVE SER AJUSTADO EM PARALELO COM UM MULTÍMETRO MEDINDO A CORRENTE DA CARGA) const int pinoSensor = A2; //PINO ANALÓGICO EM QUE O SENSOR ESTÁ CONECTADO float ruido = 0.08; //RUÍDO PRODUZIDO NA SAÍDA DO SENSOR (DEVE SER AJUSTADO COM A CARGA DESLIGADA APÓS CARREGAMENTO DO CÓDIGO NO ARDUINO) EnergyMonitor emon1; //CRIA UMA INSTÂNCIA void setup(){ Serial.begin(9600); //INICIALIZA A SERIAL emon1.current(pinoSensor, CURRENT_CAL); //PASSA PARA A FUNÇÃO OS PARÂMETROS (PINO ANALÓGIO / VALOR DE CALIBRAÇÃO) } void loop(){ emon1.calcVI(17,100); //FUNÇÃO DE CÁLCULO (17 SEMICICLOS / TEMPO LIMITE PARA FAZER A MEDIÇÃO) double currentDraw = emon1.Irms; //VARIÁVEL RECEBE O VALOR DE CORRENTE RMS OBTIDO currentDraw = currentDraw-ruido; //VARIÁVEL RECEBE O VALOR RESULTANTE DA CORRENTE RMS MENOS O RUÍDO if(currentDraw < 0){ //SE O VALOR DA VARIÁVEL FOR MENOR QUE 0, FAZ currentDraw = 0; //VARIÁVEL RECEBE 0 } Serial.print("Corrente medida: "); //IMPRIME O TEXTO NA SERIAL Serial.print(currentDraw); //IMPRIME NA SERIAL O VALOR DE CORRENTE MEDIDA Serial.println("A"); //IMPRIME O TEXTO NA SERIAL } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Próxima postagem: Como usar com Arduino – Shield WiFi ESP8266
Eu coloquei o timestamp para acompanhar de quanto em quanto tempo fica dando a amostragem e esse tempo fica variando mais do que de 1 em 1segundo.
Precisava alterar isso, como eu faço para mostrar a corrente sem essa linha de codigo? Tem como?
Mais uma dúvida:
emon1.calcVI(17, 100); //FUNÇÃO DE CÁLCULO (17 SEMICICLOS / TEMPO LIMITE PARA FAZER A MEDIÇÃO)
Eu estou tentando alterar isso já tem um tempo, mas está complicado, eu preciso que registre de 1 segundo em 1 segundo. Poderia me dar um norte?
Você está confundindo.
Se está utilizando uma rede 60Hz não deverá alterar este parâmetros.
Boa tarde, eu procurei no seu texto sobre esse valor de 18.40, ele é um valor padrão que você tem ou você calculou e chegou nele?
Estou tentando medir a corrente de um led, não tá muito calibrado. Pode ser o problema da carga pequena?
Olá Renan.
Agradeço pelo comentário!
Está informado no texto: “No código, a variável CURRENT_CAL está com o valor de 18.40, contudo, pode ser necessário que você altere ela para um valor menor ou maior. Isto vai depender do valor de corrente AC que será apresentado no monitor serial do ambiente de programação do Arduino.”
Correntes muito baixas não serão identificadas pelo sensor.
Na descrição fala +30A/-30A significa que ele mede a corrente nos dois sentidos? Então ele inverte a polarização quando muda o sentido da corrente? Isso é muito interessante para projetos de medidores de duas vias.
Obrigado por compartilhar este exemplo de utilização do ACS712. No caso eu queria monitorar o consumo geral da minha casa. Vi que o sensor fica em série. Acredito que desde que a corrente não ultrapasse o limite estabelecido deve dar certo ne? Os parafusos de fixação desse sensor suportam cabo de 10 mm2?
Consigo medir correntes na faixa de 4 a 20 mA? Com uma boa confiabilidade?
Olá Filipe.
Agradeço pelo comentário!
Para uma corrente tão baixa o ideal é usar junto ao sensor e o Arduino, um CI ou módulo de portas analógicas externas e com resolução de 16 bits.
Olá, preciso verificar 21 lampadas da minha (se estão ligadas ou apagadas) residencia. comprei 21 sensor de 5a. parece que essa ligação é com a porta analógica minha placa não tem essas 21 portas o que devo fazer?
Olá Kleber.
Agradeço pelo comentário!
Utilize um CI expansor de entradas analógicas, como, por exemplo, o MCP3008, onde com um CI você irá obter mais 8 entradas analógicas:
https://www.masterwalkershop.com.br/mcp3008-conversor-expansor-adc-de-10-bits
Euler, o que você acha do HC4067, também resolve, né?
Sim, ele também é uma opção:
https://www.masterwalkershop.com.br/modulo-multiplexador-cd74hc4067-mux-demux-de-16-canais
Olá, Euler Oliveira. Estou tendo problemas para verificar o estado da lâmpada com o acs712.
Baseado 100% no seu código (Estou sem multímetro para alterar o VALOR DA CALIBRAÇÃO ) deixei o console rodando por uns 10 minutos. Com a lâmpada de led desligada as medidas no console ficaram assim: Valor menor de 0.13 e valor maior de 0.31. Então eu só teria que verificar se o valor lido é menor do que 0.31 se for a lâmpada está apagada.
Ex: com a lâmpada desligada. https://i.imgur.com/YSVWm6g.gif
Então fiz os testes com a lâmpada ligada, primeiro fui colher os dados do valor menor e maior. O valor menor teria que ser maior do que o valor maior com a lâmpada desligada ou seja maior do que 0.31. Para minha surpresa o valor menor foi de 0.16 e o maior de 0.36. Então terá momentos que a lâmpada está acesa e o programa achará que está apagada 🙁
Ex: com a lâmpada ligada. https://i.imgur.com/JknZlJQ.gif
Se eu partir para lâmpadas fluorescentes consigo verificar o estado das lâmpadas por essa consumir um pouco mais.
Alguma dica?
Olá Kleber.
Agradeço pelo comentário!
Você vai precisar de um multímetro para fazer a calibração no código e precisa verificar certinho o valor do ruído produzido no sensor enquanto a lâmpada estiver desligada para que este valor seja inserido no código (variável “ruido”.
Outro ponto importante é que para lâmpadas de potência inferior a 50W (em 127V) o sensor não irá conseguir fazer leituras confiáveis ou pode até mesmo nem conseguir fazer a leitura.
bom dia obrigado por repassar conhecimento,uma duvida como seria a ligação se fosse usar só o acs ou seja sem o modulo pra montar em outra placa no caso
Olá Otoniel.
Agradeço pelo comentário!
Nesse caso o ideal é que você leia o datasheet do ACS712 e em seguida prossiga nas implementações desta placa própria.
Não temos nenhum tutorial similar a este tipo de projeto que quer implementar.
Oi, tudo bem Euler Oliveira , então queria saber ae esta medindo AC , queria saber quasi ajustes pra eu medirem DC, pq quero medir e ter resultados em mah… pra possivel calculo do projeto com bateria….
Olá Luiz Henrique.
Agradeço pelo comentário!
Conforme informado no tutorial, foi medido corrente AC.
No momento não temos nenhum tutorial usando o sensor para medir corrente DC.
Olá. Eu preciso instalar um sensor de corrente que meça em 127v quando a corrente atingir 1ah para ligar e desligar um inversor de tensão on-grid num sistema fotovoltaico. Ou seja, o inversor só vai ligar quando a corrente exigida pela carga ultrapassar 1ah. Essa paquinha faz isso?? Dá para acionar um relê de estado sólido ou daqueles comuns com ela??
Olá, tudo bem? Eu conseguiria utilizar este sensor juntamente com este que você apresenta nesse tutorial? https://blogmasterwalkershop.com.br/arduino/como-usar-com-arduino-sensor-de-tensao-ac-0-a-250v-voltimetro-zmpt101b/
Olá Roberto.
Agradeço pelo comentário!
Fazendo a devida programação para ambos é possível sim.
Bom dia, poderia me auxiliar em um projeto que estou desenvolvendo com estes equipamentos?
Olá Geovanna.
Agradeço pelo comentário!
Auxilio em projetos nós não fazemos, apenas compartilhamos tutoriais ensinando a montar práticas específicas para que o usuário possa ter um norte e começar a implementar o próprio projeto.
Olá, Boa Tarde gostaria de saber como faço para adicionar mais de um sensor preciso adicionar 5 sensores. Aguardo sua resposta Obrigado!!
Olá Varley.
Agradeço pelo comentário!
Recomendo que leia a documentação da biblioteca para entender como a mesma funciona e como adicionar novas instâncias e variáveis no código para gerenciar mais de um sensor de corrente.
amanda games nao tem o uqe fazer
Olá, tudo bem?
Muito legal o projeto, parabéns!
Poderia, por gentileza, me explicar, como chegou em 18,40 para a current_call?
Obrigada
Olá Agda.
Na postagem foi explicado o porque e como deve ser ajustada a variável CURRENT_CAL.
Releia as informações a partir do “– Código (Calibração):”.
Olá Euler.
Ainda não consegui compreender o motivo desse valor
Olá Augusto.
Agradeço pelo comentário!
Neste caso, recomendo que leia a documentação da biblioteca EmonLib, pois nela é falado a respeito e pode ser que fique mais fácil de compreender.