Рубрики
Проекты на ESP8266

Умный мониторинг состояния аккумулятора с использованием NodeMCU ESP8266 и Интернета вещей 

В этом проекте мы создадим умную систему мониторинга аккумулятора на основе технологии Интернета вещей с использованием платы NodeMCU ESP8266, с помощью которой вы сможете отслеживать состояние зарядки/разрядки аккумулятора, а также напряжение и процент заряда аккумулятора.

Как мы знаем, аккумулятор является самым важным компонентом для любого устройства, поскольку он питает всю систему. Поэтому важно следить за уровнем напряжения аккумулятора, так как неправильная или чрезмерная зарядка/разрядка может привести к повреждению аккумулятора или отказу системы. Большинство электрических/электронных устройств имеют отдельную систему, называемую системой управления аккумулятором (BMS). BMS (Battery Management System) контролирует все свойства аккумулятора, такие как напряжение, ток, температура и система автоматического отключения. Это обеспечивает безопасность и правильное обращение с литий-ионными или литий-полимерными аккумуляторами.

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

В этой системе мониторинга аккумуляторов на основе Интернета вещей мы будем использовать Wemos D1 Mini с чипом ESP8266 для отправки данных о состоянии аккумулятора в облако ThingSpeak. Сервис Thingspeak будет отображать напряжение аккумулятора вместе с процентом заряда аккумулятора как в случае зарядки, так и в случае разрядки.

Необходимые компоненты

  1. NodeMCU ESP8266 (купить на AliExpress) или мини-плата Wemos D1.
  2. Модуль зарядного устройства аккумулятора TP4056 (купить на AliExpress).
  3. Резистор 100 кОм.
  4. Кабель Micro-USB.
  5. Литий-ионный аккумулятор 3,7 В.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Литий-ионные аккумуляторы

Литий-ионный аккумулятор или литий-ионная батарея — это тип перезаряжаемой батареи. Литий-ионные батареи обычно используются в портативной электронике и электромобилях.

В этой батарее ионы лития перемещаются от отрицательного электрода через электролит к положительному электроду во время разряда и обратно во время зарядки. Литий-ионные батареи используют интеркалированное литиевое соединение в качестве материала на положительном электроде и обычно графит на отрицательном электроде. Батареи имеют высокую плотность энергии, отсутствие эффекта памяти и низкий саморазряд.

Номинальное, максимальное и предельное напряжение аккумулятора

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

Обычно литий-ионные аккумуляторы имеют номинальное напряжение 3,7 В. При полной зарядке их максимальное напряжение может достигать 4,2±0,5 В. В технических характеристиках производителя обычно указывается напряжение отсечки около 3 В, хотя оно может варьироваться в зависимости от типа аккумулятора и его конкретных применений. Аккумулятор, который я часто использую, имеет напряжение отсечки разряда 2,8 В. Однако существуют также аккумуляторы с напряжением отсечки всего 2,5 В.

Схема проекта

Мы разработаем систему для мониторинга напряжения этой батареи вместе со статусом зарядки и разрядки. Для микроконтроллера мы используем плату Wemos D1 Mini, которая имеет чип ESP8266 с поддержкой Wi-Fi. Вы также можете использовать плату NodeMCU ESP8266. Этот чип WiFi может подключаться к сети WiFi и регулярно загружать данные на сервер.

Схема мониторинга состояния аккумулятора с использованием Wemos D1 Mini (NodeMCU ESP8266) представлена на следующем рисунке.

Вы можете использовать модуль TP4056 для зарядки аккумулятора, поскольку он лучше всего подходит для приложений управления аккумулятором. Вместо TP4056 можно также использовать микросхему MCP73831 .

Чип ESP8266 может поддерживать только входное аналоговое напряжение 3,3 В. Но напряжение батареи увеличивается до 4,2 В. Поэтому нам необходимо использовать цепь делителя напряжения чтобы понизить входное напряжение.

Расчет цепи делителя напряжения

Максимальное напряжение батареи составляет 4,2 В, а напряжение отсечки — 2,8 В. Все, что меньше 3,3 В, будет легко поддерживаться аналоговым выводом ESP8266.

