Pular para o conteúdo
IDE livre

← Componentes

Medidor de energia PZEM-004T v3.0 (10 A)

Medidor de energia da rede elétrica (corrente alternada): mede tensão, corrente, potência, energia acumulada, frequência e fator de potência, e manda os valores pela UART com o protocolo Modbus-RTU (9600 baud, 8N1). O programa envia um pedido com CRC e confere o CRC da resposta antes de usar os números. Na bancada a carga (potência, fator de potência, tensão da rede) é escolhida no painel da peça. No módulo de verdade o lado da rede tem 127/220 V: só monte com o professor.

Pinagem

PZEM-004T5VRXTXGNDcarga: 100 W5VRXTXGND
PinoLigar emObservação
5VVIN (5 V)o conector TTL é passivo: precisa de 5 V de fora
RXTX da UART (ex.: TX2, GPIO17)o pedido Modbus entra aqui
TXRX da UART (ex.: RX2, GPIO16)a resposta sai daqui
GNDGNDsem os 4 fios ligados ele não comunica
FastMindAssistente de IA local

A IA que lembra da sua vida e mora no seu computador

  • Memória de longo prazo com a fonte de cada resposta
  • Funciona offline: seus dados ficam no seu PC
  • Lê PDFs, slides, fotos e gravações de reunião
Baixar grátis para Windows

Plano Essencial grátis para sempre

Exemplo em MicroPython

from machine import UART
import struct, time

# RX do PZEM no TX2 (GPIO17), TX do PZEM no RX2 (GPIO16), 5V no VIN, GND no GND
# timeout_char maior que os 26 ms da resposta de 25 bytes a 9600 baud
uart = UART(2, 9600, tx=17, rx=16, timeout=200, timeout_char=50)

def crc16(dados):
    crc = 0xFFFF
    for b in dados:
        crc ^= b
        for _ in range(8):
            crc = (crc >> 1) ^ 0xA001 if crc & 1 else crc >> 1
    return crc

def ler_medidas(endereco=0x01):
    pedido = bytes([endereco, 0x04, 0, 0, 0, 10])  # 10 registradores a partir do 0x0000
    c = crc16(pedido)
    uart.write(pedido + bytes([c & 0xFF, c >> 8]))  # CRC: byte baixo primeiro
    r = uart.read(25)
    if r is None or len(r) != 25 or crc16(r[:-2]) != r[-2] | r[-1] << 8:
        return None  # sem resposta ou CRC errado: descarta
    v = struct.unpack('>10H', r[3:23])
    return {'V': v[0] / 10, 'A': (v[1] | v[2] << 16) / 1000, 'W': (v[3] | v[4] << 16) / 10,
            'Wh': v[5] | v[6] << 16, 'Hz': v[7] / 10, 'FP': v[8] / 100}

while True:
    print(ler_medidas())
    time.sleep(2)

Especificações

ItemValorFonte
Comunicação9600 baud, 8 bits, sem paridade, 1 stop; Modbus-RTUManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Conector TTL5V, RX, TX, GND; passivo, precisa de 5 V de fora; os 4 ligadosManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Endereços0x01–0xF7; 0x00 = broadcast (sem resposta); 0xF8 = geral (um aparelho só na linha)Manual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Funções0x04 lê medidas, 0x03 lê parâmetros, 0x06 grava parâmetro, 0x42 zera a energia, 0x41 calibraçãoManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Registradores de medida (0x04)0x0000 tensão (0,1 V); 0x0001–0x0002 corrente (1 mA); 0x0003–0x0004 potência (0,1 W); 0x0005–0x0006 energia (1 Wh); 0x0007 frequência (0,1 Hz); 0x0008 FP (0,01); 0x0009 alarme (0xFFFF)Manual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Parâmetros (0x03/0x06)0x0001 limite do alarme (1 W); 0x0002 endereço (0x0001–0x00F7)Manual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Faixas (modelo de 10 A)80–260 V; 0–10 A (mede a partir de 0,01 A); 0–2,3 kW (a partir de 0,4 W); 45–65 Hz; FP 0,00–1,00; 0–9999,99 kWhManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Errosfunção + 0x80 e o código: 0x01 função, 0x02 endereço, 0x03 dado, 0x04 escravoManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
CRCCRC-16, polinômio 0xA001, byte baixo primeiroMODBUS over Serial Line V1.02 (modbus.org), seções 2.5.1 e 6.2.2; github.com/mandulaj/PZEM-004T-v30 (src/PZEM004Tv30.cpp, setCRC) — Em verificação: as tabelas do manual põem o byte alto primeiro
Ler a resposta25 bytes levam ≈ 26 ms a 9600 baud: use timeout_char acima disso (ex.: 50 ms)MicroPython v1.29.0: ports/esp32/machine_uart.c (mp_machine_uart_read)
Tempo de resposta e atualizaçãonão estão no manual; aqui responde 3,5 caracteres depois do fim do pedido e mede na horaMODBUS over Serial Line V1.02 (modbus.org), seções 2.5.1 e 6.2.2 — Em verificação: medir no módulo
Endereço e limite de fábrica0x01 e 2300 W no simuladorCatálogo de componentes do PyPlaca — Em verificação: o manual não dá os valores de fábrica
Falhas na bancadasem resposta, CRC inválido, resposta de outro endereço: simulam a linha, não o aparelhoCatálogo de componentes do PyPlaca

Valores com "Em verificação" ainda vão ser conferidos nas peças do laboratório.

FastTeacherPara professores

Da ementa ao semestre planejado

  • Plano de ensino e calendário montados sozinhos
  • Diário de aulas pronto para colar no SIGA
  • Slides e listas de exercícios com gabarito
Conhecer o FastTeacher

Versão Community grátis · Windows

FastMindAssistente de IA local

A IA que lembra da sua vida e mora no seu computador

  • Memória de longo prazo com a fonte de cada resposta
  • Funciona offline: seus dados ficam no seu PC
  • Lê PDFs, slides, fotos e gravações de reunião
Baixar grátis para Windows

Plano Essencial grátis para sempre

FastTeacherPara professores

Da ementa ao semestre planejado

  • Plano de ensino e calendário montados sozinhos
  • Diário de aulas pronto para colar no SIGA
  • Slides e listas de exercícios com gabarito
Conhecer o FastTeacher

Versão Community grátis · Windows