做了个三相电量采集器开源出来,可以方便监测家里用电情况

三相電力計測器を作り、3相の電流・電圧・電力・力率・使用電力量を測定し、データをHomeAssistantにアップロードして、家庭の電力使用量とリアルタイム消費電力を簡単に確認できるようにしました。

測定には3個のpzem004t電力センサーを使用し、シリアル通信でESP32-C3と接続、Wi-Fi経由でHomeAssistantへ送信します(HomeAssistantは各自で構築、私はRaspberry Pi 4で構築)。ESP32-C3のファームウェアはESPHomeで開発しました。

本モジュールは各相とニュートラル間の電圧のみ測定でき、線間電圧(相間電圧)は測定できません。

電圧測定範囲:80-260V、電流レンジ:100A、測定精度:0.5%

3個のPZEM-004Tアドレスを上位機ソフトでそれぞれ0x01・0x02・0x03に設定する必要があります。

高圧回路を扱うため、取り付け時は必ず電源をOFFにして作業してください!

HomeAssistant+ESPHomeの構築・使用方法は各自で検索してください。

電子・マイコン技術交流QQグループ:2169025065

ハードウェア写真

動作画面

回路図

PCB

3Dケース

資料ダウンロード

立創オープンソースリンク:https://oshwhub.com/zeruns/san-xiang-dian-liang-dian-can-shu-shu-ju-cai-ji-san-xiang-dian-ya-dian-liu-gong-lv-gong-lv-yin-shu-yong-dian-liang

123クラウドディスク(速度制限なし):https://url.zeruns.com/PbpP8 抽出コード:jjRr

Baidu NetDisk:https://pan.baidu.com/s/1XCi1AY6M1G0weNuuVJu01w?pwd=qhrc 抽出コード: qhrc

同梱ファイル:ケース3Dモデル、三相電力計測器_Gerber基板ファイル、立創EDAプロジェクト、PZEM-004Tモジュールマニュアル、PZEM-004Tモジュール設定ソフト、ESPHome設定ファイル。

使用部品購入先

立創商城での購入を推奨:https://activity.szlcsc.com/invite/D03E5B9CEAAE70A4.html

ESPHome設定ファイル

#include "esphome.h"
#include "esphome/time/real_time_clock.h"
#include "esphome/sntp/sntp_component.h"
#include "esphome/core/time.h"

# プロジェクト名とフレンドリ名を定義
esphome:
  name: powerbox
  friendly_name: PowerBox
  # 使用するボードとフレームワークを指定
  platformio_options:
    board_build.flash_mode: dio
    board_build.mcu: esp32c3

esp32:
  board: esp32-c3-devkitm-1
  framework:
    #type: esp-idf
    type: arduino

# ロギングを有効化
logger:
  #hardware_uart: USB_SERIAL_JTAG
  #level: DEBUG # defaults to DEBUG, NONE ERROR WARN INFO DEBUG VERBOSE VERY_VERBOSE

# Home Assistant APIを有効化し、暗号化キーを設定
api:
  encryption:
    key: "wZG666DZ5zsg6666Po6204w666kA+8u666soeGlKtBU=" # 各自のキーに置き換えてください
    
# OTAアップデートを有効化し、パスワードを設定
ota:
  password: "c368c9c66658f3433f6226667d4d2232"  # 各自のキーに置き換えてください

network:
    enable_ipv6: true

wifi:
  ssid: "blog.zeruns.com"  # WiFiネットワーク名
  password: "123456789"     # WiFiパスワード
  reboot_timeout: 60s		# 接続失敗時の再起動タイムアウトを60秒に設定

  # APホットスポットモードをWiFi接続のバックアップとして有効化
  ap:
    ssid: "Powerbox Fallback Hotspot"
    password: "ZMpKTpHJ67EF"
    
# DHCPサーバーがない場合のためIPアドレスを手動設定
  manual_ip:                #固定IPを設定
    static_ip: 192.168.0.201
    gateway: 192.168.0.1
    subnet: 255.255.255.0
    dns1: 192.168.0.1

captive_portal:
    
# Webサーバーを有効化し、HTTP経由でデバイスを制御可能に
web_server:
  port: 80
  
# I2C通信インターフェースを有効化
i2c:
  - id: bus_a
    sda: 4
    scl: 5
    scan: true

# UART通信インターフェースを有効化
uart:
  rx_pin: 1
  tx_pin: 0
  baud_rate: 9600

# Modbusプロトコルサポートを有効化
modbus:

# 温度・湿度・電流センサーなどを含むセンサー設定
sensor:
  # AHT10センサー設定
  - platform: aht10
    variant: AHT20
    i2c_id: bus_a
    temperature:
      name: "PowerBox-Temperature"  # 温度センサー名
      id: AHT20_T
    humidity:
      name: "PowerBox-Humidity"  # 湿度センサー名
      id: AHT20_H
    update_interval: 30s  # 更新間隔30秒

  - platform: pzemac
    id: pzemac_A
    address: 0x01
    current:
      name: "A-Current"  # 電流センサー名
    voltage:
      name: "A-Voltage"  # 電圧センサー名
    energy:
      name: "A-Energy"  # エネルギーセンサー名
    power:
      name: "A-Power"  # 電力センサー名
      id: A_POWER
    frequency:
      name: "A-Frequency"  # 周波数センサー名
    power_factor:
      name: "A-PowerFactor"  # 力率センサー名
    update_interval: 9s  # 更新間隔9秒

  - platform: pzemac
    id: pzemac_B
    address: 0x02
    current:
      name: "B-Current"  # 電流センサー名
    voltage:
      name: "B-Voltage"  # 電圧センサー名
    energy:
      name: "B-Energy"  # エネルギーセンサー名
    power:
      name: "B-Power"  # 電力センサー名
      id: B_POWER
    frequency:
      name: "B-Frequency"  # 周波数センサー名
    power_factor:
      name: "B-PowerFactor"  # 力率センサー名
    update_interval: 10s  # 更新間隔10秒

```- platform: pzemac
    id: pzemac_C
    address: 0x03
    current:
      name: "C-Current"  # 電流センサー名
    voltage:
      name: "C-Voltage"  # 電圧センサー名
    energy:
      name: "C-Energy"  # エネルギーセンサー名
    power:
      name: "C-Power"  # 電力センサー名
      id: C_POWER
    frequency:
      name: "C-Frequency"  # 周波数センサー名
    power_factor:
      name: "C-PowerFactor"  # 力率センサー名
    update_interval: 11s  # 更新間隔11秒

  - platform: wifi_signal # WiFi信号強度/RSSIをdBで報告
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # WiFi信号強度を%で報告
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""

status_led:
  pin: GPIO8    

time:
  - platform: sntp
    id: current_time
    timezone: Asia/Shanghai
    servers:
     - ntp.aliyun.com
     - ntp.tencent.com
     - stdtime.gov.hk
    on_time:
      - seconds: 0
        minutes: 0
        hours: 0
        days_of_month: 1
        then:
          - pzemac.reset_energy: pzemac_A  # 毎月1日0時0分0秒にAセンサーのエネルギーカウントをリセット
          - pzemac.reset_energy: pzemac_B  # 毎月1日0時0分0秒にBセンサーのエネルギーカウントをリセット
          - pzemac.reset_energy: pzemac_C  # 毎月1日0時0分0秒にCセンサーのエネルギーカウントをリセット
    on_time_sync:
      then:
        - logger.log: "Synchronized system clock"

その他のオープンソースプロジェクトおすすめ

おすすめ記事