ESP32 - Sensor de Corrente ACS712
Este tutorial ensina você a usar o ESP32 para ler a corrente que passa por uma carga com o módulo sensor de corrente ACS712 de 30A e imprimi-la em amperes no Serial Monitor. Começamos com um dispositivo DC de 12V, como um motor DC, uma fita LED ou uma lâmpada, e no final do tutorial mudamos o código para medir corrente AC como um valor RMS.

Saber a corrente diz muito sobre um dispositivo. Um motor que de repente puxa o dobro da corrente normal provavelmente está travado, um carregador de bateria que cai para quase zero terminou, e um aquecedor que não puxa nada tem a resistência quebrada. O ESP32 pode vigiar esse número para você e, mais tarde, enviá-lo para o seu celular por WiFi.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Sensor de Corrente ACS712
O ACS712 da Allegro mede a corrente usando o efeito Hall. Dentro do chip, a corrente passa por um caminho grosso de cobre. Essa corrente cria um campo magnético, e um sensor Hall colocado bem ao lado do caminho transforma esse campo em uma tensão. Como não há nenhuma ligação elétrica entre o caminho de cobre e o lado do sensor, o circuito que você mede fica isolado eletricamente do ESP32. O caminho de cobre também é muito curto, cerca de 1.2 mΩ, então colocar o sensor em um circuito quase não o altera.
O chip vem em três faixas de corrente. Elas parecem iguais, mas cada uma dá uma tensão diferente por ampere. Este tutorial usa a versão de 30A.
| ACS712 5A | ACS712 20A | ACS712 30A | |
|---|---|---|---|
| A faixa de corrente | -5A a +5A | -20A a +20A | -30A a +30A |
| A sensibilidade | 185 mV por ampere | 100 mV por ampere | 66 mV por ampere |
| ACS712 30A (ACS712ELCTR-30A-T) | |
|---|---|
| A tensão de alimentação | 5V (4.5V a 5.5V) |
| A corrente medida | DC e AC, -30A a +30A |
| A saída em 0A | cerca de 2.5V (metade da alimentação) |
| A saída em +30A / -30A | cerca de 4.48V / cerca de 0.52V |
| A largura de banda | 80 kHz |
| O erro total de saída | cerca de ±1.5% a 25°C |
| A tensão de isolamento | 2.1 kV RMS |
| A resistência do caminho da corrente | cerca de 1.2 mΩ |
A saída é ratiométrica. Isso significa que a saída acompanha a tensão de alimentação real: se a linha de 5V na verdade está em 4.9V, o ponto zero se move para cerca de 2.45V. É por isso que o código mede o ponto zero na inicialização em vez de confiar no número 2.5V.
Pinagem do ACS712

O módulo tem dois lados. Um conector de 3 pinos em um dos lados vai para o ESP32:
- Pino VCC: conecte este pino ao 5V. Na placa ESP32, use o pino VIN (ele fornece cerca de 5V quando a placa é alimentada por USB). Não use o pino 3.3V, o sensor precisa de 5V.
- Pino GND: conecte este pino ao GND (0V) do ESP32
- Pino OUT: a tensão de saída analógica. Conecte este pino a um pino analógico do ESP32 por meio de um divisor de tensão (veja a ligação abaixo)
Um borne de parafuso de 2 pinos no outro lado transporta a corrente que você quer medir. Algumas placas imprimem IP+ e IP- ao lado dele, outras não imprimem nada. Este borne deve ficar em série com a carga: corte um fio de alimentação da carga e coloque o borne no vão, para que toda a corrente da carga passe pelo módulo. Quando a corrente flui de IP+ para IP-, a leitura é positiva. Se a sua leitura for negativa, é só trocar os dois fios. Um pequeno LED na placa mostra que o módulo está alimentado.
A Versão de 30A É Boa para Correntes Pequenas?
Na verdade não. A versão de 30A muda apenas 66mV para cada ampere. Com o ADC de 12 bits do ESP32 e o nosso divisor, um passo do ADC é cerca de 17mA na teoria, mas o ADC do ESP32 tem ruído, então a leitura varia ±50 a ±100mA mesmo quando nada está passando. Isso é normal. O sensor combina bem com cargas de cerca de 0.5A ou mais, como motores, lâmpadas, fitas LED, aquecedores e carregadores. O código faz a média de várias amostras para deixar o valor mais calmo. Para cargas pequenas, como um único LED, escolha a versão de 5A.
※ Nota:
A rede elétrica AC (110V/220V) é perigosa e pode matar. Enquanto você aprende, use uma carga DC de baixa tensão, como o dispositivo DC de 12V deste tutorial. O lado de cobre e o borne de parafuso do módulo carregam a tensão total da carga, então nunca toque neles nem nos fios enquanto um circuito da rede elétrica estiver ligado.
Como o ESP32 Transforma a Tensão em Amperes
Em 0A o pino OUT fica na tensão zero (cerca de 2.5V). A corrente em um sentido o empurra para cima, a corrente no outro sentido o puxa para baixo, em 0.066V para cada ampere. Então a fórmula é:
corrente (A) = (Vout - Vzero) / 0.066
Por exemplo, se a tensão zero é 2.47V e o pino OUT agora mostra 2.53V, a corrente é (2.53 - 2.47) / 0.066 = 0.91A.
Há mais um passo para o ESP32. O pino OUT pode chegar a cerca de 4.5V, mas um pino analógico do ESP32 só aceita até 3.3V. Um resistor de 10kΩ e um de 20kΩ dividem a tensão para dois terços antes de ela chegar ao pino, então 4.5V vira 3.0V. No código, multiplicamos a tensão do pino por 1.5 para recuperar a tensão real do OUT.
Diagrama de Ligação entre o ACS712 e o ESP32
Alimente o ACS712 pelo pino VIN do ESP32 (5V do USB). O pino OUT passa pelo resistor de 10kΩ até o GPIO36, e um resistor de 20kΩ vai do GPIO36 ao GND. Usamos o GPIO36 porque ele pertence ao ADC1. Os pinos ADC2 do ESP32 param de funcionar quando o WiFi está ligado, então os pinos ADC1 (GPIO32 a GPIO39) são a escolha segura se você adicionar WiFi mais tarde. O GPIO34 também funciona.
No lado da carga, o adaptador de 12V alimenta o dispositivo DC pelo conector de alimentação DC, e o fio positivo do dispositivo DC passa pelo borne de parafuso do ACS712. Os 12V nunca tocam em nenhum pino do ESP32.
- Como conectar o ESP32 e o sensor de corrente ACS712 usando um protoboard

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
- Como conectar o ESP32 e o sensor de corrente ACS712 usando a placa breakout com bornes de parafuso