Сначала нам нужно понизить верхний уровень напряжения. Напряжение источника составляет 4,2 В и есть пара резисторов 100 кОм. Это даст выход 2,1 В. Аналогично, минимальное напряжение составляет 2,8 В в качестве напряжения отсечки, которое понижается до 1,4 В с использованием той же сети делителя напряжения. Следовательно, как верхнее, так и нижнее напряжение поддерживаются аналоговым контактом ESP8266 .

Собранная конструкция проекта представлена на следующем рисунке. Это то же самое соединение, что показано на схеме выше. Для тестирования можно использовать литий-ионный аккумулятор любой емкости. Например, я использую аккумулятор емкостью 1950 мАч.

Настройка Thingspeak

Чтобы отслеживать данные батареи на сервере Thingspeak, вам сначала нужно настроить Thingspeak. Чтобы настроить сервер Thingspeak, посетите https://thingspeak.com/. Создайте учетную запись или просто войдите в нее, если вы создали учетную запись ранее. Затем создайте новый канал со следующими данными.

Затем перейдите в раздел API на панели управления и скопируйте API Key. Этот API key понадобится в коде программы.

Исходный код программы

Вот исходный код для системы мониторинга состояния батареи на основе IoT с использованием ESP8266. Замените WiFi SSID, пароль и ключ API в коде.

Теперь скопируйте следующий код и загрузите его на плату NodeMCU или Wemos D1 Mini.

Тестирование работы проекта

Откройте Serial Monitor (окно монитора последовательной связи) после загрузки кода. ESP8266 попытается подключиться к сети WiFi. После подключения к сети WiFi он отобразит аналоговое значение вместе с напряжением и процентом батареи.

Затем перейдите в приватный просмотр панели инструментов Thingspeak. Напряжение батареи и процент заряда батареи будут отображаться на графике. График будет подниматься, когда устройство заряжается, и опускаться, когда оно разряжается.

Фиксация значения напряжения и калибровка

Схема рассчитана на фиксирование пары резисторов 100К. Но большинство резисторов имеют допуск ±5%. Из-за этого значения резисторов могут быть от 95К до 105К. В результате это влияет как на выходное напряжение, так и на выходной аналоговый сигнал.

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

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

В следующей строке кода добавьте этот калибровочный коэффициент.

Это исправит любую ошибку в показаниях напряжения. Вот как мы можем разработать систему мониторинга состояния батареи на основе Интернета вещей с использованием ESP8266 и получить показания на сервере Thingspeak .

Если вам необходимо точное устройство контроля состояния аккумулятора, вы можете использовать микросхему уровнемера MAX17043, которая устраняет все ограничения измерения процента заряда аккумулятора этим методом.

Видео, демонстрирующее работу проекта

Ссылка на видео на YouTube

6 ответов к “Умный мониторинг состояния аккумулятора с использованием NodeMCU ESP8266 и Интернета вещей ”

Спасибо. Буду пробовать снимать со STDBY. У меня еще вопрос, если вместо аккумулятора описанного в статье, сейчас у меня тоже такой, использовать одну банку 18650, нужно что-то менять в схеме делителя?

Нет, менять схему делителя в данном случае не нужно

Сервис https://thingspeak.com/ blynk как и многие другие щас не работают в России, по известным причинам…
Есть какие нибуть аналогичные, рабочие сервисы для ESP8266

Спасибо за подробную статью. Реализовал данную схему, для контроля заряда. Но возник вопрос. Можно ли отследить окончание зарядки? Что я вижу в настоящий момент: До подключения зарядного устройства, показания от esp8266 были 76% заряда. Я подключаю внешний источник. И в течении 2=х минут вижу значения сначала 97%, затем 100%. Явно аккумулятор не мог зарядиться так быстро и это значение напряжения в цепи зарядки. Как бы сигнализировать, что можно отключить внешнее питание?

Напряжение на клеммах аккумулятора во время зарядки искусственно завышено работой модуля TP4056 (или аналогичного зарядного контроллера), что приводит к ложному определению 100% заряда уже через пару минут после подключения.

Вот как можно организовать корректное определение окончания реальной зарядки, а не просто достижения порога напряжения.
1. Почему возникает ложное 100%
В схеме используется делитель напряжения (2×100 кОм) для измерения напряжения на выходе TP4056 (пин OUT+). Во время зарядки:
Модуль TP4056 подает на аккумулятор ток и напряжение до 4.2В.
Из-за внутреннего сопротивления аккумулятора и переходных процессов на его контактах напряжение быстро достигает 4.2В, хотя реальный заряд составляет, скажем, 70–80%.
Ваша формула пересчета напряжения в проценты (процент = (напряжение — 3.0) * 100 / 1.2) мгновенно превращает 4.2В в 100%, хотя аккумулятор еще не насытился.

