Arduino UNO R4 - Sensor de Corrente ACS712

Neste guia, vamos aprender como usar o sensor de corrente ACS712 de 30A com o Arduino UNO R4 WiFi ou Minima para descobrir quantos amperes um motor, uma lâmpada ou uma fita LED realmente puxa. Um sensor de tensão diz "quão forte" é a energia. Um sensor de corrente diz "quanta" está passando. Em detalhes, vamos aprender:

Arduino UNO R4 e módulo sensor de corrente ACS712

Sobre o Sensor de Corrente ACS712

O ACS712 é um chip da Allegro que mede a corrente usando o efeito Hall. Dentro dele, a corrente passa por um caminho grosso de cobre. 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 apenas cerca de 1.2 mΩ de resistência, então quase não altera o seu circuito. Além disso, o lado da carga é isolado do lado do Arduino (até 2.1 kV RMS), então o circuito medido não tem ligação elétrica com a sua placa.

O chip vem em três versões. Elas parecem iguais, então confira o texto no chip (por exemplo ACS712ELCTR-30A-T):

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 guia usa a versão de 30A. Suas principais especificações:

ACS712 30A
Tensão de alimentação 5V (4.5V a 5.5V)
Corrente medida DC e AC, -30A a +30A
Saída em 0A cerca de 2.5V (metade da alimentação)
Saída em +30A / -30A cerca de 4.48V / 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

A saída é "ratiométrica". Isso significa que ela acompanha a alimentação real de 5V. Se a alimentação é 4.9V, o ponto zero é cerca de 2.45V, e não 2.5V. É por isso que o código mede o ponto zero na inicialização, em vez de confiar no número 2.5V.

Pinagem do sensor de corrente ACS712

O módulo tem um conector de 3 pinos em um dos lados:

  • Pino VCC: conecte ao 5V do Arduino UNO R4.
  • Pino GND: conecte ao GND (0V).
  • Pino OUT: tensão de saída analógica, conecte a um pino analógico do Arduino UNO R4 (A0 neste guia).

No outro lado, há um borne de parafuso de 2 pinos (IP+ e IP-, às vezes sem identificação). Ele vai em série com a carga: corte um fio de alimentação da carga e coloque o borne no meio, para que toda a corrente da carga passe pelo módulo. Quando a corrente vai de IP+ para IP-, a leitura é positiva. Se a sua leitura for negativa, é só trocar os dois fios. Um pequeno LED no módulo mostra que ele está alimentado.

Quão boa é a versão de 30A para correntes pequenas? A versão de 30A é feita para correntes grandes, então é grosseira para as pequenas. Com a leitura normal de 10 bits (0 a 1023), um passo é cerca de 4.9 mV, que é cerca de 74 mA. O Arduino UNO R4 consegue ler seus pinos analógicos com 14 bits (0 a 16383), então um passo é só cerca de 0.3 mV. Isso não remove o ruído do próprio sensor: em 0A, o valor ainda varia cerca de ±50 a 100 mA. Mas, junto com a média, dá um número calmo e estável. O módulo combina com cargas de cerca de 0.5A ou mais, como motores, lâmpadas, fitas LED, aquecedores e carregadores.

Como a Tensão Vira Amperes

Em 0A, o pino OUT fica na tensão zero (cerca de 2.5V). Cada ampere o move em 0.066V, para cima em um sentido e para baixo no outro. Então a fórmula é:

current_A = (Vout - Vzero) / 0.066

Por exemplo, se a tensão zero é 2.493V e o Arduino UNO R4 lê 2.559V, a corrente é (2.559 - 2.493) / 0.066 = 1.00A.

Diagrama de Ligação

O Arduino UNO R4 trabalha com 5V nos pinos analógicos, igual à saída do ACS712. Então o pino OUT vai direto ao A0, e nenhum divisor de tensão é necessário. O lado de 12V é separado: o adaptador de 12V alimenta o dispositivo DC de 12V (como um motor DC, uma fita LED ou uma lâmpada) através do borne de parafuso do módulo.

Diagrama de ligação do Arduino UNO R4 com o sensor de corrente ACS712

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.

