Código de Pesquisa

Usando um sensor de corrente Allegro ACS712 (CC/CA) com código Arduino

Usando um sensor de corrente Allegro ACS712 (CC/CA) com código Arduino

Neste tutorial, aprenderemos como usar o sensor de corrente Allegro ACS712 para medir corrente alternada (AC) e contínua (DC) com um Arduino. O sensor ACS712 fornece uma tensão proporcional à corrente que passa por ele, permitindo que leamos e exibamos facilmente os valores de corrente no monitor serial do Arduino. Este projeto é ideal para quem deseja monitorar a corrente em diversas aplicações, como fontes de alimentação ou sistemas de baterias.

Vamos montar um circuito simples que conecta o sensor ACS712 ao Arduino e, em seguida, escrever um programa para ler a saída do sensor. O resultado esperado é ter leituras de corrente em tempo real exibidas no monitor serial. Para esclarecimentos sobre a implementação, confira o vídeo (no vídeo em 02:00).

Hardware explicado

O sensor de corrente Allegro ACS712 é um módulo compacto que pode medir correntes de até 30A, dependendo da versão que você escolher. Ele tem três pinos: VCC para alimentação, GND para terra e um pino de saída que fornece a tensão correspondente à corrente medida. O sensor usa o princípio do efeito Hall, em que a corrente que passa por um condutor gera um campo magnético. Esse campo é detectado e convertido em uma tensão, que é então enviada ao Arduino.

O módulo está disponível em diferentes capacidades de corrente (5A, 20A e 30A) e fornece níveis de tensão de 185 mV/A, 100 mV/A e 66 mV/A, respectivamente. Isso significa que, para cada ampere de corrente que flui através do sensor, você obterá uma saída de tensão correspondente que pode ler e processar. Essa característica o torna versátil para várias aplicações.

Detalhes da ficha técnica

FabricanteAllegro Microsystems
Número da peçaACS712ELCTR-30A-T
Tensão lógica/E/S4,5-5,5 V
Tensão de alimentação5 V
Corrente de saída (por canal)30 A máx.
Orientação sobre a frequência PWMNão aplicável
Limiares lógicos de entradaNão aplicável
Queda de tensão / RDS(on)/ saturação1,2 mΩ
Limites térmicos150 °C máx.
PacoteTO-220
Notas / variantesDisponível em 5 A, 20 A e 30 A

  • Garanta a fiação adequada para evitar curtos-circuitos.
  • Use fio de bitola apropriada para as correntes nominais (12 AWG para 30A).
  • Monitore a temperatura do módulo durante o funcionamento.
  • Considere adicionar um dissipador de calor para aplicações com correntes mais altas.
  • Calibre a saída do sensor com base na sua aplicação específica.

Instruções de fiação

Arduino wiring for Allegro ACS712 current sensor

Para conectar o sensor Allegro ACS712 ao seu Arduino, comece conectando o pino VCC do ACS712 ao pino 5V do Arduino. Em seguida, conecte o pino GND do sensor a um dos pinos GND do Arduino. O pino de saída do ACS712 deve ser conectado ao pino de entrada analógica A0 do Arduino.

Para a medição de corrente, conecte a carga em série com o sensor. Isso significa que o fio positivo da sua fonte de alimentação deve ir para um dos terminais de entrada do sensor de corrente, enquanto o outro terminal se conecta à carga. O outro lado da carga deve retornar à fonte de alimentação, completando o circuito. Certifique-se de usar bitola de fio adequada para a corrente que você está medindo, para evitar superaquecimento.

Exemplos de código e tutorial

O seguinte trecho de código inicializa o pino analógico e configura o monitor serial:

#define VIN A0 // define the Arduino pin A0 as voltage input (V in)
const float VCC = 5.0; // supply voltage is from 4.5 to 5.5V. Normally 5V.

Aqui, definimosVINcomo o pino de entrada analógica onde a saída do sensor está conectada. Também definimos a tensão de alimentaçãoVCCaté 5V.

Na função loop(), lemos a tensão do sensor ACS712 e calculamos a corrente:

float voltage_raw = (5.0 / 1023.0) * analogRead(VIN); // Read the voltage from sensor
float current = voltage / sensitivity[model]; // Calculate current based on sensitivity