2. Что отслеживать вместо пикового напряжения
Для литий-ионных аккумуляторов признаком окончания зарядки служит не достижение 4.2В, а падение зарядного тока ниже порога (обычно 0.1С, т.е. 100–150 мА для аккумулятора 1000–1500 мАч).

Вариант А: Аппаратный – использовать выходы статуса TP4056
На модуле TP4056 есть два светодиодных выхода (CHRG и STDBY), которые можно подключить к GPIO ESP8266. Это самый надежный способ.
CHRG (зарядка): имеет низкий уровень (LOW), когда идет зарядка током.
STDBY (готов): имеет низкий уровень, когда зарядка завершена (ток упал ниже порога).
Как реализовать:
Подключите вывод CHRG (часто подписан на модуле, либо возьмите сигнал с катода красного светодиода) через резистор 10 кОм к любому GPIO ESP8266 (например, D1).
Включите внутренний подтягивающий резистор pinMode(CHRG_PIN, INPUT_PULLUP).
Когда зарядка идет – на пине будет LOW. Как только зарядка реально завершится – пин уйдет в HIGH (или станет высокоомным, подтянутым к VCC).
Сигнализация: как только вы зафиксировали HIGH на этом пине в течение 30 секунд (для исключения дребезга) – отправляйте уведомление о завершении зарядки.

Вариант Б: Программный – отслеживание стабилизации напряжения (без датчика тока)
Если нет возможности использовать выходы TP4056, можно модифицировать логику кода, добавив игнорирование первых минут зарядки.

Введите состояние «Зарядка»:
Если вы обнаружили, что напряжение резко подскочило (например, с 3.7В до 4.1В за 2 минуты) — это не окончание зарядки, а вход в режим CV (стабилизации напряжения).
Алгоритм определения реального 100%:
Замеряйте напряжение каждые 30 секунд.
Если abs(напряжение_текущее — напряжение_предыдущее) < 0.01В (очень маленькое изменение) и при этом напряжение > 4.15В и прошло не менее 20–30 минут с момента начала зарядки — можно считать зарядку завершенной.
Корректировка процентов:
Во время зарядки не выводите 100% при достижении 4.2В. Вместо этого ограничьте максимальный отображаемый процент, пока не будет подтверждено завершение процесса.

Примерная логика:
if (напряжение >= 4.18 && зарядка_подтверждена_по_стабильности) {
процент = 100;
сигнализировать_об_окончании();
} else if (напряжение >= 4.18 && !зарядка_подтверждена) {
процент = 95; // или оставить предыдущее значение
// продолжать мониторинг
}

3. Как сигнализировать пользователю
В рамках вашей текущей архитектуры (ESP8266 + Thingspeak) можно реализовать оповещение несколькими способами:
Добавить поле в Thingspeak: отправляйте на отдельный канал флаг charge_complete = 1. Настройте в Thingspeak React (или внешнем сервисе, например, IFTTT) отправку email/push-уведомления при появлении единицы.
Локальный индикатор: подключите к ESP8266 зуммер или реле. При завершении зарядки (по сигналу с CHRG или стабилизации напряжения) реле может отключить зарядное устройство или зуммер подаст звуковой сигнал.
Модифицировать отображение процентов: выводить 100% только тогда, когда модуль TP4056 перешел в режим «Standby» (зарядка завершена). Для этого, как указано в варианте А, нужно задействовать вывод STDBY.

4. Рекомендация по калибровке
Убедитесь, что напряжение измеряется корректно. В статье упоминается калибровочный коэффициент. Сравните показания мультиметра на контактах аккумулятора (не на выходе TP4056) с тем, что видите в мониторе порта. Ошибка в 0.05–0.1В может сдвигать порог срабатывания.

Краткий итог:
Самое надежное решение — использовать пин STDBY модуля TP4056. Если такой возможности нет, введите в код задержку 20–30 минут после достижения 4.2В и проверку стабильности напряжения, прежде чем устанавливать 100% и сигнализировать об окончании зарядки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *