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.
O sensor de corrente ACS712 (datasheet) pode medir corrente 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).
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.
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.
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
Oi Jc!
Muito obrigado! Post alterado. 🙂
Abraço!
Não entendi com clareza a descrição sobre modo de uso, ela opera em tempo real com a malha que esta medindo corrente ?
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!
Qual seria a voltagem maxima que este sensor trabalha?
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!
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?
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?
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!
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
O que é esse ACSoffset?
acredito que seja em virtude de que o sensor mede corrente em sentido horario (fase –> neutro) como em sentindo anti-horario (neutro –> fase). por conta disso deve ter este offset para medir somente a corrente fase –> neutro.
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
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.
Não possuo um display, consigo ver essa resposta do sensor pelo próprio software?
Obrigado.
Oi Alysson,
Consegue sim. Mande a saída para a serial, utilizando comandos Serial.print() e Serial.println()
Abraço!
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.
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!
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.
Em AC a corrente não é constante, ela varia conforme a frequência da rede que é 60Hz. Lembra que na sua tomada a corrente é uma onda senoidal? Cada vez que seu microcontrolador faz a leitura do sensor ele pode pegar a senoidal em um ponto diferente, às vezes no pico da senoidal, à vezes no vale e às vezes a meio caminho.
Para resolver o problema, faça com que seu software capture diversas leituras do sensor, continuamente, durante pelos menos 1/60 segundos. A maior dentre as leitura obtidas será a sua corrente de pico.
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?
Quanto à pergunta 1, parece-me que você está confundindo os conceitos corrente, tensão e consumo. Sugiro uma pesquisa no Google por artigos explicando essas três grandezas.
Mas posso adiantar o seguinte: Este sensor mede a corrente em amperes. Como você já deve conhecer a tensão em volts, basta usar uma fórmula simples para calcular o consumo em Watts.
Exemplo:
Tensão = 12V
Corrente=3A
Consumo: W=V*A => W=12*3 => 36 Watts de consumo
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.
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!
há limite de tensões minimas e maximas do circuito em que se quer medir a corrente?
Tem como eu monitorar a corrente de um banco de baterias com esse projeto. as baterias dão um total de 260 amperes e 48 volts em serie.
Precisava utilizar o sensor ACS712 com o NodeMCU, o problema é a única entrada analógica A0 que é de 0 á 1v, alguém pode me ajudar? Não encontrei nada na internet sobre a utilização do NodeMCU com ACS712!
Obrigado…
A solução para sua necessidade é bem simples: você pode usar um divisor de tensão com 2 resistores.
Para aprender a calcular o valor dos resistores, pesquise no Google por "calculo divisor tensão resistores"
Parabéns pelo post amigo, sou iniciante nesta área, estou desenvolvendo um sistema automatizado para aquisição de dados de uma bancada para validação de servo motores, vou utilizar Arduíno, gostaria de saber se eu poderia utilizar o sensor mesmo que o servo opere na faixa de tensão de 7.4V. Obrigado
Oi Gabriel,
Funciona normalmente para essa faixa de tensão.
Abraço e obrigado! 🙂
amigo preciso medir correntes na ordem de no maximo 600 mA , o que é preciso para adaptar nesse circuito ?? Agradeço
boa poderia me ajudar estou usando um arduino mega e nao consigo fazer funcionar obrigado
Bom dia.
Preciso identificar uma corrente de retorno de 1 a 10 mA, consigo com arduino criar algo assim?
Boa noite,
Esse sensor é bem preciso, e realiza medições entre -30 e 30A, acredito que consiga fazer o que precisa com Arduino.
Abraço!
Boa tarde, Sabe me informar o que acontece caso a corrente exceda os 30A? O sensor queima ou apenas para de marcar?
Vi uma foto, onde foi colocado um capacitor (não sei em qual pino) neste sensor, onde conseguiam medir corrente acima de 30A, sabem algo sobre isso?
Oi Oscar,
Realmente não sei nada sobre isso, mas eu recomendo usar um sensor de maior capacidade.
Abraço!
Adilson
Quando você ultrapassar o limite do sensor ele começará a aquecer até queimar.
Você até pode ultrapassar esse limite em alguns poucos amperes e por alguns poucos segundos. Quanto maior for o excesso no tempo ou na amperagem, maior a chance do sensor de queimar por aquecimento.
Enquanto vc estiver dentro do limite, ele pode funcionar 24h.
como ligar no Display de LCD 16×2?
Boa noite esse sensor consegue ler corrente de uma lâmpada de led de 5w num circuito de 127 Vcs. Corrente em torno de 30 miliampere.
Oi Lucas,
Consegue sim.
Abraço!
Adilson
Não entendi muito bem a parte de calcular a tensão de entrada.. vai calcular a tensão ~127 – 220 V, certo? Poderia explicar melhor dando um exemplo medido pelo sensor.
Ola? eu pretendo ligar um motor com modulo rele no arduino e o sensor para poder controlar o motor. A ideia é que quando o motor estiver com uma carga X no eixo e a sua corrente aumentar ate um certo valor o arduino leia esse valor e desligue o modulo rele para parar o motor. Seria basicamente um fim de curso por corrente, parecido com o circuito de um modulo de vidro eletrico que para de subir o vidro depois que chega encima. A ideia é fazer com que o motor gire para um lado e pare quando subir a corrente e depois eu possa inverter o giro e quando subir a corrente novamente ele pare denovo. Alguem pode me ajudar?
Olá!
Preciso montar um equipamento para aferição de relé e disjuntores de MT.
Montamos um transformador de alta corrente e usaremos um TC de 1000/5 para medição. Preciso que, no momento que a placa ler uma determinada corrente, mande um comando para um cronometro e o mesmo inicie a contagem e só irá parar essa contagem no momento que a proteção do disjuntor ou relé atuar.
Com isso tenho o tempo de atuação da proteção.
Consigo programar essa placa para mandar um sinal a determinada corrente?
Alguém saberia explicar como fazer ou então direcionar para outro local?
Muito obrigado desde já
Gostaria de medir corrente ac de 200mA. Esse sensor mede com precisao?
Poderiam me informar?
Boa tarde,
Infelizmente não tenho essa informação. Verifique com o seu fornecedor, por favor.
Abraço!
Adilson
Qual o programa que vocês utilizam para fazer esses esquemáticos do arduíno com esse sensor?
Oi Elisa,
Usamos o Fritzing, que vc pode baixar em fritzing.org
Abraço!
Adilson