スイッチサイエンスで売られている電流センサ ACS714 を使って、コンセントの電流を計測するモノを作りました。家電をON/OFFをモニターするとか、波形みたりもできます。
±5Aまでのと±30Aまで測れるのがあるけど、使ったのは5Aの方。
写真のようにコンセントと電源ケーブルの間にいれると、流れている電流が電圧値に変換されて出力される。
この写真はMacBook ProのACアダプタを繋いだところだけど、スイッチング電源なためか変な波形。半田ごてとか単純なものを繋げば、もうちょっと綺麗なsin波になります。
交流電流なので、出てくる電圧は2.5Vを中心にした交流波形(±5Aのだと185mV/A)になります。
アナログ回路で検波&整流しても良いのだけど、そのままArduinoに入力してデジタル処理した方が簡単だろうということで、下記のようなスケッチを書いてみました。Arduinoとセンサの接続は、アナログ3ピン←OUT、5V→Vcc、GND–GNDという感じ。
const int sensorPin = A3; // pin that the sensor is attached to const int hz = 50; // frequency of signal const int filter = 4; // get average of several samples to reduce noize // Current sensor (ACS714 5A) int get_mA() { int max = 0, min = 32767, cnt = 0; unsigned long start = millis(); do { int val = 0; for (int i = 0; i < filter; i++) val += analogRead(sensorPin); if (max < val) max = val; if (min > val) min = val; cnt++; } while (millis() - start <= 1100/hz); //10%+ for ensure p2p is acquired int mA = long((max-min))*9333/1000/filter; return mA; } void setup() { Serial.begin(9600); } void loop() { Serial.print(get_mA()); Serial.println(" mA"); delay(500); }
出力は以下のような感じになります。
1324 mA 1325 mA 1312 mA ...
スケッチでやってる計算は、あくまで簡易的なもので、peak-to-peakの電圧値を求めて実効値に変換してるだけ*1。変換式は
という感じです。
ただノイズが多めで何も繋いでなくても0にならないのだった(30mAくらいの数値が出る)。小さい値は無視する必要がありそう。