| De | Para |
|---|---|
| ACS712 VCC | ESP32 VIN (5V) |
| ACS712 GND | ESP32 GND |
| ACS712 OUT | resistor de 10kΩ, outra ponta no GPIO36 |
| GPIO36 | resistor de 20kΩ, outra ponta no GND do ESP32 |
| adaptador de 12V + (via conector de alimentação DC) | borne IP+ do ACS712 |
| borne IP- do ACS712 | fio + do dispositivo DC |
| fio - do dispositivo DC | adaptador de 12V - (via conector de alimentação DC) |
Como Programar o Sensor de Corrente ACS712
Nenhuma biblioteca é necessária. O core do ESP32 já tem tudo.
- Leia o pino analógico em milivolts. A função analogReadMilliVolts() usa os dados de calibração guardados no ESP32, então é mais precisa que analogRead() com uma fórmula simples:
- Desfaça o divisor de tensão para obter a tensão OUT do sensor:
- Na inicialização, com a carga DESLIGADA, faça a média de 1000 leituras e guarde o resultado como a tensão zero:
- Faça a média de algumas centenas de leituras e depois transforme a tensão em amperes:
Código ESP32 - Corrente DC do ACS712
Passos Rápidos
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para ESP32 no Arduino IDE.
- Faça a ligação como na imagem acima. Confira duas vezes os dois resistores: 10kΩ entre OUT e GPIO36, 20kΩ entre GPIO36 e GND.
- Desligue a carga (deixe o adaptador de 12V desconectado) antes de alimentar o ESP32.
- Conecte a placa ESP32 ao seu PC por um cabo USB Type-C.
- Abra o Arduino IDE no seu PC.
- Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
- Copie o código acima e abra com o Arduino IDE.
- Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32.
- Abra o Serial Monitor e espere a linha "Zero voltage".
- Agora conecte o adaptador de 12V para ligar o dispositivo DC e observe a corrente.
As primeiras linhas são o ruído em repouso: o valor pula alguns centésimos de ampere em torno de zero. Com um motor DC de 12V como dispositivo DC, a corrente sobe até cerca de 1A quando o motor parte. Segure o eixo do motor suavemente com os dedos e a corrente sobe, porque um motor sob carga puxa mais corrente. Desconecte o adaptador e ela volta para cerca de zero.
※ Nota:
Se o valor ficar longe de zero com a carga DESLIGADA, o ESP32 foi iniciado enquanto havia corrente passando. Desligue a carga e pressione o botão EN (reset) do ESP32 para calibrar de novo.
Medindo Corrente AC com ESP32 e ACS712
Com AC, a corrente muda de direção 50 ou 60 vezes por segundo, então a tensão OUT oscila para cima e para baixo em torno da tensão zero. A média dessas amostras ficaria perto de zero e não nos diria nada. Em vez disso, medimos o valor RMS, que é o número que um multímetro mostra para AC:
- Leia o sensor várias vezes durante 200ms. Isso cobre 10 ciclos a 50Hz ou 12 ciclos a 60Hz.
- Para cada amostra, calcule a diferença em relação à tensão zero e eleve ao quadrado.
- Corrente RMS = raiz quadrada da (média de todos os quadrados) / 0.066
A ligação continua a mesma. Só a carga muda, por exemplo uma lâmpada ou um ventilador ligado na rede elétrica.
※ Nota:
De novo: a rede elétrica AC é perigosa. Só meça uma carga da rede elétrica se você souber trabalhar com ela com segurança, mantenha o borne de parafuso e os fios cobertos, e nunca toque neles enquanto o circuito estiver ligado na tomada.
Passos Rápidos
- Desligue a carga AC antes de alimentar o ESP32, para que o ponto zero fique correto.
- Copie o código acima e abra com o Arduino IDE.
- Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32.
- Ligue a carga AC e veja o resultado no Serial Monitor:
Sem carga, o ruído ainda dá um pequeno valor RMS de alguns centésimos de ampere, porque o RMS transforma cada pedacinho de ruído em um número positivo. Tenha isso em mente quando ler correntes AC pequenas.