Измеритель мощности с WiFi, цветным дисплеем и логгером на базе PZEM-004T

601Не так давно я обозревал модуль Sonoff POW, который позволяет измерять потребление электроэнергии и выдавать данные по WiFi.
Сильно не понравилось отсутствие хоть какого то индикатора, низкий функционал, а так же отсутствие гальванической развязки от сети 220, что может приводить к плачевным результатам.
В конце концов приобрел готовую плату PZEM-004T с целью сборки измерителя мощности самостоятельно.

 

Требования к измерителю мощности:

  • Гальваническая развязка при измерении тока сети 220В
  • Информативный дисплей
  • Беспроводной подключение к компьютеру
  • Возможность сохранения измерения с последующим просмотром или копированием на компьютер.
  • Точность не менее 5%

Выбор мой пал на модуль PZEM-004T в виде отдельной платы.

Характеристики модуля

  • Измерение текущего напряжение сети переменного тока 80-260В
  • Измерение тока 0 — 100А
  • Измерение активной мощности 0 — 22КВт
  • Измерение потребленной электроэнергии
  • Точность измерения 1%
  • Рабочая частота 45-65Гц
  • Последовательный интерфейс UART со скоростью 9600
  • Напряжение питания 5В
  • Возможность подключения LCD или LED дисплеев

Размер платы 31×74мм, диаметр катушки трансформатора тока 33ммhtb1rdmupvxxxxbfxfxxq6xxfxxxw

100

В комплекте идет сам модуль и трансформатор тока

101

Сердце модуля — микросхема SD3004 от китайской компании SDIC Microelectronics Co., Ltd предназначенная для измерения электроэнергии.

102

Кроме того на плате видна микросхема EEPROM Atmel 24C02C на 256 байт с миллионом циклов записи и две оптопары PC817, обеспечивающих гальваническую развязку последовательного интерфейса.

103

Так же на плате есть не распаянный разъем для подключения LED или LCD (судя по описанию микросхемы SD3004)

105

В интернете я нашел описание модуля PZEM-004T в котором есть схема подключения и протокола обмена с компьютером.

htb1vlkrpvxxxxcpxfxxq6xxfxxxr

Протокол обмена по UART довольно примитивный, кроме того можно найти готовые ардуиновские библиотеки, работающие как с аппаратным, так и по программным последовательным интерфейсом.

Для теста модуля использовал Arduino Mega 2560 имеющего три аппаратных последовательных шины.

Цепляю RX и TX к 18 и 19 выводам, соответствующим интерфейсу Serial1, чтобы в Serial0 выводить отладочную информацию.

202

Трансформатор тока надеваю на провод, идущий к розетке

201

Подключаю розетку к сети

203

Загрузил скетч примера к библиотеке

На экране видны показатели напряжения, тока, мощности и потребленной электроэнергии

294

Показания совпадают с моим прибором VC97 до 3-го знака. Модуль без проблем мерит зарядники с телефоном мощностью около 5Вт.

Прибор, кроме самого PZEM-004, будет состоять из
Модуля ESP826612F
Цветного TFT дисплея 240×320 на контроллере ILI9341
Миниатюрного блока питания на 5В
Ну и небольшого количества навесных деталек, корпуса и материалов, которые обычно есть в наличии у уважающего себя радиолюбителя. Общий бюджет вышел в пределах $20 (цены могли немного измениться с момента покупки)
Схема прибора

cxema

Изготавливаем это все в железе

302 309 404

Прошивка

Для работы дисплея выбирал между библиотекой UTFT и Adafruit GFX. Выбрал вторую из за больших возможностей и скорости работы.
Из библиотеки PZEM-004 выкинул поддержку SoftwareSerial, так как из за нее не хотела собираться под ESP8266
Прошивку с правлеными библиотеками выложил на GITHUB

Возможности прошивки:

  • Измерение напряжения 80-260В, тока 0-100А, мощности 0-22кВт и потребленной электроэнергии
  • Выдача мгновенных показателей на экран (обновление 1 сек)
  • Выдача мгновенных показателей в WEB-интерфейс
  • Построение графика мощности (150 значений по 2 сек)
  • Сохранение всех показателей в журнал (файл) во внутренней памяти EEPROM с настраиваемой дискретностью
  • Просмотр, скачивание и удаление журналов
  • Синхронизация времени по NTP и привязка значения в журнале к времени
  • Сохранение в файл внеочередного значения показателей с маркировкой по нажатию кнопки
  • Приостановка и возобновление записи в журнал через WEB-интерфейс или по длительному нажатию кнопки
  • Настройка параметров сети через WEB-интерфейс и сохранение конфигурации в EEPROM ESP8266
  • Обновление прошивки через WEB-интерфейс

Работающий прибор выглядит так

