Иногда мне требуется этакий логгер напряжения и мощности. Например, построить график разряда аккумулятора, следить за этим аккумулятором в режиме реального времени или собрать исторические данные потребления какого-либо прибора. И вот беда: готовые ваттметры уже давно изобретены, но они в лучшем случае считают пиковые значения и прошедшую из них энергию. Готовые дешёвые ваттметры с логгированием данных также существуют, но они собирают данные на флешку (а бегать с флешами и строить потом графики в Excel мне не очень удобно) либо передают эти данные в своё закрытое и не очень удобное приложение. Мне же хочется беспроводного решения с красивыми графиками в браузере, и будет хорошо, если я смогу выбирать свой шунт.

Далее в статье я опишу процесс создания такого устройства.

Что получилось

Для сборки ваттметра понадобятся компоненты общей стоимостью в 5 $, а также доступ к 3D-принтеру для печати корпуса.

Все исходники, а также 3D-модели корпуса доступны на GitHub.

Ваттметр в полноценном исполнении имеет обширный список собираемых данных, а также удобное меню с настройками. Просто переключаясь левой кнопкой, можно посмотреть основные данные (напряжение/ток/мощность), энергию в Вт·ч и А·ч, а также время, за которое она считалась, и пиковые значения. Правая кнопка может сбросить значения на экране в ноль.

В настройках можно изменить значения шунта и его максимальный ток, настроить время и количество усреднений измерений шунта, а также напряжения. Пункт Wi-Fi показывает сеть, к которой подключено устройство, его IP-адрес, а также позволяет сбросить настройки Wi-Fi менеджера.

Таким образом, все настройки можно делать прямо на устройстве в реальном времени, без использования компьютера или смартфона.

Процесс калибровки тока максимально прост:

  • Подключаем внешнее питание для ваттметра.

  • На вход шунта подаём питание с лабораторного блока питания.

  • На выход шунта подключаем статичную нагрузку (например, резистор).

  • Настраиваем максимальный ток под ваш шунт.

  • Настраиваем Value шунта до тех пор, пока ток не сойдётся с лабораторным блоком питания.

Lite-версия настраивается в Arduino IDE, после чего прошивка заливается в ваттметр.

После подключения ваттметра к Wi-Fi мы получаем доступ ко всем данным по воздуху. Данные доступны в виде JSON-класса, текста для БД Prometheus, а также в таблице в браузере.

Тут же можно сбросить значения подсчитанной ёмкости, а также обновить ваттметр по воздуху.

Во время создания устройства у меня получилось аж 4 вида корпуса.

  • Lite-версия отличается полным отсутствием интерфейсов ввода и вывода, все настройки и сбор данных производятся в прошивке и через веб API.

  • Regular-версия получила управление при помощи двух клавиш, а также вывод данных на OLED 0,96 дисплей. Это самая полная и рекомендуемая для сборки версия!

  • External-версия идентична Regular, не использует шунт, который находится вне корпуса прибора.

  • Mini-версия выводит данные только на экран, но имеет минимальные габариты корпуса.

Таким образом, получилось целое семейство приборов, которые могут закрывать разные задачи. Например, Lite-версия без кнопок и экрана потребляет меньше всего энергии, что позволяет установить её на аккумулятор без внешнего питания. С External-версией можно использовать шунты огромных размеров и токов. Mini-версия просто компактная и удобная для использования на рабочем столе.

Схема устройства получилась максимально простой. Её сможет повторить даже начинающий радиолюбитель. Изготовления печатных плат не требуется, всё собирается прямо в корпусе навесным монтажом.

Исходный код прошивки доступен на GitHub. Открыть его можно в Arduino IDE, для работы потребуется установить пакеты ESP32 и ESP8266 в Board Manager, а также библиотеки Adafruit_SSD1306, GyverINA, WiFiManager в менеджере библиотек.

