検索コード

Allegro ACS712 DC/AC電流センサーをArduinoコードで使用する

Allegro ACS712 DC/AC電流センサーをArduinoコードで使用する

このチュートリアルでは、Arduinoを使ってAllegro社のACS712電流センサーで交流(AC)と直流(DC)の両方の電流を測定する方法を学びます。ACS712センサーは流れる電流に比例した電圧を出力するため、Arduinoのシリアルモニター上で電流値を簡単に読み取り表示できます。このプロジェクトは、電源やバッテリーシステムなどのさまざまな用途で電流を監視したい人に最適です。

ACS712センサーをArduinoに接続する簡単な回路を組み、その後センサーの出力を読み取るプログラムを書きます。期待される結果は、シリアルモニタにリアルタイムの電流値が表示されることです。実装の確認のため、ビデオ(02:00)を必ずご覧ください。

ハードウェア解説

AllegroのACS712電流センサは、選ぶバージョンによって最大30Aまで測定できるコンパクトなモジュールです。ピンはVCC(電源)、GND(グランド)、および測定した電流に対応する電圧を出力するOUTピンの3本です。センサはホール効果の原理を利用しており、導体を流れる電流が磁場を発生させ、その磁場を検出して電圧に変換し、Arduinoに送ります。

このモジュールは異なる定格電流(5A、20A、30A)で提供され、それぞれ185 mV/A、100 mV/A、66 mV/Aの電圧出力を持ちます。つまり、センサーを流れる電流1Aごとに読み取り・処理可能な対応する電圧出力が得られるということです。この特性により、さまざまな用途に応用できます。

データシートの詳細

製造業者アレグロ・マイクロシステムズ
部品番号ACS712ELCTR-30A-T
ロジック/IO電圧4.5~5.5V
供給電圧5 V
出力電流(チャンネルあたり)最大30 A
PWM周波数に関するガイダンス該当なし
入力論理閾値該当なし
電圧降下 / RDS(オン) / 彩度1.2 mΩ
熱制限最大150°C
パッケージTO-220
注記/バリエーション5A、20A、30Aで利用可能です。

  • 短絡を防ぐために配線を適切に行ってください。
  • 電流定格に応じた適切なゲージの電線を使用してください(30Aには12 AWG)。
  • 動作中はモジュールの温度を監視してください。
  • より大きな電流を扱う用途では、ヒートシンクの追加を検討してください。
  • ご使用のアプリケーションに応じてセンサー出力を較正してください。

配線手順

Arduino wiring for Allegro ACS712 current sensor

Allegro ACS712センサーをArduinoに配線するには、まずACS712のVCCピンをArduinoの5Vピンに接続してください。次に、センサーのGNDピンをArduinoのGNDピンのいずれかに接続してください。ACS712の出力ピンはArduinoのアナログ入力ピンA0に接続してください。

電流を測定する際は、負荷をセンサーと直列に接続してください。つまり、電源の正極からの配線を電流センサーの入力端子の一方に接続し、もう一方の端子を負荷に接続します。負荷のもう一方は電源に戻して回路を完成させます。測定する電流に合った適切な線径の配線を使用して、過熱を避けてください。

コード例とウォークスルー

次のコードスニペットはアナログピンを初期化し、シリアルモニタを設定します:

#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.

ここでは次のように定義します。VINセンサーの出力が接続されるアナログ入力ピンとして設定します。供給電圧も設定します。VCC5Vへ。

loop 関数では、ACS712 センサーから電圧を読み取り、電流を計算します:

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

ここではセンサーから生の電圧を読み取り、使用しているセンサーモデルに基づく感度配列を用いてそれを実際の電流に変換します。

最後に、現在の測定値をシリアルモニターに出力します:

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");
}

このセクションでは、電流が所定のカットオフ値を超えているかをチェックし、電圧と電流の測定値をシリアルモニタに表示します。電流が閾値以下の場合は電流なしと出力します。

完全なコードは、記事の下に掲載されているコードをご参照ください。

デモ/内容と流れ

コードを実行して回路に電源を入れると、シリアルモニタに電流の読み値が表示されるはずです。負荷を調整すると、電流がカットオフ限界を上回っている場合に応じて読み値は変化します。特に最大定格付近で動作させる際は、センサーの温度に注意してください。

画像

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
言語: 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);
}

リソースと参考文献

まだリソースはありません。

ファイル📁

データシート(pdf)

フリッツィングファイル