Arduino - Sensor de Corrente ACS712
Neste tutorial, vamos aprender:
- O que é o sensor de corrente ACS712 e como ele transforma corrente em tensão
- Como conectar o módulo ACS712 30A entre uma carga e o Arduino
- Como programar o Arduino para encontrar o ponto zero e medir a corrente DC em amperes
- Como medir corrente AC com o método RMS

Um sensor de tensão nos diz quantos volts um circuito tem (veja Arduino - Medir Tensão). O ACS712 responde a uma pergunta diferente: quantos amperes passam pelo fio. Com ele, o Arduino pode ver se um motor está trabalhando forte, se uma lâmpada está ligada ou se um carregador ainda puxa corrente.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Qualquer dispositivo DC de 12V serve como nossa carga de teste, por exemplo um motor DC de 12V ou uma fita LED. Você só precisa de um deles.
Sobre o Sensor de Corrente ACS712
O ACS712 é um chip sensor de corrente fabricado pela Allegro. Ele usa o efeito Hall. A corrente passa por um caminho grosso de cobre dentro do chip. Essa corrente cria um pequeno campo magnético, e um sensor Hall ao lado do cobre transforma esse campo em uma tensão. O caminho de cobre tem uma resistência muito baixa (cerca de 1.2 mΩ), então quase não altera o circuito que medimos. Além disso, o lado da carga é isolado do lado do Arduino (2.1 kV RMS), então os fios de alta corrente nunca tocam os pinos do Arduino.

O ACS712 vem em três versões. Elas parecem iguais, mas a sensibilidade é diferente:
| Versão | Faixa | Sensibilidade |
|---|---|---|
| ACS712 5A | -5A a +5A | 185 mV por ampere |
| ACS712 20A | -20A a +20A | 100 mV por ampere |
| ACS712 30A | -30A a +30A | 66 mV por ampere |
Este tutorial usa a versão de 30A. Suas principais especificações são:
| ACS712 30A | |
|---|---|
| Tensão de Alimentação | 5V (4.5V a 5.5V) |
| Faixa de Corrente | -30A a +30A (DC e AC) |
| Sensibilidade | 66 mV por ampere |
| Saída em 0A | cerca de 2.5V (metade do VCC) |
| Saída em +30A / -30A | cerca de 4.48V / 0.52V |
| Largura de Banda | 80 kHz |
| Erro Total de Saída | cerca de ±1.5% a 25°C |
| Isolamento | 2.1 kV RMS |
O módulo ACS712 tem um conector de 3 pinos e um borne de parafuso de 2 pinos:
- Pino VCC: precisa ser conectado ao 5V. O módulo não funciona bem com 3.3V
- Pino GND: precisa ser conectado ao GND (0V)
- Pino OUT: a saída analógica. Ele precisa ser conectado a um pino de entrada analógica do Arduino
- IP+ e IP- (o borne de parafuso): a corrente a ser medida passa por aqui. Ele precisa ser conectado em série com a carga. Em alguns módulos, esses dois parafusos não têm rótulo
O módulo também tem um LED de energia que acende quando o VCC está conectado.
Quando a corrente flui de IP+ para IP-, a tensão de saída sobe acima de 2.5V e a leitura é positiva. Quando ela flui no outro sentido, a tensão fica abaixo de 2.5V e a leitura é negativa. A saída é ratiométrica: ela acompanha a alimentação real de 5V. Se o pino 5V do Arduino fornecer 4.92V, o ponto zero será cerca de 2.46V, não 2.50V.
Como a Tensão Vira Corrente
A regra é simples: cada 66 mV de distância do ponto zero significa 1 ampere. Então a fórmula é:
corrente (A) = (Vout - Vzero) / 0.066
Por exemplo, se o ponto zero é 2.506V e o OUT agora mostra 2.572V, a corrente é (2.572 - 2.506) / 0.066 = 1.0A.
※ Nota:
- A versão de 30A não é para correntes pequenas. O Arduino Uno tem um ADC de 10 bits com referência de 5V, então um passo do ADC é cerca de 4.9 mV, ou cerca de 74 mA. Ela é boa para cargas de cerca de 0.5A para cima: motores, lâmpadas, fitas LED, aquecedores e carregadores.
- Mesmo sem nada conectado, você pode ver uma pequena corrente como ±0.05A a ±0.1A. Isso é ruído normal. Ler muitas vezes e tirar a média deixa esse valor menor.
- Não confie em 2.5V como o ponto zero exato. Meça-o quando nenhuma corrente fluir. Nosso código faz isso quando o Arduino inicia.
Diagrama de Ligação
O ACS712 é alimentado pelo pino 5V do Arduino e seu pino OUT vai direto ao A0. O Arduino Uno funciona a 5V, então não precisamos de um divisor de tensão. No lado da carga, corte o fio positivo entre o adaptador de 12V e o dispositivo DC de 12V (como um motor DC, fita LED ou lâmpada) e coloque o borne de parafuso no meio.

