ESP8266 - Sensor de Corrente ACS712
Este tutorial ensina você a usar o ESP8266 para descobrir quantos amperes um dispositivo consome, com o sensor de corrente de efeito Hall ACS712 de 30A. O NodeMCU tem apenas um pino analógico, o A0, e ele não aceita diretamente o sinal de 5V do sensor, então também vamos adicionar dois resistores. Em detalhes, vamos aprender:
- Como conectar o ESP8266 NodeMCU ao módulo ACS712 com segurança, com um divisor de tensão no pino A0
- Como programar o ESP8266 para calibrar o ponto zero e ler a corrente DC em amperes
- Como medir a corrente AC como um valor RMS
Sugerimos:
- Utilizar o sensor de tensão se você quer saber a tensão de uma bateria ou adaptador, e não a corrente.
- Utilizar o módulo optoacoplador PC817 se você só precisa saber se um sinal de 12V ou 24V está LIGADO ou DESLIGADO.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Sensor de Corrente ACS712
O ACS712 informa ao ESP8266 quanta corrente flui por um fio. Dentro do chip, a corrente passa por um caminho grosso de cobre. Essa corrente cria um pequeno campo magnético, e um sensor Hall colocado ao lado do cobre transforma esse campo em uma tensão. O lado da carga e o lado do ESP8266 nunca se tocam eletricamente (o chip é isolado até 2.1 kV RMS), e o caminho de cobre tem apenas cerca de 1.2 mΩ, então colocar o sensor em um fio quase não altera o seu circuito. Ele funciona tanto para corrente DC quanto AC.
O módulo vem em três versões. Elas têm a mesma aparência, então leia o texto no chip. Este tutorial usa a versão de 30A.
| Versão 5A | Versão 20A | Versão 30A | |
|---|---|---|---|
| Marcação do chip | ACS712ELCTR-05B | ACS712ELCTR-20A | ACS712ELCTR-30A |
| Faixa de corrente | -5A a +5A | -20A a +20A | -30A a +30A |
| Sensibilidade | 185 mV/A | 100 mV/A | 66 mV/A |
| ACS712 30A | |
|---|---|
| Tensão de alimentação | 5V (4.5V a 5.5V), não 3.3V |
| Saída a 0A | cerca de metade da alimentação (cerca de 2.5V a 5V) |
| Saída a +30A / -30A | cerca de 4.48V / cerca de 0.52V |
| Largura de banda | 80 kHz |
| Erro total de saída | cerca de ±1.5% a 25°C |
| Isolamento | 2.1 kV RMS |
| Resistência do caminho de cobre | cerca de 1.2 mΩ |
A saída é "ratiométrica". Isso significa que a saída se move junto com a tensão de alimentação real do módulo. Se o VCC for um pouco menor que 5V, o ponto zero também é um pouco menor que 2.5V. É por isso que o nosso código mede o ponto zero por conta própria, em vez de assumir 2.5V.

