【完成です!】BluePillを使ったPZEM-004T電力計ロガーにRTCとSDカード組込み | トドお父さん通信

トドお父さん通信

北部九州在住 高BMI中高年のオタク趣味の活動記録

みなさんこんにちは。 トドお父さんです。

いろいろと苦労しましたが、SDカードとRTC対応のPZEM-004T電力計ロガーの改良版を作ってます。

今回ようやくソフトが完成して、回路変更とケースへの組み込みが完了したので報告しますね。

  組み込み完了(SD書き込み中)です

【前振り】

このPZEM-004Tを使った電力計ロガーは1月にBluePill STM32F103Cに移植が完了しました。
【Part2】STM32F103BluePillでPZEM-004Tを使った電力計を作りました!
 

このときは、内蔵のRTCを動かして、SD Card基板を追加し、FatFsでSDカードに記録する件が宿題と

して残っていました。ケースが小さくてRTC用のバックアップ電池とマイクロSDカードモジュールを

組み込むのがムリゲーそうだったからです。

 

あれから色々と検討して、BluePillのRTCとSDカードの対応ソフトについてはArduino STM32core

いわゆるSTM32dunoのプログラムを調査して、ブレッドボード上で動作を確認しました。

前回のポストにある通りです。

【Part1】BluePillを使ったPZEM-004T電力計ロガーにRTCとSDカード組込み

 

ハードについては、小型のAdafruit SD Cardモジュール4682と小型のCR2032電池BOXをマルツから

入手できたので、ムリゲーからなんとか小型のケースに組み込めるメドが出てきました。

そんなわけで、前回はブレッドボードでBluePillのRTCとSDカード書き込みソフトを作成したところ

まで報告しました。
【Part1】BluePillを使ったPZEM-004T電力計ロガーにRTCとSDカード組込み

 

今回はハードの部分、前の電力計ロガーからの回路図の修正内容と、ケース加工組み込み

それと最終のソフト修正の動作確認までを説明しますね。

 

【ハード設計】

下記が、今回のSDカード基板とRTC用のバックアップ電池を追加した回路図になります。

 

前の回路図に対して、修正した部分はAdafruit 4682 SDカード基板の追加とRTC用のバックアップ電池

 CR2032ソケットの追加だけです(が、プログラム修正とケース内に納めるのは結構苦労しました)

 

ネットで調べると一般にバックアップ電池には、逆流防止用のダイオードとか色々ついているんですが、

STM32F103のデータシートを読むと、BAT端子には低電圧になると内部のVccからVBATに切り替える

スイッチがついているので、バッテリを直接つないでも問題ないようです。

内部に切替えスイッチがついているので、通常時はバッテリへVccから逆流する心配はないからです。

 

リファレンス基板のバッテリCR1220も直接つないでいますね。

 

海外の記事にCR2032は3.6Vあるのでそのまま接続すると危険、とありましたがCR2032の公称電圧

は3Vですし、VBATの最大電圧は0~3.6Vになっていますので問題ないでしょう。

 

前に悦明しましたように、今回は小型のmicroSDカード基板Adafruit 4682を使います。

前のレベルシフターIC付きのAdafruit 254と比べるとその大きさが分かると思います。

 

  電池BOX

CR2032電池ホルダも前回 ATTINY202/402導通チェッカで使ったSMDタイプのものを使いました。
CH7410-2032LF/TRAY というタイプです。これも小型で高さが低いのでいいですね。

 

【ケース組み込み】

回路図ができて部品も選定したので、いよいよケースの追加加工に入ります。
ここまでのケース加工については、前の記事に詳しく書いています。
【Part2】STM32F103BluePillでPZEM-004Tを使った電力計を作りました!

 

まずはSDカード基板の取り付けです。
事前にケースのフタから、LCDやスイッチ基板を外しておきます。

SDカード基板の取り付け穴に合わせて、2mmビスの取り付け穴を開けて取り付けます。

 

 

そうしたら、現物合わせでSDカードが入る穴をフタの前面に開けていきます。

まずは、デザインカッターのホビーのこ歯でケースの縦を切ります。

 

そうしたらプラカッターで横を切ります。 曲尺とかを当てて曲がらないようにしてください。

 

ちょっと不格好ですが切れました! 写真ではSDカード基板が上下逆についてますね。

これは基板の部品面が上になるように、あとで修正しました。

 

BluePillを固定しているユニバーサル基板にボタン電池ホルダを半田付けしたら、VBATとGNDに

接続します。GNDは基板の裏側に配線しています。

 

 

SDメモリ基板へも順に配線しました。

1P 3V

2P GND

3P CLK

4P SO/D0

5P SI/CMD

6P CS/D3