Módulo ACS712 Arduino UNO R4
VCC 5V
GND GND
OUT A0
Lado da carga Conectar a
Borne de parafuso IP+ positivo (+) do conector de alimentação DC de 12V
Borne de parafuso IP- fio positivo (+) do dispositivo DC
Fio negativo (-) do dispositivo DC negativo (-) do conector de alimentação DC de 12V

※ Nota:

Segurança em primeiro lugar. A rede elétrica AC (110V/220V) é perigosa e pode matar. Se você é iniciante, pratique apenas com uma carga DC de baixa tensão, como o dispositivo DC de 12V deste guia. Quando o módulo é usado em um circuito da rede elétrica, o borne de parafuso e o lado de cobre carregam a tensão total da rede. Nunca toque no borne nem nos fios enquanto o circuito estiver energizado.

Como Programar o Sensor de Corrente ACS712

  • Mude os pinos analógicos para leituras de 14 bits (valores de 0 a 16383):
analogReadResolution(14);
  • Transforme uma leitura bruta em volts:
float voltage = analogRead(A0) * 5.0 / 16383.0;
  • Encontre o ponto zero uma vez no setup(), enquanto a carga está desligada. Leia o sensor 1000 vezes e calcule a média:
zeroVoltage = readAverageVoltage(1000);
  • No loop(), faça a média de 200 leituras para acalmar o ruído e depois transforme volts em amperes:
float current = (readAverageVoltage(200) - zeroVoltage) / 0.066;

Código Arduino UNO R4 - Corrente DC do ACS712

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-acs712-current-sensor */ // Arduino UNO R4 + ACS712 30A current sensor: measure DC current // Wiring: VCC -> 5V, GND -> GND, OUT -> A0 // Keep the load switched OFF while the board starts, so the zero point is right. #define SENSOR_PIN A0 #define VREF 5.0 // the analog pins of the Arduino UNO R4 work with 5V #define ADC_MAX 16383.0 // 14-bit ADC gives values from 0 to 16383 #define SENSITIVITY 0.066 // ACS712 30A version: 66 mV (0.066 V) per amp #define SAMPLES 200 // number of readings averaged for each result float zeroVoltage = 2.5; // sensor output at 0 A, measured again in setup() // Read the sensor many times and return the average voltage float readAverageVoltage(int count) { long sum = 0; for (int i = 0; i < count; i++) { sum += analogRead(SENSOR_PIN); } return (sum / (float)count) * VREF / ADC_MAX; } void setup() { Serial.begin(9600); analogReadResolution(14); // use the 14-bit ADC of the UNO R4 instead of the default 10-bit delay(1000); // give the sensor time to settle // Zero calibration: no current may flow through the sensor now zeroVoltage = readAverageVoltage(1000); Serial.print("Zero point: "); Serial.print(zeroVoltage, 3); Serial.println(" V"); } void loop() { float voltage = readAverageVoltage(SAMPLES); float current = (voltage - zeroVoltage) / SENSITIVITY; // volts -> amps Serial.print("Vout: "); Serial.print(voltage, 3); Serial.print(" V | Current: "); Serial.print(current, 2); Serial.println(" A"); delay(500); }

Passos Rápidos

Siga estas instruções passo a passo:

  • Se esta é a primeira vez que você usa o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para o Arduino Uno R4 WiFi/Minima no Arduino IDE.
  • Ligue os componentes conforme o diagrama fornecido.
  • Mantenha o adaptador de 12V desconectado por enquanto, para que nenhuma corrente passe pelo sensor.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Copie o código acima e cole no Arduino IDE.
  • Abra o Serial Monitor.
  • Clique no botão Upload para fazer o upload do código para o Arduino UNO R4. A placa mede o ponto zero no primeiro segundo depois que inicia.
  • Agora conecte o adaptador de 12V. O dispositivo DC liga.
  • Confira os resultados no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Zero point: 2.493 V Vout: 2.494 V | Current: 0.02 A Vout: 2.491 V | Current: -0.03 A Vout: 2.494 V | Current: 0.01 A Vout: 2.576 V | Current: 1.26 A Vout: 2.548 V | Current: 0.83 A Vout: 2.546 V | Current: 0.80 A Vout: 2.547 V | Current: 0.82 A Vout: 2.545 V | Current: 0.79 A
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

