電力計じゃなくて、電流計か・・・
どっちでも良いんですが。 自宅がボロアパートなので、常にブレーカーが飛ぶんじゃないかという危機感と同居しています。そこで、ブレーカーが落ちそうなのかどうかを監視するために、電流を測定してみたいと思います。
使うもの
- ESP8266が乗ったボード
- ブレッドボード的なやつ
- いい感じの抵抗2つ(多分10kΩ)
- クランプ式電流センサー(ゆくゆくは2つ)
- その他諸々
クランプ式電流センサはこれを使いました。
LILLYエレクトロニクス 交流電流センサーSCT-013から0300-30A非侵襲スプリットコア電流トランス
詳しいスペックが良くわからないんですが、30Aで1V流れそうな雰囲気があります。電極は3.5mmのイヤホンのプラグと同じ形状になってます。電流を見るだけならArduinoで十分なんですが、いい感じのArduinoがなかったので、今回はESP8266が乗ったボードを使っています。
ざっくり配線
相変わらず酷い配線をお許し下さい。先ほどの電流センサに掛かる電圧をボードのAnalog Inputで読み取るわけですが、家庭用電源は交流なので、正値・負値の両方がありえます。流石にAnalog Inputに負値が入力されるとまずそうなので、3.3Vを1kΩの2つの抵抗で分圧させて、理論値1.65Vにセンサーの電圧を足したものを読み取っています。30Aで1Vっぽいので、1.65V以上の電圧が生じることはなさそう。
センサーは配電盤内の大元のブレーカーから伸びてる、それっぽい導線に挟みました。家庭用の電源は単相3線式となっていて、トータルの電流値を測るにはもう一つセンサーが必要になるようですが、今回は1つだけで実験します。
コーディング
コードは至ってシンプルです。
交流なので、瞬間瞬間の電圧を測ってもだめで、ある程度適当にサンプル数を稼いで、それを平均しています・・・が、本当は二乗平均で計算しなければならないそうなので、今度はそうします。
電圧のオフセット値が理論値の1.65Vではなく1.58Vになっているのは、実際の3.3V出力が、ちょうど3.3Vになっていなかったので補正しています。
void setup() { Serial.begin(115200); } void loop() { float total = 0; int sample = 5000; for (int i = 0; i < sample; i++) { int sensorValue = analogRead(A0); float voltage = sensorValue * (3.2 / 1023.0); float current = (voltage - 1.58) * 30; total += fabs(current); } Serial.println(total / sample); }
動作確認
値は正しいかわかりませんが、なんとなく電流を読み取れていそうです。(でも、どうやって値が正しいか評価するのか・・・)
Learning Esp8266: Build the Internet of Things With the Arduino Ide and Raspberry Pi