7P D1

8P DAT2

9P DET

 

 
電線をタイラップで束ねて、PZME-004T基板上に絶縁のためキャプトンテープを張りました。
これで、完成です!
 
さっそく試運転をします。
 
【動作の説明】
 
起動時には前回と同じ画面が出ますが、まずSDカードが入っているかと読めるかの確認をします。
SDカードが入ってなくても、いままで通り普通にシリアル経由でログを取れますからね。
 
 
それから、現在のログ設定の内容がでます。
測定間隔とスリープに入るまでの時間、それとスリープ解除する電力変動値x%の設定です。
左のSELキー、右のENTキーを押すことでもスリープ解除ができます。
スリープ以外でSELキーを押すと、SDカードへのログ記録開始と停止をトグルで実行します。
またENTキーを3秒以上押すと、PZME-004Tの積算電力値をリセットします。
 
 
その後、測定画面が出て電力のログを開始します。
右上の4という数字は、いまの設定では5秒毎にログを吐き出しますので、そのタイマーです。

 

SELキーを押すとSDカードへの記録が始まり、画面の右上にRECと表示します。

同時にBluePillのPC13 緑LEDが1秒毎に短くブリンクするようになります。

(通常時は1秒点灯、1秒消灯でゆっくりブリンク (点滅) します)

 

もう一度SELキーを押すとSDカードへのログ記録を停止します。

 

前回Part1で説明したように、SDに記録されるファイル名は LO030201.csv等の月/日が入った

ファイル名になります。(下2桁は01から記録のたびに新しいファイルで順次増えていきます)

 

 

【初期設定】

ENTキーを押して起動(本体にUSBを刺して電源供給)すると設定モードに入ります。

 

変更したいときは左のSELキーでパラメータを選んでENTキーを押します。

 

変更が終わったら、起動画面の表示で設定値を確認できます。

 

SELキーを押して起動(本体にUSBを刺して電源供給)するとRTC設定モードに入ります。

ENTキーを押すと、YYYY(年)、MM(月)、DD (日)、HH(時)、MM(分)、SS(秒)の順に
設定画面がでますので、変更時はSELキーを押して修正後にENTキーを押してください。

     

 

 

  

 

RTCの設定が終わると通常の起動画面に戻ります。

なお、現在のRTCの設定値を知りたい場合は、PCの測定ログ画面で確認することができます。

 

 

このノートPCのスリープ中の消費電力測定結果を、EXCELでグラフにしたデータを下記に張りますね。

薄い緑の線が積算消費電力で、右側の軸が単位(kWh )です。

11時から1時まで2時間程度使用して、1時から7時半までスリープ(0.93W)

2時間程度の動作と合わせても、0.048kWhですから、大したことはないですね。

 

 

【まとめ・最終仕様】

今回のSD対応PZEM-004Tロガーの仕様について、下記に簡単にまとめます。

① 起動時にENTキーを押していたら、パラメータ設定モードに入る

 

② 起動時にSELキーを押していたら、RTC設定モードに入る

 

③ PZEM004T測定データ表示中にSELキーを押すと、SDカードにログデータ記録を開始する
 (画面右上に小さくRECと表示)

 

④  PZEM004T測定データ表示中に再度SELキーを押すと、ログデータ記録を停止する

   ファイル名は、setting.txtにファイル名を入れていればその名前をBaseとして後ろに
  月、日と、01から始まる番号を追加する。ファイル名がなければLO030201.csvになる

   一旦記録を停止して、新たに記録を開始した場合、番号を+1したLO030202.csvを作り

  そのファイルにログを記録する。(8.3形式ファイル命名規則から、ファイル名は8文字とする)

 

⓹ ENTキーを3秒以上長押しすると積算電力の値がが0クリアされる

 

⓺ sleep時間経過後に、焼き付き防止でsleep画面になる機能がある。

  sleep中は画面にランダムにドットが表示されて、動作していることを示す。

  SELキーまたはENTキーを押すとSleepが解除され通常表示モードに戻る

 (キーによる記録開始/停止、積算電力リセットは通常表示中でしか有効にならない)

 

といったところです。
大分使い勝手が改善したのではないでしょうか?
記録前にSDカードが抜かれて書き込めない場合も、記録をスキップするようにしました。
他のエラー、記録中に電源断とか、SDカードを抜くとかはエラー処理が不十分なので注意ください。
今回作成した最終のプログラムはこちらのGoogleドライブに置きますね。
 
今回は measure() のテストモードを外し、実際にPZEM004Tに接続したデータを表示します。
これから、ポットや冷蔵庫、テレビなんかの消費電力を測ってみますね。

それでは、皆さん次回をお楽しみに!

関連記事