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

삼상 전력 계측기를 만들어 3상의 전류·전압·전력·역률·전력량을 측정하고, 데이터를 HomeAssistant에 업로드해 집 전력량과 실시간 소비전력을 확인할 수 있습니다.

측정에는 3개의 PZEM004T 전력 센서를 사용하며, 시리얼 포트로 ESP32-C3와 통신한 뒤 Wi-Fi를 통해 HomeAssistant(직접 구축 필요, 저는 라즈베리파이 4로 구축)에 전송합니다. ESP32-C3 펌웨어는 ESPHome로 개발했습니다.

본 모듈은 상-중성선 간 전압만 측정 가능하며, 상-상 간 선간전압은 측정할 수 없습니다.

전압 측정 범위 80-260 V, 전류 100 A, 정확도 ±0.5 %.

3개 PZEM004T의 주소를 PC 유틸리티로 0x01, 0x02, 0x03으로 각각 변경해야 합니다.

강전 작업이 포함되므로 반드시 차단 후 작업하세요!

HomeAssistant+ESPHome 구축 방법은 검색해 주세요.

전자/MCU 기술 모임:2169025065

하드웨어 사진

동작 화면

회로도

PCB

3D 케이스

자료 다운로드

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클라우드(속도제한 없음):https://url.zeruns.com/PbpP8 압축코드:jjRr

바이두 클라우드:https://pan.baidu.com/s/1XCi1AY6M1G0weNuuVJu01w?pwd=qhrc 압축코드: qhrc

포함 파일: 케이스 3D 모델, 삼상 전력 계측기 Gerber 파일, LCSC EDA 프로젝트, PZEM-004T 매뉴얼, PZEM-004T PC 유틸리티, ESPHome 설정 파일.

사용 부품 구매 링크

LCSC 쇼핑몰 추천: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 # 기본값 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\t\t# 연결 실패 시 60초 후 재시작

  # AP 핫스팟 모드 활성화 (백업)
  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:
    
# 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"

기타 오픈소스 프로젝트 추천

추천 글