O módulo ACS712 tem um conector de 3 pinos e um borne de parafuso de 2 pinos:
- Pino VCC: deve ser conectado a 5V. No NodeMCU, este é o pino VIN (algumas placas imprimem VU).
- Pino GND: deve ser conectado ao GND (0V) do ESP8266.
- Pino OUT: a saída analógica. Ele deve ir para o A0 através de um divisor de tensão, nunca diretamente.
- Bornes de parafuso IP+ e IP-: devem ser colocados em série com a carga. Corte um fio de alimentação da carga e coloque o borne no vão. A corrente que flui de IP+ para IP- dá um valor positivo. Em alguns módulos, esses dois parafusos não têm rótulo.
O módulo também tem um LED vermelho de alimentação que acende quando o VCC está conectado.
※ Nota:
A ordem dos pinos do conector de 3 pinos não é a mesma em todos os módulos. Sempre leia os rótulos impressos na sua própria placa antes de ligar.
Como a Saída do ACS712 Vira Amperes
Sem corrente, o OUT fica na tensão zero (perto de 2.5V). A corrente em um sentido empurra o OUT para cima, e a corrente no outro sentido o puxa para baixo, em 66 mV para cada ampere. Então a fórmula é:
Por exemplo, se o Vzero é 2.40V e o Vout é 2.47V, a corrente é 0.07 / 0.066 ≈ 1.06A.
Por Que o ESP8266 Precisa de um Divisor de Tensão e de Média
O pino A0 da placa NodeMCU aceita de 0V a 3.3V e dá um valor de 10 bits de 0 a 1023. O pino OUT do ACS712 pode subir até cerca de 4.5V, o que é alto demais. Dois resistores resolvem isso: OUT → 10kΩ → A0 → 20kΩ → GND. O pino A0 então vê apenas 2/3 da tensão do OUT (4.5V viram 3.0V), e o código multiplica o valor de volta por 1.5.
Um passo do A0 é de cerca de 3.2 mV. Depois do divisor, são cerca de 4.8 mV no OUT, o que equivale a cerca de 73 mA. Então o sensor de 30A é uma ferramenta grosseira. Ele é bom para cargas de cerca de 0.5A ou mais, como motores, lâmpadas, fitas LED, aquecedores e carregadores, mas não para um único LED pequeno. Além disso, o ADC do ESP8266 é bastante ruidoso, e o rádio WiFi adiciona mais ruído. Uma variação de ±50 a ±100 mA em 0A é normal. É por isso que o código lê o A0 centenas de vezes e usa a média. No ESP8266, fazer a média não é opcional, é o principal truque que torna as leituras utilizáveis.
※ Nota:
A rede elétrica AC (110V/220V) é perigosa. Iniciantes devem praticar com uma carga DC de baixa tensão, como o dispositivo DC de 12V deste tutorial. O borne de parafuso e o lado de cobre do módulo carregam toda a tensão da carga. Nunca toque neles enquanto um circuito de rede elétrica estiver energizado.
Diagrama de Ligação
O ACS712 recebe 5V do pino VIN do NodeMCU, e seu pino OUT chega ao A0 através do divisor de 10kΩ/20kΩ. O dispositivo DC de 12V (como um motor DC, fita LED ou lâmpada), o adaptador de 12V e o borne de parafuso do ACS712 formam um laço separado.

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
| Módulo ACS712 | ESP8266 NodeMCU |
|---|---|
| VCC | VIN (5V) |
| GND | GND |
| OUT | resistor de 10kΩ até o A0, depois resistor de 20kΩ do A0 até o GND |
| Circuito da carga | Conexão |
|---|---|
| Adaptador de 12V (+) | DC power jack (+), depois IP+ do ACS712 |
| IP- do ACS712 | fio (+) do dispositivo DC |
| Fio (-) do dispositivo DC | DC power jack (-), de volta ao adaptador (-) |
※ Nota:
O VIN recebe seus 5V do cabo USB. Não conecte o adaptador de 12V ao VIN. A alimentação de 12V só alimenta o dispositivo DC através do borne de parafuso.
Como Programar o Sensor de Corrente ACS712
- O primeiro passo é definir o pino A0 e os números necessários para a conversão:
- Leia o A0 muitas vezes, faça a média do resultado e converta-o para a tensão no pino OUT:
- No setup(), enquanto a carga ainda está DESLIGADA, salve a tensão média como o ponto zero (1000 leituras).
- No loop(), aplique a fórmula:
Código ESP8266 para o ACS712 - Medir Corrente DC
O código abaixo encontra o ponto zero na inicialização e depois imprime a tensão OUT e a corrente a cada 500 ms. Cada valor impresso é a média de 300 leituras.
Passos Rápidos
Para começar com o ESP8266 na Arduino IDE, siga estes passos:
- Confira o tutorial como configurar o ambiente para o ESP8266 na Arduino IDE se esta é a sua primeira vez usando o ESP8266.
- Ligue os componentes como mostrado no diagrama. Deixe o adaptador de 12V desconectado por enquanto.
- Conecte a placa ESP8266 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
- Copie o código acima e abra-o com a Arduino IDE. Nenhuma biblioteca é necessária.
- Clique no botão Upload na Arduino IDE para compilar e fazer o upload do código para o ESP8266.
- Abra o Serial Monitor. Espere até que a tensão zero seja impressa. A carga deve estar DESLIGADA durante esse tempo.
- Agora conecte o adaptador de 12V para que o dispositivo DC ligue e observe a corrente.
- Se o dispositivo DC for um motor, segure o eixo dele de leve com os dedos. O motor trabalha mais forte e a corrente sobe.
Esta execução usa um motor DC de 12V como o dispositivo DC. As primeiras linhas mostram a carga DESLIGADA. Os valores pequenos em torno de 0.05A são ruído, não corrente real. As linhas do meio são o motor funcionando livremente. As linhas mais altas aparecem quando o eixo é segurado.
※ Nota:
Se a corrente for negativa enquanto o dispositivo DC funciona, a corrente flui de IP- para IP+. Troque os dois fios no borne de parafuso ou simplesmente ignore o sinal de menos.
Medindo Corrente AC
A corrente AC muda de sentido muitas vezes por segundo (50 ou 60 vezes, dependendo do seu país). Então o pino OUT oscila acima e abaixo do ponto zero, e uma média simples daria quase 0A. Em vez disso, medimos o valor RMS, que é o número que um multímetro mostra para AC.
O código amostra o A0 o mais rápido que pode durante uma janela de 200 ms. Isso cobre 10 ciclos completos a 50 Hz, ou 12 ciclos a 60 Hz. Para cada amostra, ele pega a diferença em relação à tensão zero e eleva ao quadrado. Depois:
※ Nota:
De novo: a rede elétrica AC pode matar. Se você não tem treinamento para trabalhar com a fiação da rede elétrica, não conecte o ACS712 a um circuito de rede elétrica. Nunca toque no borne de parafuso enquanto o circuito estiver energizado.
Faça o upload da mesma forma, com a carga DESLIGADA na inicialização. Depois ligue um dispositivo AC, por exemplo um pequeno aquecedor:
Sem carga, o valor RMS não é exatamente 0A. Isso é o ruído do ADC de novo. Valores abaixo de cerca de 0.1A devem ser tratados como 0A.
Vídeo
Conhecimento Adicional
Algumas coisas afetam a precisão da montagem ESP8266 + ACS712:
- O VIN não é exatamente 5V. Quando o NodeMCU funciona pelo USB, o VIN costuma ler um pouco menos (por exemplo, em torno de 4.7V), por causa de um diodo de proteção na placa. A calibração do zero corrige o deslocamento. A sensibilidade também cai um pouco, para cerca de 0.066 × (VIN / 5). Se você medir o VIN com um multímetro, pode colocar esse valor em SENSITIVITY.
- A placa NodeMCU tem seu próprio divisor de resistores no A0 (é assim que o A0 aceita 3.3V). Ele carrega um pouco o nosso resistor de 20kΩ, então as leituras podem ficar cerca de 2% baixas. Se você comparar com um multímetro, pode aumentar o DIVIDER_FACTOR um pouco, por exemplo para 1.53.
- Para correntes pequenas (abaixo de 5A), uma versão de 5A do ACS712 dá cerca de 3 vezes mais sinal por ampere.
Vamos comparar o ACS712 com o sensor de tensão usado no tutorial ESP8266 - Medir Tensão.
| ACS712 30A | Sensor de Tensão | |
|---|---|---|
| O que mede | corrente (A) | tensão (V) |
| Como é conectado | em série com a carga | em paralelo com a fonte |
| AC ou DC | ambos | somente DC |
| Isolado do ESP8266 | sim (efeito Hall) | não (divisor de resistores) |
| Alimentação necessária | 5V | nenhuma |
É evidente que os dois módulos funcionam como um par: o sensor de tensão informa a tensão, o ACS712 informa a corrente e, multiplicando os dois, você pode calcular a potência de uma carga DC em watts.