Arduino Nano - Sensor de Corrente ACS712
Este tutorial ensina você a usar o Arduino Nano para ler quantos amperes passam por um fio, com a ajuda do módulo sensor de corrente ACS712 de 30A. Em detalhes, vamos aprender:
- Como conectar o Arduino Nano ao sensor de corrente ACS712 e colocar o sensor em série com uma carga de 12V
- Como programar o Arduino Nano para encontrar o ponto zero por conta própria e depois medir a corrente DC em amperes
- Como medir a corrente AC (valor RMS) com o mesmo sensor

Sugerimos:
- Utilizar um sensor de tensão se você quer medir a tensão de uma bateria ou de uma fonte de alimentação, e não a corrente. Com os dois sensores, você também pode calcular a potência (watts = volts × amperes).
- Utilizar um módulo MOSFET se você quer ligar/desligar ou regular a intensidade da carga de 12V que você mede aqui.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Sensor de Corrente ACS712
Pinagem do Sensor de Corrente ACS712
Dentro do chip ACS712, a corrente medida passa por um caminho curto e grosso de cobre. Essa corrente cria um campo magnético, e um sensor Hall colocado bem ao lado do cobre transforma o campo em uma tensão. O caminho de cobre tem apenas cerca de 1.2 mΩ de resistência, então quase não altera o seu circuito. Além disso, o lado de alta corrente é isolado eletricamente do lado do Arduino Nano (2.1 kV RMS), então o Nano nunca encosta nos fios da carga.
O chip ACS712 vem em três faixas de corrente. Este tutorial usa a versão de 30A.
| ACS712 30A | |
|---|---|
| Chip | Allegro ACS712ELCTR-30A-T |
| Faixa de corrente | −30A a +30A (DC ou AC) |
| Sensibilidade | 66 mV por ampere |
| Outras versões | 5A (185 mV/A), 20A (100 mV/A) |
| Tensão de alimentação | 5V (4.5V a 5.5V) |
| Saída a 0A | cerca de 2.5V (metade do VCC) |
| Saída a +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 |
| Resistência do caminho de cobre | cerca de 1.2 mΩ |

