Arduino Nano ESP32 - Sensor de Corrente ACS712
Quanta corrente o seu motor realmente puxa? A sua fita LED de 12V está consumindo o que diz o rótulo? Neste guia, vamos aprender a usar o sensor de corrente ACS712 com o Arduino Nano ESP32 para descobrir. O sensor funciona com 5V, mas os pinos analógicos do Nano ESP32 aceitam apenas 3.3V, então também vamos adicionar um pequeno divisor com dois resistores. Em detalhes, vamos aprender:
- Como o módulo ACS712 de 30A transforma uma corrente em uma tensão e o que fazem seus pinos.
- Como conectar o módulo ACS712 ao Arduino Nano ESP32 com segurança, com um divisor de tensão de 10kΩ/20kΩ.
- Como escrever um programa para o Arduino Nano ESP32 que encontra o ponto zero por conta própria e imprime a corrente DC em amperes.
- Como alterar o programa para medir corrente AC (RMS).

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 é um pequeno chip da Allegro que mede corrente, tanto DC quanto AC. Dentro dele, a corrente passa por um caminho grosso de cobre. Essa corrente cria um campo magnético, e um sensor Hall bem ao lado do caminho transforma esse campo em uma tensão. O caminho de cobre não está ligado ao lado do Nano ESP32 de forma alguma (ele é isolado até 2.1 kV RMS), e sua resistência é de apenas cerca de 1.2 mΩ, então quase não altera o circuito que você mede.

O módulo tem um conector de 3 pinos de um lado e um borne de parafuso de 2 pinos do outro lado:
- Pino VCC: conecte a 5V. No Arduino Nano ESP32, use o pino VBUS (5V do USB). O pino de 3.3V não é suficiente para este chip.
- Pino GND: conecte ao GND (0V).
- Pino OUT: tensão de saída analógica. Conecte-o ao pino analógico A0 do Arduino Nano ESP32 através do divisor de tensão (veja a parte da ligação).
- Borne de parafuso (IP+ e IP−, às vezes sem rótulo): ele vai 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 sensor. A corrente que entra em IP+ e sai em IP− dá uma leitura positiva.
Um pequeno LED na placa acende quando o módulo tem alimentação.
A 0 A, o OUT fica na metade da alimentação, cerca de 2.5V. Quando a corrente flui em um sentido, o OUT sobe. Quando flui no outro sentido, o OUT desce. A saída acompanha a alimentação real de 5V (ela é ratiométrica), então se o VBUS for 4.9V, o ponto zero é cerca de 2.45V.
O chip vem em três faixas de corrente. Este guia usa a versão de 30A.
| ACS712 5A | ACS712 20A | ACS712 30A | |
|---|---|---|---|
| Faixa de corrente | ±5A | ±20A | ±30A |
| Sensibilidade | 185 mV/A | 100 mV/A | 66 mV/A |
| Módulo ACS712 30A | |
|---|---|
| Tensão de alimentação | 5V (4.5V a 5.5V) |
| Saída a 0 A | cerca de 2.5V (metade do VCC) |
| Saída a +30 A | cerca de 4.48V |
| Saída a −30 A | cerca de 0.52V |
| Sensibilidade | 66 mV por ampere |
| 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 faixa de 30A é grande, então o sensor não é bom para correntes pequenas. O Nano ESP32 lê seu pino analógico com 12 bits, e depois do divisor um passo é de cerca de 18 mA. Com o ruído normal, você verá as leituras variarem cerca de ±50 a 100 mA mesmo sem carga. Então use-o para cargas de cerca de 0.5 A ou mais: motores, lâmpadas, fitas LED, aquecedores e carregadores. O código faz a média de muitas leituras para deixar os números mais calmos.
Como a Saída do Sensor Vira Amperes
Cada ampere move a saída em 66 mV, a partir da tensão zero. Então a fórmula é:
Exemplo: se o Vzero é 2.49V e o Vout lê 2.56V, a corrente é (2.56 − 2.49) / 0.066 ≈ 1.06 A.
Não confie cegamente no número de 2.5V. Cada módulo e cada porta USB é um pouco diferente. O código mede o Vzero na inicialização, enquanto nenhuma corrente flui, e usa esse valor.
Diagrama de Ligação
O ACS712 precisa de 5V, então seu VCC vai para o VBUS. Mas então o OUT pode subir até cerca de 4.5V, o que é alto demais para um pino analógico de 3.3V. Dois resistores resolvem isso: OUT → 10kΩ → A0 → 20kΩ → GND. O pino A0 agora vê 2/3 da tensão do sensor (4.5V viram 3.0V), e o código multiplica a leitura por 1.5 para recuperar o valor real.

