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

He construido un medidor trifásico de energía que puede medir corriente, voltaje, potencia, factor de potencia y consumo energético de las 3 fases; los datos se suben a HomeAssistant para observar fácilmente el consumo y la potencia en tiempo real de casa.

Utilizo 3 sensores de parámetros eléctricos pzem004t que se comunican por puerto serie con un ESP32-C3 y, a través de Wi-Fi, envían la información a HomeAssistant (debes montar tu propio servidor; yo usé una Raspberry Pi 4). El firmware del ESP32-C3 se desarrolló con ESPHome.

El módulo sólo puede medir el voltaje entre cada fase y neutro; no mide el voltaje de línea (entre fases).

Rango de voltaje: 80-260 V
Rango de corriente: 100 A
Precisión: 0,5 %

Debes configurar tú mismo, con el software de PC, las direcciones de los 3 PZEM-004T como 0x01, 0x02 y 0x03.

¡Trabaja con alta tensión; instala con la corriente cortada y extremando precauciones!

Tutorial de instalación de HomeAssistant + ESPHome: búscalo en Google.

Grupo de técnicos en electrónía/microcontroladores: 2169025065

Fotos del hardware

Vista previa

Esquemático

PCB

Caja 3D

Descarga de archivos

Proyecto abierto en 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 Pan (sin límite de velocidad): https://url.zeruns.com/PbpP8 Código: jjRr

Baidu Pan: https://pan.baidu.com/s/1XCi1AY6M1G0weNuuVJu01w?pwd=qhrc Código: qhrc

Contiene: modelo 3D de la caja, archivos Gerber para fabricar la PCB, proyecto en LCSC-EDA, manual del módulo PZEM-004T, software de PC para el PZEM-004T y archivo de configuración de ESPHome.

Enlaces de compra de componentes

Recomiendo comprar en la tienda oficial de LCSC: https://activity.szlcsc.com/invite/D03E5B9CEAAE70A4.html

Archivo de configuración ESPHome

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

# Define el nombre del proyecto y el nombre amigable
esphome:
  name: powerbox
  friendly_name: PowerBox
  # Especifica la placa y el framework de desarrollo
  platformio_options:
    board_build.flash_mode: dio
    board_build.mcu: esp32c3

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

# Habilita el registro de logs
logger:
  #hardware_uart: USB_SERIAL_JTAG
  #level: DEBUG # por defecto DEBUG, NONE ERROR WARN INFO DEBUG VERBOSE VERY_VERBOSE

# Habilita la API de Home Assistant y establece una clave de cifrado
api:
  encryption:
    key: "wZG666DZ5zsg6666Po6204w666kA+8u666soeGlKtBU=" # Reemplaza por tu clave
    
# Habilita actualizaciones OTA y establece una contraseña
ota:
  password: "c368c9c66658f3433f6226667d4d2232"  # Reemplaza por tu clave

network:
    enable_ipv6: true

wifi:
  ssid: "blog.zeruns.com"  # Nombre de la red WiFi
  password: "123456789"     # Contraseña WiFi
  reboot_timeout: 60s		# Si falla la conexión, reinicia tras 60 s

  # Habilita un punto de acceso como respaldo
  ap:
    ssid: "Powerbox Fallback Hotspot"
    password: "ZMpKTpHJ67EF"
    
# Configuración manual de IP por si no hay DHCP
  manual_ip:                # IP estática
    static_ip: 192.168.0.201
    gateway: 192.168.0.1
    subnet: 255.255.255.0
    dns1: 192.168.0.1

captive_portal:
    
# Activa el servidor web para control vía HTTP
web_server:
  port: 80
  
# Habilita el bus I2C
i2c:
  - id: bus_a
    sda: 4
    scl: 5
    scan: true

# Habilita el puerto UART
uart:
  rx_pin: 1
  tx_pin: 0
  baud_rate: 9600

# Habilita el protocolo Modbus
modbus:

# Configura sensores: temperatura, humedad, corriente, etc.
sensor:
  # Sensor AHT10
  - platform: aht10
    variant: AHT20
    i2c_id: bus_a
    temperature:
      name: "PowerBox-Temperature"  # Nombre del sensor de temperatura
      id: AHT20_T
    humidity:
      name: "PowerBox-Humidity"  # Nombre del sensor de humedad
      id: AHT20_H
    update_interval: 30s  # Actualiza cada 30 s

  - platform: pzemac
    id: pzemac_A
    address: 0x01
    current:
      name: "A-Current"  # Nombre del sensor de corriente
    voltage:
      name: "A-Voltage"  # Nombre del sensor de voltaje
    energy:
      name: "A-Energy"  # Nombre del sensor de energía
    power:
      name: "A-Power"  # Nombre del sensor de potencia
      id: A_POWER
    frequency:
      name: "A-Frequency"  # Nombre del sensor de frecuencia
    power_factor:
      name: "A-PowerFactor"  # Nombre del sensor de factor de potencia
    update_interval: 9s  # Actualiza cada 9 s

  - platform: pzemac
    id: pzemac_B
    address: 0x02
    current:
      name: "B-Current"  # Nombre del sensor de corriente
    voltage:
      name: "B-Voltage"  # Nombre del sensor de voltaje
    energy:
      name: "B-Energy"  # Nombre del sensor de energía
    power:
      name: "B-Power"  # Nombre del sensor de potencia
      id: B_POWER
    frequency:
      name: "B-Frequency"  # Nombre del sensor de frecuencia
    power_factor:
      name: "B-PowerFactor"  # Nombre del sensor de factor de potencia
    update_interval: 10s  # Actualiza cada 10 s
```- platform: pzemac
    id: pzemac_C
    address: 0x03
    current:
      name: "C-Current"  # Nombre del sensor de corriente
    voltage:
      name: "C-Voltage"  # Nombre del sensor de voltaje
    energy:
      name: "C-Energy"  # Nombre del sensor de energía
    power:
      name: "C-Power"  # Nombre del sensor de potencia
      id: C_POWER
    frequency:
      name: "C-Frequency"  # Nombre del sensor de frecuencia
    power_factor:
      name: "C-PowerFactor"  # Nombre del sensor de factor de potencia
    update_interval: 11s  # Intervalo de actualización de 11 segundos

  - platform: wifi_signal # Informa la intensidad de señal WiFi/RSSI en dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # Informa la intensidad de señal WiFi en %
    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  # Restablecer el contador de energía del sensor A a las 0:00:00 del primer día de cada mes
          - pzemac.reset_energy: pzemac_B  # Restablecer el contador de energía del sensor B a las 0:00:00 del primer día de cada mes
          - pzemac.reset_energy: pzemac_C  # Restablecer el contador de energía del sensor C a las 0:00:00 del primer día de cada mes
    on_time_sync:
      then:
        - logger.log: "Reloj del sistema sincronizado"

Otros proyectos de código abierto recomendados

Artículos recomendados