As primeiras linhas mostram o ruído em repouso: alguns centésimos de ampere, para cima e para baixo em torno de 0. Isso é normal para a versão de 30A. Aqui, o dispositivo DC é um motor DC de 12V. Quando o motor parte, ele puxa um breve pico de corrente e depois se estabiliza em cerca de 0.8A. Se você frear o motor segurando o eixo de leve, a corrente sobe.

※ Nota:

Se a corrente marcar cerca de 0.5A ou mais com a carga desligada, o ponto zero foi medido enquanto havia corrente passando. Desconecte o adaptador de 12V e pressione o botão RESET do Arduino UNO R4 para medir de novo.

Medindo Corrente AC

Com AC, a corrente muda de direção 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 o tempo todo. Uma única leitura não significa nada, e uma média simples fica perto de 0. Em vez disso, usamos o valor RMS, que é o número que um medidor AC comum mostra:

  • Amostre o sensor por 200 ms. Isso cobre 10 ciclos a 50 Hz ou 12 ciclos a 60 Hz.
  • Para cada amostra, calcule a distância até a tensão zero e eleve ao quadrado.
  • Calcule a média dos quadrados e depois a raiz quadrada. Divida por 0.066 para obter amperes.
current_RMS = sqrt(mean((Vout - Vzero)²)) / 0.066

※ Nota:

De novo: a tensão da rede elétrica é perigosa. Só meça uma carga da rede elétrica se você souber trabalhar com ela com segurança, mantenha o circuito desligado da tomada enquanto o liga, e nunca toque no borne de parafuso enquanto a energia estiver ligada.

A ligação do lado do Arduino UNO R4 continua a mesma. Só a carga muda: o borne de parafuso vai em série com um fio da carga AC.

Código Arduino UNO R4 - Corrente AC do ACS712

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-acs712-current-sensor */ // Arduino UNO R4 + ACS712 30A current sensor: measure AC current (RMS) // Wiring: VCC -> 5V, GND -> GND, OUT -> A0 // Keep the load switched OFF while the board starts, so the zero point is right. #define SENSOR_PIN A0 #define VREF 5.0 // the analog pins of the Arduino UNO R4 work with 5V #define ADC_MAX 16383.0 // 14-bit ADC gives values from 0 to 16383 #define SENSITIVITY 0.066 // ACS712 30A version: 66 mV (0.066 V) per amp #define WINDOW_MS 200 // 200 ms = 10 cycles at 50 Hz, 12 cycles at 60 Hz float zeroVoltage = 2.5; // sensor output at 0 A, measured again in setup() // Convert one ADC reading to volts float readVoltage() { return analogRead(SENSOR_PIN) * VREF / ADC_MAX; } // Sample for WINDOW_MS and return the RMS current in amps float readCurrentRMS() { double sumSquares = 0; long count = 0; unsigned long start = millis(); while (millis() - start < WINDOW_MS) { float diff = readVoltage() - zeroVoltage; // distance from the 0 A level sumSquares += diff * diff; count++; } float voltageRMS = sqrt(sumSquares / count); return voltageRMS / SENSITIVITY; } void setup() { Serial.begin(9600); analogReadResolution(14); // use the 14-bit ADC of the UNO R4 delay(1000); // give the sensor time to settle // Zero calibration: average many readings while no current flows float sum = 0; for (int i = 0; i < 1000; i++) { sum += readVoltage(); } zeroVoltage = sum / 1000; Serial.print("Zero point: "); Serial.print(zeroVoltage, 3); Serial.println(" V"); } void loop() { float currentRMS = readCurrentRMS(); Serial.print("AC current (RMS): "); Serial.print(currentRMS, 2); Serial.println(" A"); delay(300); }

Passos Rápidos

  • Mantenha a carga AC desligada.
  • Copie o código acima e cole no Arduino IDE.
  • Clique no botão Upload para fazer o upload do código para o Arduino UNO R4.
  • Espere pela linha "Zero point" no Serial Monitor e depois ligue a carga AC (por exemplo, um pequeno aquecedor).
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Zero point: 2.496 V AC current (RMS): 0.06 A AC current (RMS): 0.05 A AC current (RMS): 2.31 A AC current (RMS): 2.28 A AC current (RMS): 2.30 A
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

Com a carga desligada, o valor RMS não é exatamente 0. O ruído sempre gera um pequeno número positivo depois de elevado ao quadrado, então um valor abaixo de cerca de 0.1A significa "sem corrente".

Vídeo

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!