This image is created using Fritzing. Click to enlarge image
Tabela de ligação do Módulo ACS712 e do Arduino Nano ESP32
| Módulo ACS712 | Arduino Nano ESP32 |
|---|---|
| VCC | → VBUS (5V) |
| GND | → GND |
| OUT | → resistor de 10kΩ → A0 (e A0 → resistor de 20kΩ → GND) |
No lado da carga, o adaptador de 12V é conectado ao DC power jack. Leve o fio + do jack a um parafuso do ACS712, o outro parafuso ao + do dispositivo DC de 12V (por exemplo um motor DC, fita LED ou lâmpada), e o − do dispositivo DC de volta ao fio − do jack. O circuito de 12V e o Nano ESP32 não compartilham nenhum fio.
Usamos o A0 porque ele pertence ao ADC1 do chip ESP32-S3. Os pinos A4 a A7 pertencem ao ADC2, que para de funcionar enquanto o WiFi está ligado. Com o A0, você pode adicionar WiFi a este projeto mais tarde.
※ Nota:
A rede elétrica AC (110V/220V) é perigosa. Aprenda primeiro com uma carga DC de baixa tensão, como o dispositivo DC de 12V deste guia. Se você algum dia medir um circuito de rede elétrica, nunca toque no borne de parafuso nem nos fios dele enquanto a energia estiver ligada. Esse lado do módulo carrega toda a tensão da carga.
Como Programar o Sensor de Corrente ACS712
Nenhuma biblioteca é necessária.
- Defina o pino analógico e os números do divisor e do sensor:
- Deixe o pino analógico ler até cerca de 3.1V:
- Leia a tensão do pino em milivolts e transforme-a de volta na tensão real do sensor. A função analogReadMilliVolts() usa a calibração do próprio chip, então é mais precisa do que analogRead():
- Encontre o ponto zero no setup(), com a carga DESLIGADA, fazendo a média de 1000 leituras.
- Transforme a tensão em amperes:
Código Arduino Nano ESP32 - Corrente DC do ACS712
O código abaixo encontra a tensão zero na inicialização. Depois, a cada 0.5 segundo, ele faz a média de 300 leituras e imprime a tensão do sensor e a corrente.
Passos Rápidos
Siga estas instruções passo a passo:
- Se esta é a primeira vez que você usa o Arduino Nano ESP32, veja como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
- Ligue os componentes de acordo com o diagrama fornecido. Deixe o adaptador de 12V desconectado por enquanto.
- Conecte o Arduino Nano ESP32 ao seu computador usando um cabo USB Type-C.
- Abra a Arduino IDE no seu computador.
- Selecione a placa Arduino Nano ESP32 apropriada (por exemplo, Arduino Nano ESP32) e a porta COM.
- Copie o código acima e cole-o na Arduino IDE.
- Abra o Serial Monitor e defina o baud rate como 9600.
- Clique no botão Upload para enviar o código ao Arduino Nano ESP32. A carga deve estar DESLIGADA enquanto a placa inicia, porque é nesse momento que o ponto zero é medido.
- Espere até que o Serial Monitor mostre a tensão zero. Depois conecte o adaptador de 12V para ligar o dispositivo DC.
- Observe a corrente subir. Se o seu dispositivo DC for um motor, segure o eixo dele de leve com os dedos e a corrente sobe mais.
As primeiras linhas mostram algumas dezenas de mA sem carga. Isso é um ruído normal para a versão de 30A. Se os números saírem negativos quando o dispositivo DC está ligado, troque os dois fios no borne de parafuso.
※ Nota:
Se a leitura estiver muito errada, verifique se o VCC está no VBUS e não no 3.3V, e se o resistor de 10kΩ está entre o OUT e o A0 enquanto o resistor de 20kΩ está entre o A0 e o GND. Se os dois resistores estiverem trocados, o pino só vê 1/3 da tensão.
Medindo Corrente AC
Com AC, a corrente muda de sentido muitas vezes por segundo (50 ou 60 vezes, dependendo do seu país). A saída do sensor oscila acima e abaixo da tensão zero, então uma média simples dá quase 0 A. Usamos o valor RMS no lugar. O código amostra o sinal por 200 ms, o que cobre 10 ciclos a 50 Hz e 12 ciclos a 60 Hz. Para cada amostra ele pega a distância até a tensão zero e eleva ao quadrado. Depois:
Segurança de novo: um circuito de rede elétrica pode matar. Não tente isso em 110V/220V a menos que você saiba trabalhar com a rede elétrica com segurança, e mantenha as mãos longe do borne de parafuso enquanto a energia estiver ligada. A ligação com o Nano ESP32 e a calibração do zero são as mesmas de acima.
Código Arduino Nano ESP32 - Corrente AC do ACS712
Faça o upload da mesma forma, com a carga desligada na inicialização. Exemplo de saída com um pequeno aparelho AC ligado depois da calibração:
O ruído também soma um pequeno valor RMS quando nada está ligado, então uma leitura abaixo de cerca de 0.1 A significa "cerca de zero".