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

Làm một bộ thu thập năng lượng điện ba pha, có thể đo dòng điện, điện áp, công suất, hệ số công suất và điện năng tiêu thụ của 3 pha; dữ liệu được tải lên HomeAssistant để tiện theo dõi điện năng tiêu thụ và công suất thời gian thực trong nhà.

Sử dụng 3 cảm biến thông số điện PZEM004T để đo, giao tiếp qua cổng UART với ESP32-C3, sau đó truyền qua Wi-Fi lên HomeAssistant (tự xây dựng, mình dùng Raspberry Pi 4), firmware ESP32-C3 được phát triển bằng ESPHome.

Module này chỉ đo được điện áp giữa mỗi pha và dây trung tính, không đo được điện áp dây (giữa các pha).

Dải đo điện áp 80–260 V, dải đo dòng 100 A, độ chính xác 0,5 %.

Bạn cần dùng phần mềm trên PC để đặt địa chỉ cho 3 PZEM004T lần lượt là 0x01, 0x02, 0x03.

Làm việc với điện áp cao, lắp đặt phải cẩn thận, nhất định phải ngắt điện khi thao tác!

Hướng dẫn cài đặt và sử dụng HomeAssistant + ESPHome tự Google nhé.

Nhóm thảo luận điện tử/vi điều khiển: 2169025065

Ảnh phần cứng

Ảnh hiệu ứng

Sơ đồ nguyên lý

PCB

Vỏ 3D

Tải tài liệu

Link mở nguồn LCSC: 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 Cloud (không giới hạn tốc độ): https://url.zeruns.com/PbpP8 Mã giải nén: jjRr

Baidu Netdisk: https://pan.baidu.com/s/1XCi1AY6M1G0weNuuVJu01w?pwd=qhrc Mã giải nén: qhrc

Các file bao gồm: mô hình 3D vỏ, file Gerber làm mạch “Thu thập năng lượng ba pha”, dự án EasyEDA, datasheet module PZEM-004T, phần mềm PC cho PZEM-004T, file cấu hình ESPHome.

Link mua linh kiện

Khuyên mua trên LCSC: https://activity.szlcsc.com/invite/D03E5B9CEAAE70A4.html

File cấu hình ESPHome

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

# Đặt tên dự án và tên thân thiện
esphome:
  name: powerbox
  friendly_name: PowerBox
  # Chỉ định board và framework
  platformio_options:
    board_build.flash_mode: dio
    board_build.mcu: esp32c3

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

# Bật log
logger:
  #hardware_uart: USB_SERIAL_JTAG
  #level: DEBUG # defaults to DEBUG, NONE ERROR WARN INFO DEBUG VERBOSE VERY_VERBOSE

# Bật Home Assistant API và đặt khóa mã hóa
api:
  encryption:
    key: "wZG666DZ5zsg6666Po6204w666kA+8u666soeGlKtBU=" # Thay bằng khóa của bạn
    
# Bật OTA và đặt mật khẩu
ota:
  password: "c368c9c66658f3433f6226667d4d2232"  # Thay bằng mật khẩu của bạn

network:
    enable_ipv6: true

wifi:
  ssid: "blog.zeruns.com"  # Tên WiFi
  password: "123456789"     # Mật khẩu WiFi
  reboot_timeout: 60s		# Khởi động lại sau 60 s nếu không kết nối được

  # Bật AP dự phòng
  ap:
    ssid: "Powerbox Fallback Hotspot"
    password: "ZMpKTpHJ67EF"
    
# Đặt IP tĩnh nếu không có DHCP
  manual_ip:                
    static_ip: 192.168.0.201
    gateway: 192.168.0.1
    subnet: 255.255.255.0
    dns1: 192.168.0.1

captive_portal:
    
# Bật Web server
web_server:
  port: 80
  
# Bật giao tiếp I2C
i2c:
  - id: bus_a
    sda: 4
    scl: 5
    scan: true

# Bật giao tiếp UART
uart:
  rx_pin: 1
  tx_pin: 0
  baud_rate: 9600

# Bật Modbus
modbus:

# Cấu hình các cảm biến
sensor:
  # Cảm biến AHT10
  - platform: aht10
    variant: AHT20
    i2c_id: bus_a
    temperature:
      name: "PowerBox-Temperature"  # Tên cảm biến nhiệt độ
      id: AHT20_T
    humidity:
      name: "PowerBox-Humidity"  # Tên cảm biến độ ẩm
      id: AHT20_H
    update_interval: 30s  # Cập nhật mỗi 30 s

  - platform: pzemac
    id: pzemac_A
    address: 0x01
    current:
      name: "A-Current"  # Tên cảm biến dòng
    voltage:
      name: "A-Voltage"  # Tên cảm biến áp
    energy:
      name: "A-Energy"  # Tên cảm biến năng lượng
    power:
      name: "A-Power"  # Tên cảm biến công suất
      id: A_POWER
    frequency:
      name: "A-Frequency"  # Tên cảm biến tần số
    power_factor:
      name: "A-PowerFactor"  # Tên cảm biến hệ số công suất
    update_interval: 9s  # Cập nhật mỗi 9 s

  - platform: pzemac
    id: pzemac_B
    address: 0x02
    current:
      name: "B-Current"  # Tên cảm biến dòng
    voltage:
      name: "B-Voltage"  # Tên cảm biến áp
    energy:
      name: "B-Energy"  # Tên cảm biến năng lượng
    power:
      name: "B-Power"  # Tên cảm biến công suất
      id: B_POWER
    frequency:
      name: "B-Frequency"  # Tên cảm biến tần số
    power_factor:
      name: "B-PowerFactor"  # Tên cảm biến hệ số công suất
    update_interval: 10s  # Cập nhật mỗi 10 s

```- platform: pzemac
    id: pzemac_C
    address: 0x03
    current:
      name: "C-Current"  # Tên cảm biến dòng điện
    voltage:
      name: "C-Voltage"  # Tên cảm biến điện áp
    energy:
      name: "C-Energy"  # Tên cảm biến năng lượng
    power:
      name: "C-Power"  # Tên cảm biến công suất
      id: C_POWER
    frequency:
      name: "C-Frequency"  # Tên cảm biến tần số
    power_factor:
      name: "C-PowerFactor"  # Tên cảm biến hệ số công suất
    update_interval: 11s  # Khoảng thời gian cập nhật là 11 giây

  - platform: wifi_signal # Báo cáo cường độ tín hiệu WiFi/RSSI tính bằng dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # Báo cáo cường độ tín hiệu WiFi tính bằng %
    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  # Đặt lại bộ đếm năng lượng của cảm biến A vào 0 giờ 0 phút 0 giây ngày đầu tiên của tháng
          - pzemac.reset_energy: pzemac_B  # Đặt lại bộ đếm năng lượng của cảm biến B vào 0 giờ 0 phút 0 giây ngày đầu tiên của tháng
          - pzemac.reset_energy: pzemac_C  # Đặt lại bộ đếm năng lượng của cảm biến C vào 0 giờ 0 phút 0 giây ngày đầu tiên của tháng
    on_time_sync:
      then:
        - logger.log: "Synchronized system clock"

Các dự án mã nguồn mở khác được đề xuất

Bài viết được đề xuất