602

600

Веб интерфейс

web-1

Страничка настроек

web-3

Файл с данными

web-2

Время записано в формате UNIX STAMP и без проблем преобразуется в EXCEL
по формуле =CELL/(60*60*24)+«1/1/1970»

%d0%bf%d1%80%d0%be%d1%84%d0%b8%d0%bb%d1%8c

Показание электроэнергии, как и в нормальных электросчетчиках, записывается в энергонезависимую память. Для сброса нужно удержать на 5 сек кнопку на плате, а затем коротко нажать еще один раз.

Подведем итог

Модуль полностью оправдал мои ожидания.
Прибор соответствует поставленным требованиям, и имеет большие возможности по доработке.

Трудности, с которыми столкнулся — малой количество информации, очень поверхностные даташиты. Этим грешат многие китайские приборы.
Например, следующая версия будет без экрана, но с возможностью передачи информации на MQTT сервер.

На этом хочу откланяться

c1

Вы можете оставить отзыв или трекбек со своего сайта.

16 комментариев на «Измеритель мощности с WiFi, цветным дисплеем и логгером на базе PZEM-004T»

  1. Виктор:

    ОЧень толковая статья. Наверное, одна из лучших, что я видел по этой теме.
    Интересно было бы развитие этой темы в сторону построения трехфазного измерителя и, как второе направление, удаленный мониторинг. Хотелось бы отслеживать электропараметры по трем фазам на расстоянии из другого города, например через облачные сервера.

    • Alexey Alexey:

      По первой теме вполне можно подключить к свободным выводам ESP три датчика через SoftSeral интерфейс

      Второе без проблем решается с протоколом HTTP или MQTT, но нужен сервер

  2. Виктор:

    Алексей, а когда появится следующая версия. про которую вы писали?
    И для меня, начинающего, как вы прошивали ESP826612F?

  3. Виктор:

    А в страничке настроек для чего Cjntroller auth и Password?

    • Alexey Alexey:

      В основном от других проектов, чтобы код не переписывать.
      Настраивается только при авторизованном входе

  4. Андрей:

    Добрый день, а пароль какой ? при авторизации

  5. Rosen Vladimirov:

    #include
    #include «PZEM004T.h»

    const int MEASURE_INTERVAL = 300;
    unsigned long lastMeasureSent = 0;
    float u1=0.0,i1=0.0,p1=0.0,e1=0.0;
    float p_max = 0, p_min = 99999999;
    float u_avg=0.0,i_avg=0.0,p_avg=0.0;
    int u_count=0,i_count=0,p_count=0;

    PZEM004T pzem(&Serial);
    IPAddress ip(192,168,1,1);

    HomieNode electrometerNode(«measure», «measure»);

    void readMeasure(){
    // Опрос показаний ЭЭ
    float u2,i2,p2,e2;
    for( int i=0; i= 0 ){u1 = u2; u_avg+=u1; u_count++; break; }
    }
    for( int i=0; i= 0 ){i1 = i2; i_avg+=i1; i_count++; break; }
    }
    for( int i=0; i= 0 ){p1 = p2; p_avg+=p1; p_count++; break; }
    }
    for( int i=0; i= 0 ){e1 = e2; break; }
    }
    }

    void setupHandler() {
    electrometerNode.setProperty(«voltage»).send(«V»);
    electrometerNode.setProperty(«current»).send(«A»);
    electrometerNode.setProperty(«power»).send(«W»);
    electrometerNode.setProperty(«energy»).send(«W/h»);
    }

    void loopHandler() {
    if (millis() — lastMeasureSent >= MEASURE_INTERVAL * 1000UL || lastMeasureSent == 0) {
    electrometerNode.setProperty(«voltage»).send(String(u1));
    electrometerNode.setProperty(«current»).send(String(i1));
    electrometerNode.setProperty(«power»).send(String(p1));
    electrometerNode.setProperty(«energy»).send(String(e1));
    lastMeasureSent = millis();
    }
    }

    void setup() {
    Homie_setFirmware(«PZEM004T-meter», «1.0.0»);
    Homie.setSetupFunction(setupHandler).setLoopFunction(loopHandler);

    electrometerNode.advertise(«voltage»);
    electrometerNode.advertise(«current»);
    electrometerNode.advertise(«power»);
    electrometerNode.advertise(«energy»);

    Homie.setup();
    }

    void loop() {
    Homie.loop();
    }

  6. jeffferson:

    Доброе утро, я хотел бы увидеть этот проект в MQTT

    • Alexey Alexey:

      Будет скоро стационарный с MQTT (а может и без него, но с интеграцией в domoticz)

  7. This is great stuff, i love it.

  8. Default password can be changed ?

  9. i mean «admin» can be changed?

Ваш отзыв