Прошивку для версий Regular и External достаточно просто собрать и прошить без каких-либо дополнительных настроек. Для прошивки Mini-версии потребуется раскомментировать 2-ю строчку скетча (//#define MINIMALMODE), дабы отключить управление кнопками и Wi-Fi, настроить значение шунта (ток/сопротивление) можно в 6-й и 7-й строчках кода.

Характеристики устройства сильно зависят от выбранного для сборки железа.
Например, на фото ниже версия External с шунтом 75ШСМ на 200 А, INA226 и импульсным преобразователем для питания ваттметра.

Такая сборка даёт:

  • Диапазон питания: 3–24 В.

  • Ток: от -200 А до +200 А с шагом 6,67 мА.

  • Диапазон напряжения: 0–36 В.

Если использовать шунт с меньшим максимальным током, то можно добиться меньшего шага, отчего более высокую точность измерений (например, с шунтом на 50 А выйдет шаг 1,67 мА). Также можно заменить INA226 на собрата INA228 с ADC на 20 бит и максимальным измеряемым напряжением до 48 В.

На практике даже с шунтом в 200 А в длительных тестах ёмкости разница с тестером (ZKE TECH EBD20A) составила всего 0,3 %, что говорит о неплохой точности INA226 из коробки.

Процесс создания

В качестве контроллера я решил взять ESP8266. В общем-то, выбор даже не стоял, так как это буквально лучший кандидат для такой работы. За 1,2 $ я получил готовый модуль Wemos D1 mini с современным портом Type-C, Wi-Fi 2,4 GHz на борту, а также обилием GPIO, на которых есть шина I2C, при помощи которой можно собирать данные с недорогих и точных ADC.

Для замера напряжения и тока была взята INA226. Это простой ADC на 3 канала, пара из которых измеряет дифференциальное напряжение между контактами шунта, а третий канал измеряет напряжение относительно земли. Таким образом можно организовать четырёхпроводное измерение и даже измерять ток с делителем напряжения для увеличения диапазона VIN.

Огромным плюсом можно назвать стоимость готового модуля в 1 $, но минус в том, что у микросхемы куча подделок.

Если делать устройство классом получше и бюджетом повыше, то я бы заменил её на INA228: в ней 20 бит ADC и до 85 В на линии VBUS, а также цена в 8–10 баксов. Из-за высокой цены спрос на неё мал, а подделок в данный момент нет.

На плате с INA226 уже стоит шунт в виде резистора на 0,1 Ом. С учетом лимитов INA226 такой резистор позволит измерять до 0,8 А тока, что маловато для моих нужд в 10–50 А, поэтому на просторах «Али» был найден и заказан шунт с током до 50 А.

Небольшой лайфхак. Шунты для измерения больших токов достаточно дорогие, но на барахолках часто можно найти советские шунты. Например, 75ШСМ с током на 200 А прямо сейчас стоит всего 250 рублей! Это сильно ниже китайских предложений при тех же 1,5 % точности.

Ваттметры имеют экран для показателей, я решил добавить таковой себе. Для этого в закромах был найден самый простой 0,96 OLED. Он стоит всего 1 $, имеет отличную яркость даже на самой минимальной настройке, при этом он хорошо читаем и очень резкий.

Для питания модуля от измеряемого источника потребуется снизить напряжение до 3,3 В, которые требует ESP8266. Взять можно что угодно, от старого доброго AMS1117-3 на 3,3 В до импульсных преобразователей. Все устройство требует 3,3 В при смешном токе до 80 мА. Для первой версии я взял преобразователь Mini DC-DC 12-20V To 5V 3A. За 40 центов это простой и вполне эффективный модуль для моей задачи. Под высокой нагрузкой его выход имеет сильные пульсации и требует хорошей фильтрации, но при мощности в пол ватта, которые нужны ESP8266, пульсации будут достаточно низкие

Прекрасный обзор этой платы от Lisin YT.

С корпусом всё достаточно просто. Взяв Fusion360, я нашёл чертежи компонентов, а для недостающих сделал свои чертежи по фото.

Корпус имеет логику лабиринта. Свои отсеки получает каждая плата, между отсеками каналы для проводов. Таким образом, можно пренебречь креплением плат.

Regular-корпус потребовал много итераций правок для доведения до идеала. Mini-версия ваттметра вышла идеальной с первой попытки.

Proof of concept прошивки был написан при помощи ChatGPT, после проверки работоспособности идеи код был переписан вручную. Огромное количество времени ушло на отладку логики интерфейса и на вёрстку самого интерфейса.

Подсчет ёмкости и отданной энергии ведётся за счёт внутреннего таймера ESP8266, и стоит сказать, что он неплох. За 10 часов накопилась всего одна секунда ошибки, а за месяц ошибка составит всего одну минуту.

Для сбора данных и вывода в браузере я поднял БД Prometheus на домашнем сервере. Это решение удобно тем, что одно приложение может собирать данные с большого списка устройства и предоставлять их для визуализации в той же Grafana. В настройках Prometheus в качестве таргета я указал IP-адрес своего свежесобранного устройства. Для визуализации данных я выбрал Grafana. Это самое простое и очень мощное приложение, которое подключается к базе данных и позволяет выводить эти самые данные в удобном и настраиваемым виде. Установив «Графану», я подключил её к Prometheus и вывел данные о напряжении, токе, мощности.

Файл дашбоарда Grafana доступен в репозитории проекта.

Заключение

На самом деле ваттметром я пользуюсь уже больше года, и их у меня несколько. Один следит за аккумулятором ИБП и измеряет токи до 200 А, второй используется для тестов потребления электроники в обзорах и статьях, а третий живёт на столе как инструмент для быстрых замеров. Устройство оказалось удобным, беспроблемным и лёгким в повторении, поэтому я решил сделать его общедоступным.

© 2025 ООО «МТ ФИНАНС»

Комментарии (0)