O módulo tem um conector de 3 pinos para o lado do Arduino Nano:
- Pino VCC: deve ser conectado ao pino 5V do Arduino Nano. Não o alimente com 3.3V
- Pino GND: deve ser conectado ao GND (0V)
- Pino OUT: saída de tensão analógica, deve ser conectado a um pino de entrada analógica do Arduino Nano (A0 neste tutorial)
No outro lado, há um borne de parafuso de 2 pinos para a corrente da carga. Em algumas placas esses terminais não têm rótulo:
- Terminal IP+: a corrente entra aqui
- Terminal IP−: a corrente sai aqui
Os dois bornes de parafuso devem ser conectados em série com a carga. Corte um dos fios de alimentação da carga e coloque o borne no meio, para que toda a corrente da carga passe pelo sensor. Uma corrente de IP+ para IP− dá um valor positivo. O módulo também tem um pequeno LED que mostra que ele está alimentado.
※ Nota:
A disposição dos pinos em um módulo pode variar de um fabricante para outro. É essencial sempre consultar os rótulos impressos no módulo ao usá-lo. Observe com atenção!
Como a Tensão de Saída Vira Amperes
Sem corrente, o pino OUT fica em cerca de 2.5V. Para cada ampere que flui de IP+ para IP−, a saída sobe 66 mV. Para cada ampere no sentido contrário, ela cai 66 mV. Então a fórmula é simples:
Por exemplo, se o ponto zero é 2.500V e o Nano lê 2.566V, a corrente é 0.066 / 0.066 = 1 A.
O Vzero quase nunca é exatamente 2.500V. Cada módulo é um pouco diferente, então o código mede o ponto zero real na inicialização, enquanto nenhuma corrente flui. É por isso que a carga deve estar DESLIGADA quando você liga o Nano.
Alguns fatos sobre a precisão no Arduino Nano:
- O Nano tem um ADC de 10 bits. Com a referência de 5V, um passo do ADC é de cerca de 4.9 mV. Com 66 mV por ampere, um passo é de cerca de 74 mA. Então este sensor funciona melhor para cargas de cerca de 0.5A ou mais, como motores, lâmpadas, fitas LED e aquecedores.
- Uma leitura de ±0.05A a ±0.1A sem carga é um ruído normal. O código faz a média de muitas leituras para reduzi-lo.
- Quando o Nano é alimentado por USB, o pino 5V dele costuma ficar um pouco abaixo de 5V, por exemplo 4.8V. Isso não é um problema aqui: a saída do ACS712 é ratiométrica (ela acompanha a sua alimentação), e o ADC do Nano usa os mesmos 5V como referência, então as duas variações se cancelam.
Diagrama de Ligação
O conector de 3 pinos do sensor vai para o Nano (VCC no 5V, GND no GND, OUT no A0), e o seu borne de parafuso é colocado no fio positivo entre o adaptador de 12V e o dispositivo DC de 12V (como um motor DC, fita LED ou lâmpada).

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
| De | Para |
|---|---|
| ACS712 VCC | Arduino Nano 5V |
| ACS712 GND | Arduino Nano GND |
| ACS712 OUT | Arduino Nano A0 |
| Adaptador de 12V + (via DC power jack) | ACS712 IP+ |
| ACS712 IP− | Dispositivo DC + |
| Dispositivo DC − | Adaptador de 12V − (via DC power jack) |
O pino OUT vai direto para o A0, sem resistor. O Nano é uma placa de 5V, então seus pinos analógicos aceitam toda a saída de 0.5V a 4.5V do sensor.
WARNING
Os fios de 12V vão apenas para o borne de parafuso do ACS712 e para o dispositivo DC. Nunca os conecte a nenhum pino do Arduino Nano.
Como Programar o Sensor de Corrente ACS712
Nenhuma biblioteca é necessária. O sensor fornece uma tensão analógica simples, então analogRead() é suficiente.
- O primeiro passo é especificar o pino do Arduino Nano que está conectado ao pino OUT e a sensibilidade da versão de 30A:
- Leia o pino muitas vezes e converta a média para volts. O ADC do Nano dá de 0 a 1023 para 0V a 5V:
- No setup(), com a carga DESLIGADA, salve o ponto zero. 1000 leituras dão um valor estável:
- No loop(), transforme a tensão em amperes com a fórmula acima:
Código Arduino Nano para o Sensor de Corrente ACS712 - Corrente DC
O código abaixo encontra o ponto zero na inicialização. Depois disso, a cada 0.5 segundo, ele faz a média de 200 leituras e imprime a tensão OUT e a corrente em amperes.
Passos Rápidos
- Se esta é a primeira vez que você usa o Arduino Nano, veja como configurar o ambiente para o Arduino Nano na Arduino IDE.
- Ligue os componentes como mostrado no diagrama. Mantenha o adaptador de 12V desconectado por enquanto.
- Conecte a placa Arduino Nano ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador e selecione a placa Arduino Nano e sua porta COM.
- Copie o código acima e cole-o na Arduino IDE.
- Clique no botão Upload para fazer o upload do código para o Arduino Nano.
- Abra o Serial Monitor e defina o baud rate como 9600. Espere até que o ponto zero seja impresso. A carga deve permanecer DESLIGADA durante esse tempo.
- Agora conecte o adaptador de 12V. O dispositivo DC liga.
- Se o seu dispositivo DC for um motor, segure o eixo do motor com os dedos, de leve, por um instante e veja a corrente subir.
- Veja o resultado no Serial Monitor:
As primeiras linhas mostram apenas ruído, porque o adaptador ainda está desconectado. Nesta execução, o dispositivo DC é um motor DC de 12V. O valor de 1.70A é o pico curto de partida do motor. Depois o motor se estabiliza perto de 0.9A, e a corrente sobe para cerca de 1.3A enquanto você reduz a velocidade do eixo com os dedos.
Se você vir valores negativos 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
Uma corrente AC muda de sentido muitas vezes por segundo (50 ou 60 vezes, dependendo do seu país). O pino OUT oscila acima e abaixo do ponto zero, então a média simples é cerca de zero e não diz nada. Em vez da média, calculamos o valor RMS (root mean square, valor quadrático médio), que é o número que o seu multímetro mostra para AC.
O código amostra o sensor o mais rápido que pode durante 200 ms. Essa janela cobre 10 ciclos completos a 50 Hz ou 12 ciclos a 60 Hz. Para cada amostra, ele pega a distância até o ponto zero, eleva ao quadrado e soma. No fim da janela:
A ligação do lado do Arduino Nano continua a mesma. O borne de parafuso vai em série com um dos fios do dispositivo AC.
WARNING
A rede elétrica AC (110V ou 220V) é perigosa e pode matar. Pratique primeiro com a carga DC de baixa tensão acima. O lado de cobre e de parafusos do módulo carrega toda a tensão da rede, então nunca toque no borne de parafuso nem nos fios da carga enquanto o circuito estiver energizado. Coloque o módulo em uma caixa fechada e não condutora antes de conectar um dispositivo à rede elétrica.
Código Arduino Nano para o Sensor de Corrente ACS712 - Corrente AC
Passos Rápidos
- Certifique-se de que o dispositivo AC está desconectado e depois ligue o borne de parafuso em série com ele.
- Copie o código acima e cole-o na Arduino IDE.
- Clique no botão Upload para fazer o upload do código para o Arduino Nano.
- Abra o Serial Monitor e espere pelo ponto zero.
- Ligue o dispositivo AC, por exemplo um secador de cabelo na posição baixa, sem tocar no módulo.
Com o dispositivo DESLIGADO, o valor RMS não é exatamente 0. O ruído é elevado ao quadrado, então ele nunca pode se cancelar, e um valor pequeno como 0.07A permanece. Trate qualquer valor abaixo de cerca de 0.1A como zero.
Conhecimento Adicional
ACS712 5A vs 20A vs 30A: Qual Escolher
As três versões têm os mesmos pinos, a mesma ligação e o mesmo código. Só muda o valor de SENSITIVITY no código.
| ACS712 5A | ACS712 20A | ACS712 30A | |
|---|---|---|---|
| Faixa de corrente | ±5A | ±20A | ±30A |
| Sensibilidade | 185 mV/A | 100 mV/A | 66 mV/A |
| SENSITIVITY no código | 0.185 | 0.100 | 0.066 |
| Um passo do ADC do Arduino Nano (4.9 mV) | cerca de 26 mA | cerca de 49 mA | cerca de 74 mA |
É evidente que a versão de 5A dá os passos mais finos para cargas pequenas, enquanto a versão de 30A é a escolha certa quando a corrente pode passar de 20A. Escolha a menor faixa que ainda cobre a maior corrente do seu projeto.