Aqui, lemos a tensão bruta do sensor e a convertemos na corrente real usando o array de sensibilidade correspondente ao modelo do sensor em uso.

Finalmente, imprimimos as leituras de corrente no monitor serial:

if (abs(current) > cutOffLimit) {
    Serial.print("V: ");
    Serial.print(voltage, 3); // print voltage with 3 decimal places
    Serial.print("V, I: ");
    Serial.print(current, 2); // print the current with 2 decimal places
    Serial.println("A");
} else {
    Serial.println("No Current");
}

Esta seção verifica se a corrente excede um limite de corte definido e imprime as leituras de tensão e corrente no monitor serial. Se a corrente estiver abaixo do limite, ela exibe a mensagem Sem corrente.

Para o código completo, consulte o código carregado abaixo do artigo.

Demonstração / O que esperar

Quando executar o código e ligar o circuito, deverá ver leituras de corrente exibidas no monitor serial. Ao ajustar a carga, as leituras deverão mudar em conformidade, desde que a corrente esteja acima do limite de corte. Tenha cuidado com a temperatura do sensor, especialmente quando operar próximo das suas especificações máximas.

Imagens

Arduino wiring for Allegro ACS712 current sensor
Arduino wiring for Allegro ACS712 current sensor
ACS712_in_series_with_load
ACS712_in_series_with_load
allegro_ACS712_module-1
allegro_ACS712_module-1
allegro_ACS712_module-2
allegro_ACS712_module-2
allegro_ACS712_module-4
allegro_ACS712_module-4
allegro_ACS712_module-0
allegro_ACS712_module-0
130-Allegro ACS712 DC/AC current sensor with Arduino code
Idioma: C++
/*
 * 
 * Arduino Sketch for Allegro ACS712 Current Sensor 
 * This sensor can measure current at a range of up to 30A.
 * It operates with 5V.
 * Please watch the video instruction and explanation for this code.
 * 
 * Written by Ahmad Shamshiri on Sunday, June 17, 2018 at 22:06 in Ajax, Ontario, Canada
 * for Robojax.com
 * View the video instruction at https://youtu.be/DVp9k3xu9IQ
 * This code has been downloaded from Robojax.com
 */
#define VIN A0 // define the Arduino pin A0 as voltage input (V in)
const float VCC   = 5.0;// supply voltage is from 4.5 to 5.5V. Normally 5V.
const int model = 2;   // enter the model number (see below)

float cutOffLimit = 1.01;// set the current which, below that value, doesn't matter. Or set 0.5

/*
          "ACS712ELCTR-05B-T",// for model use 0
          "ACS712ELCTR-20A-T",// for model use 1
          "ACS712ELCTR-30A-T"// for model use 2  
The sensitivity array is holding the sensitivity of the ACS712
current sensors. Do not change. All values are from page 5 of the data sheet          
*/
float sensitivity[] ={
          0.185,// for ACS712ELCTR-05B-T
          0.100,// for ACS712ELCTR-20A-T
          0.066// for ACS712ELCTR-30A-T
     
         }; 


const float QOV =   0.5 * VCC;// set quiescent Output voltage of 0.5V
float voltage;// internal variable for voltage

void setup() {
    //Robojax.com ACS712 Current Sensor 
    Serial.begin(9600);// initialize serial monitor
    Serial.println("Robojax Tutorial");
    Serial.println("ACS712 Current Sensor");
}

void loop() {
  

  //Robojax.com ACS712 Current Sensor 
  float voltage_raw =   (5.0 / 1023.0)* analogRead(VIN);// Read the voltage from sensor
  voltage =  voltage_raw - QOV + 0.012 ;// 0.000 is a value to make voltage zero when there is no current
  float current = voltage / sensitivity[model];
 
  if(abs(current) > cutOffLimit ){
    Serial.print("V: ");
    Serial.print(voltage,3);// print voltage with 3 decimal places
    Serial.print("V, I: ");
    Serial.print(current,2); // print the current with 2 decimal places
    Serial.println("A");
  }else{
    Serial.println("No Current");
  }
  delay(500);
}

Recursos e referências

Ainda não há recursos.

Arquivos📁

Folha de dados (pdf)

Arquivo Fritzing