Micro:bitで電流測定
事の発端は課長からの一言
最近ドライヤー使った時にブレーカー落ちるからなんとかしたいんだけどどうにかできない??
私:炊飯器やポット使ってる時にドライヤー使わなければ大丈夫ですねーもしくは電力契約見直して増やすとかどうでしょう!
課長:契約変えるのはなんか負けた気がするし、ドライヤー使う前にブレーカー落ちないか見える化したいんだ。
私:電力量を見たいならスマートメータに変えてBルート契約したらNature Rumo Eとか、自作でやるならESP32とかでデータ引っこ抜けるのでは?
課長:スマートメータじゃないんだよね~Bルート契約とか面倒だなぁクランプメータとかからデータ引っこ抜けないの?
私:ほほう!面白そうですね。やってみますか!(自分の家でやると無駄遣いって怒られるからこれは楽しみだなぁ)
そこで今回はマイコンとクランプセンサー繋いで交流の電流値測定してまずは見える化してみましょうってことがきっかけです。電力だと電圧とか力率とか面倒だから電流のみをを測ります。
せっかく遊びでやるからオモチャっぽい作りにしてみましょう!(笑)
ケースは今回も菓子の箱、カ○リーメイト中身は美味しくいただきました!
そして使うはマイクロビットでブロック使ってプログラミング、子供のおもちゃ感出して行きましょう!
電流測定側の完成品の写真ははこちらです。
ちなみにもう一個のマイクロビットで電流値を受信してみました。
【材料】大体8700円くらいでした
・Micro:bit v2 2個
・クランプ式交流電流センサ(CTL-10-CLS) 2個
・Micro:bitプロトタイプ基板 1枚
https://www.amazon.co.jp/gp/aw/d/B07TQJJ4YT/ref=yo_ii_img?ie=UTF8&psc=1
・JST コネクタ 2P JST-SM オスメス
https://www.amazon.co.jp/gp/aw/d/B01M63SOL2?psc=1&ref=ppx_pop_mob_b_asin_image
・抵抗(100Ω) 2個
・抵抗(4.7kΩ) 2個
・セラミックコンデンサ(105) 2個※見様見真似で定数も適切かわからないです。リップルとかノイズとかオシロで見たいんだがほしいなぁ
・お菓子の箱(カロリーメイトは幅がぴったりでした。)
【予備知識】
クランプセンサーの電流から交流電流の実行値を算出する。
超小型クランプ式交流電流センサ(φ10/80Arms)CTL-10-CLS
www.u-rd.com
①データシートより
Eo=K×Io×RL÷n(VDC)
②①より変換
電流Io=電圧Eo×変流比N÷負荷抵抗RL÷結合係数K
Io=Eo × 3000 ÷ 100 ÷ 0.99
= 30.612244898 × Eo(A)
③マイコンにかかる電圧Eo = マイコンの電圧 × マイコンの分解能 × analog Readの読み取り値
Eo=3.3 ÷ 1024 × analog Readの読み取り値
=0.00322265625 × analog Readの読み取り値(V)
②に③代入により
④マイコンAD変換の値1当たりの電流値
Io=3.3 ÷ 1024 × 3000 ÷ 100 ÷ 0.99 × analog Readの読み取り値
= 0.09765625 × analog Readの読み取り値(A)
⑤交流の場合のanalog Readの読み取り値は測定電圧の実効値を求めます。
電流波形はマイナスもあるのでそのまま足すと値がゼロになるので、読み取った値を2乗してn回合計し、平均して平方根で求めます。
AnalogReedの値を2乗して最低1周期何度もポーリングして合計する。
1/fより
50Hz→1/50=20(ms)
60Hz→1/60=16.666...(ms)
じゃ1周期分を何回取得するんだいってところが結構悩みました。
ブロックだとタイマ割り込みできないじゃない(私の知識不足?)、Ardoino IDEで書くのは子供のおもちゃっぽく?という謎の意地でやらないとして、とりあえず測定周期分ひたすら読み取って合計してみます。
結論としてはブロックだとfor文で50Hzで1周期(20ms)で2chで100回程度とれてました。
タイマ割り込みでやってないからかやはりビミョーに100回の測定時間が1周期分とずれるのが気持ち悪いです。
500ms分取得したら50Hzだと25期分になるので測定時間が少しずれてもまあ誤差で済むと思います。
60Hzでもちょうど30周期取れるのでどちらにも対応できるってことにしよう。うん
てか1回の測定が100μsって結構遅いんだなぁ~
micro:bit V2はSoCがNordic nRF52833だったので、Nordicのサイトを知り合いに聞きながら調べたら内部抵抗10Ωだと読み込みに5μsだっけ?(うろ覚え)
v1.5:16MHz→v2:64MHzと高速化されてますので、旧バージョン(v1.5)だとサンプリングはもっと少ないと思われます。
【要件や仕様】
・測定範囲は1A~40Aくらい
・測定間隔は5sに1回更新する。
・ブレーカーにクランプして測定する(L1とL2の2ch)
・測定側と表示側は無線で送信する。(マイクロビットの無線を使おう)
・表示はドライヤーの近くで2ch文の合計を表示する。
・表示側は数字でも見たいし、2AごとにLEDで埋めてくれる機能も入れよう。
・値によって制御とかは今回はしない。表示だけ。
【回路図】
3.3VとGNDを分圧して1.65Vの基準電位を作ってその差を読み取って行きます。
これで交流波形のマイナスも測定できるようになります。
調べてたらレールスプリッタっていう回路だそうです。(間違ってたらすみません)
とりあえず汚い手書き画像載せときます。
【電流測定側のプログラム】
makecode.microbit.org【表示側のプログラム】
makecode.microbit.org余談ですが
将来的に設備の稼働率や稼働状況のモニターとか作って組み合わせとかスケジューリングのための分析とかできそうだなぁ〜
機会があったらESP32とルーターとラズパイで複数の設備の電流値を取ってみたいですね。
今まではなんか高いIoT機器を買って稼働率見えるようにしてるみたいで、満足して改善までいきつかないか、分析できるスキルがないかで終わってたような気がします。
安い早いでこれならたくさん検証とフィードバックを繰り返して次への学びに繋げられそうですね。
おわり