自作電子小物/開発情報/簡易電力量計/7チャネルGUI版
自作電子小物/開発情報/簡易電力量計/7チャネルGUI版
Wh meter V0.8
2014年1月18日土曜日
家庭用の分電盤に取付ける多チャネルの電力量計。Bluetoothでデータ転送、USBメモリへのデータ蓄積機能を持つ。
目 次
1 大まかな設計
1.1 目標とするもの
(1)電気料金を減らすには
(2)何の情報が判れば良いか
(3)期待される小物のイメージ
(4)要求仕様
1.2 全体構成
(1)計測方法とセンサ
(2)表示と入力
(3)記録と転送
(4)制御部
(5)構成図
2 詳しい設計
2.1 入力部
(1)交流電流センサ
(2)交流電圧センサ
2.2 表示・操作部
(1)LCD接続インタフェース
(2)タッチパネル接続インタフェース
2.3 出力部
(1)SDカード接続
(2)USBメモリ接続
(3)Bluetooth接続
2.4 データ保存
(1)EPROM
2.5 電源部
2.6 制御部
2.7 基板
2.8 ソフトウエア
(1)画面レイアウト
(2)サポートライブラリ
2.9 外装
2.10 性能検証
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1 大まかな設計
小物のイメージを固めて行きます。
1.1 目標とするもの
基本的には「一般家庭で電気料金を減らすのに役立つ情報を手軽に得られる小物」です。
また、8年前に作った初代(WHM0.4)が大分くたびれて来たのと、操作が面倒になってきたので、世代交代させたいとも考えています。
(1)電気料金を減らすには
(a)電力量を減らす
最初に、ムダカットする様な場面では、次の様な手順を踏むのが一般的だと思います。
①一番の電気食いを探す
大きい方が効果も大きく楽しいし、小さい物をたくさんやっても疲れてくるだけ
電力ではなく、あくまでも電力量(料金・環境負荷)で見比べる
大電力を短時間(何回も)、中位だが長時間使っている機器が怪しい
②電力量を削減できないか調べたり考えてみたりする
冷蔵庫なら設定温度を変える等、調整で対応できないか?
くたびれている機器なら、より省電力の機器への買い替えを検討する
③そもそも必要か、代替方法がないか考えてみる
それが無い場合に発生するコストアップと、消費し続ける電気代を見比べてみる
例えば、エアコン暖房と石油ファンヒータ、電気代は電力量が見えれば計算でき、それで買える灯油量と
比較すれば容易に判断できる
解決したら、次の消費が大きいものへと、繰り返し実行すれば、より最適化されていくはずです。
私が思うに、より節約を進めるには、ある程度努力が必要な対策も出てきますし、持続がネックになって来ま
す。持続させるには、簡単に判りやすく状況を把握できたり、がんばり度を指摘してくれたりするような工夫
が必要だと思います。
(b)契約アンペア数を減らす
大抵のお家は「従量電灯B」契約だと思われますが、これは主遮断器の定格で基本料金が決まります。
定格が小さい方が安いので、できるだけ小さくしたいところ。
ピーク電流を知る事が出来れば、アンペア数を減らせるかもしれません。
1ランク下げられれば3千円/年程度節約できます。
(c)料金プランを変更する
各電力会社、時間帯で割り引く料金プランが用意されており、電気を使用する傾向が判れば、契約変更により
節約出来るかどうかが判断出来ます。
(2)何の情報が判れば良いか
上記の要件をまとめると
・多くの測定ポイント、究極は電化製品単位
全機器の電力量を同時に測るのは現実的でない(理想ではあるが)ので、
・テーブルタップのような形で複数配置する
・既存の配線にセンサを取り付ける(分電盤なら一カ所に集中しているので好都合)
といった方法で、家中の使用電力を計測する必要があります。
今回は、面倒な方法は避けたいので、後者の選択と考えます。
一般家庭では、〜20系統ぐらいに分かれていますので、出来れば20カ所同時計測を目指します。
・一定時間間隔での電力量
時間帯別の料金プランへの適合を調べるだけなので、1時間毎のデータで良い。
ピーク値については、全系統の合計電流が10A,15A,20A,30A,40A,50A,60Aを越えた回数が判れば良い。
・リアルタイムでの電力値
問題機器を特定する上で、やはり瞬間電力が見えた方が調べやすい。
この時、分電盤の近くに行って確認するのではなく、手元の画面に表示されればGood。
・測定した日時
日時情報は絶対必要。
ただし、高精度である必要は無く、1分位ぶれても問題無し。
また、見せ方として
・一目見て大体の状況を把握できる
一覧性のある画面レイアウト。
・判りやすいグラフ表示
出来ればという範囲で。
・対策前後で比較できる
前年同月比とか、前日比といった画面レイアウト。
・より詳細な分析を行うためのデータ取り出し
PCへのデータ出力機能。
・分電盤から離れた場所で確認したい
無線接続もしくはLAN接続。
が必要だと思います。
(3)期待される小物のイメージ
・分電盤近くに設置し、〜20個のセンサを簡単に取り付けられる
・1年間位のデータを蓄積できる
・20項目を同時に表示出来るようなグラフ表示も可能な大きな表示器
・無線/LAN接続でPCやスマートフォンを表示器代わりに利用
・有線または無線またはメディア渡し等でデータを出力
かなりリッチな要求となってしまいましたが、現実的にはどうでしょう。
まず、センサ数については、最低限数をWHM0.4を基準に7個、最大20個、取りあえずこのままで。
一番大きいのが、表示器の選定です。
小物で大きめの表示を行うのであれば、
・グラフィックLCDモジュール ・・・3インチ程度なら予算的に何とかなるが、それ以上だと厳しい
・7セグLEDを多数配置 ・・・一番現実的だけども、グラフ表示が出来ない
位しか思いつきません。
3インチクラスのLCDを使うしかないといった所ですね。
PC・スマートフォンを利用するのであれば、この悩ましさから逃げる事が出来ますし、遠隔監視という理想的なシーンが実現出来ます。ただ、幾つかの懸念事項もあります。
・適合機種を持っていないと使えない、多くの機種をサポートしなければならない、自作の間口が狭まる
・小物としての独立性がない
・無線接続やLAN接続はコスト的、技術的に問題
結局どうするか?
要件として、離れた場所で見る事の重要性・優先度をどう考えるかによります。私は、これは重要な要素だととらえました。センサ取り付けの容易さから分電盤近くへの設置とはなりましたが、実際消費する機器は別の所にあります。やはり、機器の反応を見ながら電気の使用量もチェックできた方が実感が湧くと思われます。
実のところ、無線接続でのデータ連携については、前回の小物でBluetooth接続のルートを開拓しましたので、基本、この形態つまりPCやスマートフォンを利用した遠隔画面表示とする事にします。当然、データ出力も無線経由となります。
しかしながら、どうしても小物の独立性が引っかかり、八方美人的ではありますが、LCDも付ける事とします。仕方が無い、どうしても納得いかなかったのと、ディスプレイが必要ないという人は付けなきゃ良いじゃなかと考えた次第です。注意すべきは、付いていなくともちゃんと使えるようにしなければならないのです。つまり、セットアップも外部から出来きたりといった配慮が必要です。
(4)要求仕様
・本体は分電盤付近に設置し、センサの取り付けは工事不要に
・計測数は7〜20カ所(系統)
・表示内容は
・系統毎の電力量、瞬間電力
・月毎、日毎、時間毎、系統の電力量
・月間のアンペア数オーバ回数
・データ保持単位は1時間毎、保存期間は1年(13ヶ月)以上
・3インチ以上のLCDを本体に持ち、グラフ等判りやすい表示を行う
・無線通信により、離れた場所のPCもしくはスマートフォンにデータを表示可能
・基本精度は±10%
・最大電力4.4kW/200V・系統
・最大電力量1000kWh/月・系統
・時計精度±5分/月
1.2 全体構成
(1)計測方法とセンサ
計測方法
基本は、電力は電流と電圧から計算で導き出しますが、常に変化するので計算はやっかいです。
詳しくは、過去の小物(本ページ末尾の<関連>)を参照して下さい。
文書ファイル:Method.numbers
商用電源の特性を利用して、多少簡略化する手もありますが、今回はより正確な方を目指したいと思います。
この式の入力となる、電流と電圧のセンサが必要だと言う事です。
電流センサ
既存配線を変更せずに電流計測するという要件では、「クランプ式のCT(カレントトランス)」以外は無いと思われます。
CTの選定は、現在比較的入手しやすい製品の中でクランプ式で30Aまで計測できる物を探しました。
・U_RD CTL-6-S32-8F-CL(15A以下) ¥1300/U_RD直販
・U_RD CTL-8-CLS ¥1500/U_RD直販
・U_RD CTL-10-CLS ¥1500/U_RD直販
・ECHUN Electronic ECS1030-L72 $9.95/Sparkfun
入手しやすさという意味では、実質U_RD社の製品となります。一品ものや、結局U_RDのOEMだったりします。
今回は、手持ち部品の関係でCTL-10-CLSを使用します。
電圧センサ
おおむね、以下の手法が選択肢だと思われます。
・分圧抵抗 安価、絶縁対策要
・降圧トランス 絶縁できる、電源と共用も可能、位相ずれに注意
部品の入手性から分圧抵抗式とします。
採取場所については、
・電源用のコンセントで検出
・計測用のプローブを用意
前者は、差し込むだけなので簡単で事故になりにくく、好都合です。また、今回の要件では、電源は電池駆動は難しいと考えられるため、どちらにしてもコンセントは必要です。とてもスマートな方法に思えます。
後者は、取り付けが面倒で危険な面がありますが、電圧を計測したいポイントを自由に選べ、より正確な計測ができるというメリットがあります。200V系のラインを測るという事も可能です。また、前者の裏返しですが、電源アダプタで電源供給するという手段を使え、高電圧を扱わなくて済むので、工作時の感電に対しては気が楽です。プローブ内に抵抗器を入れる事で、感電を軽減する方法を前回の小物で使っており、少ないですが実績もあります。
本来なら前者とすべきだと思いますが、工作のしやすさの方を重視し「計測用のプローブを用意」とします。
(2)表示と入力
3インチクラスのグラフィックLCDを使用する事が決定しています。
グラフィックLCDは定番商品と言えるものがないため、都度対応に近くなります。
・4D Systems uLCD-32-PTU-AR 3.2’ 240x320 Touch I/F=Serial $84.95/Sparkfun
・XIAMEN OCULAR OPTICS GDM12864HLCM 2.4’ 128x64 B/W $19.95/Sparkfun
・Sunlike Display Tech SG12864ASLB 3.2’ 128x64 B/W ¥1600/秋月
・XIAMEN ZETTLER ELECTRONICS ATM0430D5 4.3’ 480x272 I/F=Video ¥3000/秋月
・CP2401T 2.4’ 240x320 Touch I/F=8/16bit ¥1500/aitendo
・S95160-32 3.2’ 240x320 Touch I/F=16bit 基板付 ¥1650/aitendo
・M032C1289TP 3.2’ 240x320 Touch I/F=16bit ¥2980/aitendo
・S95461C 3.2’ 240x400 Touch I/F=16bit ¥2580/aitendo
Video信号入力のものは、制御部の負担が大きくなる(というか別途接続ハードウェアが必要かもしれない)ので、適用外と考えるしかないでしょう。また、16bitのバス幅を要する物との接続には、制御部もそれに合わせたポート数を用意出来るものを選定する必要があります。8bitを選べるものは選択の幅がかなり広がります。
入手性については、2〜3インチ240x320ドットの製品は良く見かけますので、今後も供給されやすいと思われます。
今回は、大変安く入手出来るS95160-32を使います。
安定して入手可能な感じでもないのですが、類似のものは入に入るでしょう。やはり都度対応物件です。
タッチパネルのおかげで、別途入力スイッチ等を用意しなくとも良くなりました。
このデバイスへの接続条件は、表示側がデジタルポート×20、タッチパネル側がデジタルポート×2、アナログポート×2です。やはり、表示デバイスは多くのリソースを消費します。
(3)記録と転送
データ記録
データ量により、使用するデバイスが大きく変わってきます。
24時間×1年間×1件のデータ量(系統数×電力量データサイズ+日時サイズ)
=24 * 365 * (20 * 4 + 4)
=719kB
このサイズとなると、内蔵のFLUSHに記憶するというレベルでは無くなってくるので、外部記憶デバイスが必要になってきます。
それでも少しあがいてみます。
1MBのFLUSHの内、半分をEPROMの代わりにするとして512kB。系統数を半分にすれば1年とちょっと入ります。年の切り替え時のFLUSHの消去を考えると2年分位のエリアは必要。系統数を1/3→7系統にすれば何とか2年分は入ります。
逆に考えると、2年分しか入らないというのも少し寂しい感じはします。
1時間毎の情報は本当に絶対必要なものか?あった方が良いのは判るが、無くてもあまり困らないような気もします。前日の同じ時間帯との比較は必要だと思いますが、前月の同じ時間帯との比較なんて見ないです。それよりも、長期間のデータが残っている事の方が大事だと思われます。
ここは、大鉈を振って、
「1日単位のデータのみを長期保存し、1時間単位のデータは直近のものしか記憶しない」
という事にしましょう。
そうすると、17年分のデータを保持出来る事になります。別途、記憶デバイスを用意する必要もありません。
もし、メモリを用意できない場合は、外部にEPROMを接続するか、メモリカードを接続します。
データ転送
小物から外部にデータを出力する方法については、いつも悩まされます。
何が悩ましいかというと、絶縁問題についてです。出力先、主にPCを想定していますが、PCとは電気的に接続する事は大変危険(壊れる、漏電する)なので、何らかの分離策をこうじなければなりません。
・電磁変換(トランス、Ethernet)
・光変換(フォトカプラ)
・無線通信(赤外線、WiFi、小電力無線)
・メディア手渡し
等の策があります。
今回は、Bluetoothでの無線通信が低コストで実現出来るようになりましたので、これを活用する事とします。
Bluetoothには体温計等色々なプロファイルが用意されていますが、電力量計に使えるものは見当たりませんでした。そこで、既存のプロトコルを利用しての独自通信を行う事になります。
・RFCOMMでストリーム形のデータ転送
・ATT(アトリビュートプロトコル)でキー/バリュー型のデータ転送
前者は、受信側に汎用の通信ソフトウエア(ユーティリティ)を使えるので、ソフトウエアの開発が不要になります。この場合、CSV形式の様なフォーマットで転送し、通信ソフト側でデータキャプチャして、ファイルに残すという感じになります。
後者では、汎用のソフトウエアが無い訳ではありませんが、基本的には専用のソフトウエアを開発しなければなりません。
つまらない理由ですが、iPhoneでデータを確認したかったので、趣味ベースでBluetooth対応ソフトを書ける、後者のプロトコルを、とりあえず選択します。
(4)制御部
要件をまとめると
・アナログポートは22以上
・デジタルポートは22以上
・USBホスト機能
・内蔵FLUSHは512kB以上、もしくはメモリカードを接続可能
基本、240x320ドットの16bitカラーLCDを振り回すので、それなりのCPUパワーは必要です。
・PIC24FJxxGBシリーズ
・PIC32MXシリーズ
・LPC1700シリーズ
・STM32F4シリーズ
など等、ありますが今回も開発評価ボードの流用でSTM32F4-Discoveryを選択します。
アナログポートが20本も用意できませんが、それはその他のコントローラでも同じ。今回は、最低ラインの7本は用意出来るので良しとしました。コスト的にも問題なく、製作も簡単、言う事なしです。オーディオ入出力や、加速度センサも搭載されていますが、今回は未使用です。
(5)構成図
文書ファイル:WHM08 config.numbers
2 詳しい設計
実際作成出来る所まで設計を進めます。
2.1 入力部
(1)交流電流センサ
私の理解している範囲で、もう一度CTについて見直してみましょう。
CTは貫通する電流から、ある一定の割合で抜き取られ、出力端子にその電流を発生させようとする素子です。
電気的な接続はありませんが、本当に貫通ラインから少しだけ電流を抜き取るのです。
駆動するのに電源はいらず、実際電流が発生しますので、LED等をつなぐと光ります。
割合は変わりませんから、この電流を測定すれば、貫通電流を計算出来るという仕組みです。
この割合は、主に巻き線数に起因します。
あとは、この小さい電流値を読み取れば良いのですが、電流そのものを計測する事は意外と難しいので、抵抗器を入れてその両端に発生する電圧を計測します。
オームの法則V=IRに従い、抵抗値を大きくすれば大きな電圧を得る事が出来ます。
この抵抗、負荷抵抗と呼ぶ事が多いのですが、これが付いていなくとも、CTはがんばって所定の電流を流そうとしますので、開放したCTの出力端子には高電圧が発生し危険です。CTと負荷抵抗を必ずペアにしたり、絶対外れないようにする等の配慮が必要です。U_RD社の製品は良く出来ていて、CT内に電圧リミッタ回路が内蔵されており、この問題について考慮する必要がありません。
■負荷抵抗の選定:100Ω
使用するCTと、測定範囲、精度の兼ね合いで決まります。
A/Dコンバータの入力は0〜3.0Vの範囲です。
測りたい最大の電流は30Aです。
U_RD社のCTL-10-CLSを使います。
U_RD社のホームページで、CTL-10-CLSの特性グラフを見て下さい。
データシートの出力電圧特性を見て、貫通電流が30A以下で、かつ出力電圧が3V以下部分での利用となります。
注意しなければならないのは、出てくる数字は全てRMSなので、交流なので、ピークの電圧・電流はもっと大きくなります。
例えば、純粋なSIN波形なら√2倍(約1.4倍)は出てきますので、余裕を持たせなければなりません。
ピーク値=30x1.4=42Aとして、もう一度特性グラフを見ると、負荷抵抗は100Ωが適切だと読み取れます。
これだと、最小値が0.1Aなので10W以上の計測となります。
負荷抵抗を上げられれば、この最小値も1/10に出来るかもしれませんが、そうなると今度は頭の方が抑えられます。
この辺が兼ね合いで決めていくしかない場面です。
負荷抵抗を交換できる実装や、電気回路で動的に変える等の工夫を行っても良いかもしれません。
■A/Dコンバータの能力
最小0.1Aの時に3mVの出力なので、解像度1024以上の能力があれば良好だと思われます。
動的にVrefを変えて、擬似的に精度をアップさせる手法もあります。
今回使用するSTM32F4の内蔵A/Dコンバータは、最大4096の解像度を使えますので、特別な対応は不要です。
■入力回路とマイナス値の取り込み
交流はマイナス成分もありますので、取り込み回路には配慮が必要です。
・差動型のA/Dコンバータなら、そのままマイナス値も取り込める
・プラス側にオフセットさせて取り込み、数値処理で元に戻す
・マイナス成分を取り込まず、必ずプラス成分と同じだという条件づけにして、数値処理で何とかする
今回も最後の方法で対応します。
CTの入力回路は、過電流保護の抵抗を通すだけで、コントローラのアナログポートに直づけします。
マイナス電圧がかかった場合、コントローラ内のクランプダイオードでVssに流れ込みます。
最大でも、過電流保護抵抗分の電流しか流れないので、素子破壊にはならないはずです。
非対称の波形は無い想定です。正側のデータだけで計算するために、2倍にするか対称波形を作ってしまえば良いはず。
電力計算を単純化させるために、対称波形を生成する方式とします。
■キャプチャ時間:100ms
前作WHM0.7と違い、本体の電源事情は厳しくないので贅沢な仕様に出来ます。
固定値で100msの間波形をキャプチャします。
これは、50Hz=5サイクル、60Hz=6サイクル分のデータです。以下の利点があります。
・周波数を意識しなくて済む
・ゼロクロス点を探さなくて済む
・オーバサンプリングするのでノイズの影響を減らせる
■サンプリング間隔・回数:100μS×1000回=100ms
1サイクルを20回位タイムスライスした時でも、簡易測定器としては十分な結果が出る事は、これまでの経験で判っていますが、今回は贅沢に100回程度に設定したいと思います。60Hzの場合、60*100=600回、切りの良い数字にして1000回と設定します。サンプリング間隔は100ms÷1000回=100μSで、STM32F4では実現可能な数字です。
ちょっとやり過ぎかもしれませんが、減らしたとしても劇的にコントローラの消費電流が減る訳でもなかったので、この数字にしています。
STM32F4では、自動的にキャプチャを繰り返すように設定できます。
・A/Dコンバータ1本で自動で7チャネルを順次走査
解りやすい解説がSTMから出ています。
“Application note AN3116 STM32’s ADC modes and their applications”
1.2 Multichannel (scan), single conversion mode
・タイマで100μS毎にADCに開始割込を送る
TIM3を使用
・変換されたデータはDMAで直接メモリに記録され1000回分のエリアを用意
100ms毎に停止するのではなく、100ms周期で常に新しいデータがスイープされていく感じです。
キャプチャ途中の状態であっても、100μS分のデータなので、50Hzもしくは60Hzであれば必ず同期状態です。
中途半端な間隔ではないので、電力計算には影響がないはずです。
■測定間隔:1秒
経験則で決定。
■位相補正:補正なし
CTもコイルの一種ですので位相差が出てしまうのは仕方の無い所。今回使用した CTL-10-CLS をこの条件で使う分には目に見える位相差が無い様でしたので、何もしないという事にしました。もし、位相差を考慮しなければならないとしてもマイコン内での計算処理で補正は可能だと思います。
(2)交流電圧センサ
WHM0.7と同じ。
取り込み回路の抵抗値は、電流用と同じ100Ωだと回路が簡素化し、扱いやすくなります。
・ADC入力電圧=100V*(R1/(R1+R2))=100*(100/(100+200000))=50mV
・ADCカウント=ADC入力電圧/(基準電圧/解像度)=50mV/(3/4096)=68カウント
・1カウント1V以下
ちょっと精度悪いですね。改善した方が良いとは思いますが、とりあえずこれでやってみましょう。
これが実際の取込み波形です。青の細い線がA/Dコンバータから出力された生データで、緑の線がローパスフィルタ(LPF)処理・負側波形生成後の物です。きれいとは言えませんが、WHMを作って来たこれまでの経験上、問題ないレベルだと思います。LPFは5サンプリング分の移動平均(500uS→2kHz)で実装しています。また、A/Dコンバータがミスキャプチャしてゼロ値を出力する事が多い様なので、キャンセルロジックを組み入れています。ミスするのは使い方が悪いのでしょうから、本当ならば根本原因を調べる必要がありますが後回しにしています。
2.2 表示・操作部
(1)LCD接続インタフェース
16ビット+制御線4本のパラレルインタフェースです。
ポートの割当ては以下の通りです。(LCMとはLCDモジュールの略です)
STM32F4 Discovery Pin assign.numbers
STM32F4は、LCDモジュールでよく使われるパラレル入出力インタフェースをDMAで行う機能を持っています。
しかし、STM32F4-Discoveryでは、16ビットポートまるまる空いている所が無いので、この機能を活用する事が出来ません。
制御ソフトウエアは、自家製ライブラリを利用します。
(2)タッチパネル接続インタフェース
4線抵抗式のタッチパネルで、コントローラ無しタイプです。
座標検出はソフトウエアで対応可能です。
2.3 出力部
(1)SDカード接続
ポート数の関係で直結不可、USB変換アダプタでUSBメモリとして接続する事は可能。
(2)USBメモリ接続
USBホスト機能を使用。
STM提供のライブラリで標準サポート。
(3)Bluetooth接続
USBホスト機能を使用。
プロトコルスタックは、自家製ライブラリを利用。
2.4 データ保存
(1)EPROM
STM32F407には1MBのFLASHメモリが内蔵されており、自分自身で書き換える事が可能。
プログラム本体は、せいぜい256kBぐらいの予定なので、何もしなければ残りは使われずに一生を終えます。これは、もったいないので、EPROM代わりに使用する作戦です。EPROMとは不揮発性のメモリを指します。
FLASHメモリの特性として、消去してデータを全て”1”し、書込みは”0”にする事しか出来ません。”0”を
”1”に出来るのは消去だけで、通常この「消去」動作は1バイト単位ではありませんので、かなり制約を受けます。さらに、10〜100万回の書込み寿命もあり、設計時に注意を要します。
16
kB
#0
16
kB
#1
16
kB
#2
16
kB
#3
64
kB
#4
128
kB
#5
128
kB
#6
128
kB
#7
128
kB
#8
128
kB
#9
128
kB
#10
128
kB
#11
<ーーーープログラムーーーー> <ーーーーーーーーEPROM用ーーーーーーーーー>
STM32F407では、RAMと同じメモリ空間に割り当てられており、読み出しだけなら普通のメモリと同じです。
消去については、セクタと呼ばれる16kB〜128kBの12個の単位です。他の製品に比べると、大分大きいですね。
書込みは、最小1バイト単位なので、問題ありません。
多分、、#6〜#11セクタが空きとなるので、6*128kB=768kBを使えるはずです。
1エントリ32バイトでは、24576件、1時間単位の場合2.8年、1日単にの場合67年分の保存期間となります。
悩んだ結果、1時間単位としました。製品寿命として2年は短すぎるので、再利用の仕組みが必要になります。
再利用は、ラップアラウンド方式とします。
プログラム領域を調べる方法は、リンカが生成するシンボルを参照する事で実現しました。
初期化データがプログラム領域の最後に配置されますので、この最後位置が欲しいのですが、ずばりのシンボルがないので、この3つのシンボルを使って計算しています。この辺は、コンパイラ/リンカに左右される部分ではあります。
これらは、ソースコード eprom.h, eprom.c にしたためてありますので、ご参照下さい。
2.5 電源部
Discoveryの電源は、USBコネクタもしくは、外部5V電源より供給させる事が出来ます。
5VのACアダプタを取り寄せるより、USB-ACアダプタの方が安く入手しやすくなっています。
今回は、USBからの給電とします。
LCDの電源で3Vが必要ですが、Discovery内に3Vのレギュレータが乗っており、外部に引き出す事が可能です。
容量的に余力があるのを確認し、これを利用する事にしました。
2.6 制御部
Discoveryだけで追加の機能は不要
2.7 基板
DiscoveryとLCDモジュール基板は、両面テープで固定して間をワイヤで配線する方法
センサ入力部は、大した回路ではないので、蛇の目基板に実装
2.8 ソフトウエア
面倒な事は、ライブラリ側に押し込んだので、特筆すべき事はありません。
(1)画面レイアウト
以下の画面構成とします。
・現在値
瞬間電力,電力量(月間)、棒グラフを全ての系統を1画面に配置。
一目見て、直感的に電気の使用量を感じる為に、色分けする。
・1日の変化
1時間毎に使用した電力量をグラフで表示。
時間帯で色を変える。
・月間の変化
日毎に使用した電力量をグラフで表示。
・年間の変化
月毎に使用した電力量をグラフで表示。
・センサ特性入力
多くのセンサを使えるように、細かいパラメタを入力出来るようにします。
・日時入力
(2)サポートライブラリ
利用可能なライブラリがあれば、出来るだけ使用します。
・マイクロコントローラ内蔵ペリフェラル対応
STM32F4ペリフェラルライブラリ/STM
・USBホスト機能
USBホストライブラリ/STM
・USBメモリ対応
マスストレージクラス:USBホストライブラリ/STM
FATファイルシステム:FatFs/日本のChaN氏(STMの標準提供品です)
・USB-Bluetooth対応
ワイヤレスコントローラクラス: USBホストライブラリ/STM+ Bluetooth4P/自家製
Bluetoothソフトウエアスタック:Bluetooth4P/自家製
今回、高負荷環境での不安定さがある問題を解消しています。
詳しくは、TIPSを参照下さい(TIPS/Bluetooth-LEスタック/ペリフェラル向け/STM32版)
・LCDモジュール制御
グラフィックLCD制御:S95160/自家製
今回、ボタンや入力フィールド等のグラフィックオブジェクト機能を追加しています。
詳しくは、TIPSを参照下さい(自作電子小物/TIPS/グラフィックLCD S95160/STM32)
2.9 外装
樹脂/プラスチックのケース
手頃なケースがないので、アクリルシートでちょうど良いサイズのものを製作
タッチパネル操作するので、四角い窓を開けるか、開く形にする
加工しやすい、開閉式にする
2.10 性能検証
電力会社が提供する、料金メータとの比較を行います。料金メータは計量法で精度が保証されていますので、比較元としては最適だと思われます。
約半月のデータですが、目標±10%に対し-1%ですので、申し分無しです。
今回の計測では、高力率・高電力機器である電熱式の温水器を全く使用しない条件です。電熱ヒーターは純粋な抵抗器の様な物なので、この様な計測条件としては簡単・単純すぎます。その上での、この結果は大変嬉しいです。
後日談:周波数の計測にミスヒットが多く見受けられるようで、改善が必要だと感じています。
→バージョン0.4eでかなり解消されました。
Multi channel watt hour meter.
Graphic display and bluetooth communication.