ESP8266はArduinoが動くWi-Fiモジュールです。 このESP8266を使って、家の電力使用量を測定し、Ambientでモニターします。
ハードウェア
ESP8266
ESP8266についてはいろいろなところに解説記事がありますし、Ambientでも「Arduino ESP8266で温度・湿度を測定し、Ambientに送ってグラフ化する」で紹介していますので、それらをご参照ください。
クランプ式電流センサー
電流の測定はU_RDというメーカーの超小型クランプ式交流電流センサCTL-10-CLSを使いました。データーシートによれば、100Ωの負荷抵抗をつけるとクランプを流れる電流10Aに対して0.3Vの電圧が得られます。この負荷抵抗の両端の電圧を測定し、逆算してクランプを流れる電流を計算します。
家庭用の電力は、多くの場合単相三線式といって2系統で送られてきますので、家全体の電力使用を把握するには2系統を測定する必要があります。ESP8266はAD変換できる入力が1チャネルしかないので、2チャネルのADコンバーターMCP3002を使いました。
回路図はこんな感じになります。
実際に分電盤に設置した様子です。
電流値だけでは電力は分からない
クランプ式電流センサーで電流値は測定できます。電力は電圧×電流ですが、交流の場合は電圧と電流の位相のずれがあるため、実際に使われた電力(有効電力)は
有効電力=電圧×電流×力率
になります。交流の電圧は100Vだから電流値を測定して100Vをかければ電力になる、というわけではありません。今回は自宅の電気の利用パターンを調べることが目的で、正確な電力値を求めることが目的ではないので、電流値から電力使用の傾向を把握することにしました。
プログラム
交流の電流値を測るためには、交流の1周期の電流をさらに細かい周期で何回か測定し、平均(二乗平均平方根)して電流値を求めます。ESP8266にはTickerという周期処理のライブラリーが用意されているので、これを使いました。Tickerの最小周期がミリ秒なので、1ミリ秒間隔で100回、100ミリ秒間電流値を測定するようにしました。日本の電力は東日本が50Hz、西日本が60Hzですので、100ミリ秒の測定は東日本では5周期、西日本では6周期の波形を測定することになります。
単相三線式で送られてくる2系統の電流値をそれぞれ30秒に1回測定し、Wi-Fi経由でAmbientに送信します。プログラムはGithubに公開しました。
Ambient
Ambientには家の電力2系統の30秒ごとの電流値が送られてきます。そこで、この電流値をグラフ化しました。こんな感じのグラフが得られます。
さらに同じデーターから電力値のチャートを作りました。チャート設定でグラフ種類を「棒グラフ(縦積み)」にし、集計を「30分間」の「平均値」に設定します。
すると以下のようなグラフが得られます。
30分間の平均電流値ですので、次のような関係で電力値に読み替えることができます。
電力値(kWh) = 縦軸の値 x 100(V) / 1000 / 2
ただし、上にも書いたように、この関係は力率を無視していますので、概算としての電力値になります。1ヶ月間、電流値を測定し、電力会社(東京電力)の検針値と比較したところ、
1ヶ月の検針値 = 1ヶ月の平均電流値 x 100V x 0.86
という関係でした。季節によって使う家電製品が異なり、力率も異なってくるので、あくまでも目安です。
我が家の電力使用
30秒ごとの電流値のグラフからはなんとなく電気の使用状態が分かります。
上のグラフは2016年10月13日(木)です。我が家では青い線の系統1側に冷蔵庫がつながっており、コンスタントに2A程度の電流が流れています。赤い線で6:00頃、10:15頃、11:30頃に15A弱の電流が短時間流れているのは電子レンジ、7:15ごろからの青い線のギザギザは洗濯機です。
このようなデーターから、生活パターンが分かりますし、データーを継続して取ることで生活パターンの変化や異常が検出できます。電力モニターを利用したサービスの一つとして独居老人の見守りサービスが挙げられています。逆に、電力の使用状況から在宅か不在かが推定できますので、このデーターを公開することはプライバシーやセキュリティー上のリスクを伴います。
今回は家の電力使用をモニターしました。同様の仕組みを使って工場の工作機械の消費電力のパターンなどをモニターすると、作業の効率化や異常検知などに応用することもできそうです。