ACS712とは
ACS712とはAllegro社が出している電流センサです.英語が得意な方はこちらをどうぞ.
ACS712のリファレンスガイド(英語)
電流に応じた電圧を出力するセンサで,ACDC両方で使えます.
また通常の電流センサはシャント抵抗を流れる電流で計測するのに対して,ホール素子を用いることで導線の間に接続して計測しないので,シャント抵抗分の電力を消費せずに済みます.
その代わりセンサ用に別途5V電源が必要です.
5A, 20A, 30Aの3種類があり,それぞれ0~5Vに応じたレンジが存在します.
素子の特徴の説明(日本語)はこちらをどうぞ.
ACS712電流センサモジュール - スイッチサイエンス
Arduinoで使ってみた
ハード接続
たぶんC国製のこちらのモジュールを購入.安すぎるやろ...
ACS712 5A範囲電流センサモジュール
ACS712単品だと抵抗やコンデンサを付けないといけないので,モジュールを買うのをお勧めします.
以下接続図.
プログラム
プログラムをどう組むか,最初データシートを見てもさっぱりでした.
が,要は以下のような特性図になっているらしいので,自分でレンジを調整するようです.(海外サイトにいくつかArduinoスケッチは転がってたけど,係数がイミフだったので自分で作ることにしました.)
以下に5Aの物をArduinoで動かした際のスケッチを載せておきます.
//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で手軽(?)に使える絶縁タイプの電流センサ.
メリット :計測対象の電力を消費しない
デメリット:外部電源が必要
オフセットと微調整がだるいですが,逆にそれさえ済めばそのセンサ固有値として非常に精度高く電流値を求めることが出来ます.