LoginSignup
11
9

More than 3 years have passed since last update.

ACS712を使ってみた

Last updated at Posted at 2018-12-18

ACS712とは

ACS712とはAllegro社が出している電流センサです.英語が得意な方はこちらをどうぞ.
ACS712のリファレンスガイド(英語)
電流に応じた電圧を出力するセンサで,ACDC両方で使えます.
また通常の電流センサはシャント抵抗を流れる電流で計測するのに対して,ホール素子を用いることで導線の間に接続して計測しないので,シャント抵抗分の電力を消費せずに済みます.
その代わりセンサ用に別途5V電源が必要です.
5A, 20A, 30Aの3種類があり,それぞれ0~5Vに応じたレンジが存在します.
素子の特徴の説明(日本語)はこちらをどうぞ.
ACS712電流センサモジュール - スイッチサイエンス

Arduinoで使ってみた

ハード接続

たぶんC国製のこちらのモジュールを購入.安すぎるやろ...
ACS712 5A範囲電流センサモジュール
ACS712単品だと抵抗やコンデンサを付けないといけないので,モジュールを買うのをお勧めします.
以下接続図.
ACS-712-Basic-Hook-Up.png

プログラム

プログラムをどう組むか,最初データシートを見てもさっぱりでした.
が,要は以下のような特性図になっているらしいので,自分でレンジを調整するようです.(海外サイトにいくつかArduinoスケッチは転がってたけど,係数がイミフだったので自分で作ることにしました.)
ACS712.JPG
以下に5Aの物をArduinoで動かした際のスケッチを載せておきます.

ACS712
//CAS712
//使う電流センサのアンペア数
double Ampere = 5;
//現在の電流値(mA).
double current;
//オフセット値(V).デフォだと0Vの時センサ値は512(レンジを5Vにすると2.5V)なので .
double offset = 2.505;
//レンジ調整値.0Vに調整した後,電源等でこの電流計の値が合っているかをチェックして,ズレていれば調整する.
double range = 0.95;
//forを回す回数.大きくすると処理が遅くなるが,電流値は安定する.10000times/secがanalogReadの限界な事に注意.
int times = 100;

void setup() {
  Serial.begin(9600);
}

void loop() {
  current = 0;
  for(int i = 0; i < times; i++){
    //1.5~3.5Vレンジなので2.5Vオフセットすると-1~1V.これを-5~5Vにする為5をかけている.
    current += ((double)(analogRead(A0)) / 1023 * Ampere - offset) / range * 5 * 1000 / (double)(times);
  }
  Serial.print("Current(mA) = ");
  Serial.println(round(current));
}

これでシリアル画面を開けばmAの値が見れるはずです.
for文でセンサ値のばらつきを平均しています.要らなかったら外してください.

まとめ

Arduinoで手軽(?)に使える絶縁タイプの電流センサ.
メリット :計測対象の電力を消費しない
デメリット:外部電源が必要
オフセットと微調整がだるいですが,逆にそれさえ済めばそのセンサ固有値として非常に精度高く電流値を求めることが出来ます.

11
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9