This image is created using Fritzing. Click to enlarge image
Tabela de ligação do Módulo ACS712 e do Arduino Uno
| Módulo ACS712 | Arduino Uno |
|---|---|
| VCC | → 5V |
| GND | → GND |
| OUT | → A0 |
Ligação do lado da carga
| De | Para |
|---|---|
| Adaptador de 12V (+) pelo conector de alimentação DC | → IP+ do ACS712 |
| IP- do ACS712 | → Dispositivo DC (+) |
| Dispositivo DC (-) | → Adaptador de 12V (-) pelo conector de alimentação DC |
※ Nota:
Segurança em primeiro lugar: A rede elétrica AC (110V/220V) é perigosa e pode matar. Por favor, pratique com uma carga DC de baixa tensão, como o dispositivo DC de 12V deste tutorial. O borne de parafuso e seus fios carregam a tensão total da carga, então nunca toque neles enquanto um circuito da rede elétrica estiver ligado.
Como Programar o Sensor de Corrente ACS712
- Defina o pino analógico e a sensibilidade da versão de 30A:
- Leia o pino muitas vezes e tire a média da tensão. Isso remove muito ruído:
- Meça o ponto zero uma vez no setup(), quando a carga está DESLIGADA:
- Converta a tensão em corrente:
Código Arduino - Medir Corrente DC
O código abaixo encontra o ponto zero quando o Arduino inicia. Depois disso, ele imprime a tensão do sensor e a corrente a cada 500 ms.
Passos Rápidos
- Faça a ligação como mostrado no diagrama acima
- Desligue a carga (desconecte o adaptador de 12V) antes de ligar a placa
- Conecte o Arduino ao PC por cabo USB
- Abra a Arduino IDE, selecione a placa e a porta corretas
- Copie o código acima e abra-o com a Arduino IDE
- Clique no botão Upload na Arduino IDE para fazer o upload do código para o Arduino
- Abra o Serial Monitor e espere a mensagem "Done"
- Conecte o adaptador de 12V para ligar o dispositivo DC
- Veja o resultado no Serial Monitor
As três primeiras linhas são o ruído quando nenhuma corrente flui. Aqui, um motor DC de 12V é usado como o dispositivo DC. Quando o motor parte, ele puxa um pico curto (1.39A) e depois funciona com cerca de 0.85A. Se segurarmos o eixo do motor com um dedo, a corrente sobe (1.24A), porque o motor precisa trabalhar mais forte.
Se a corrente mostrar um sinal de menos, a corrente vai de IP- para IP+. Troque os dois fios no borne de parafuso, ou simplesmente ignore o sinal.
Medindo Corrente AC
A corrente AC muda de sentido muitas vezes por segundo (50 ou 60 vezes). Se lermos o OUT apenas uma vez, podemos pegar qualquer ponto da onda, então o resultado fica pulando. Em vez disso, coletamos muitas amostras durante 200 ms, o que cobre 10 ciclos a 50Hz ou 12 ciclos a 60Hz. Depois calculamos o valor RMS, que é o número que um multímetro mostra para AC:
corrente RMS = sqrt(média de (Vout - Vzero)²) / 0.066
※ Nota:
Para medir AC da rede elétrica, o fio da carga passa pelo borne de parafuso, e esse borne carrega 110V/220V. Só faça isso se você souber trabalhar com a rede elétrica com segurança. Nunca toque no módulo enquanto o circuito estiver ligado.
Passos Rápidos
- Mantenha a mesma ligação de 3 pinos entre o ACS712 e o Arduino
- Certifique-se de que a carga AC esteja DESLIGADA quando o Arduino iniciar
- Copie o código acima e abra-o com a Arduino IDE
- Clique no botão Upload na Arduino IDE para fazer o upload do código para o Arduino
- Ligue a carga AC e veja o resultado no Serial Monitor
Aqui, um aquecedor de 500W em 230V é ligado e o sensor mostra cerca de 2.2A. Sem carga, o valor RMS não é exatamente 0, porque o ruído também conta. Para cargas AC pequenas, a versão de 5A do ACS712 dá resultados muito melhores.