Найти тему
Электроника, ESP32, Arduino

Как сделать индикатор заряда для Li-ion аккумулятора

Показывать остаток заряда предполагается в режиме реального времени, (когда устройство включено), поэтому нужно поискать Arduino подобную платформу с минимальным энергопотреблением, и возможностью работы при пониженном напряжении питания.

В Китае можно накопать реплику платы от Sparkfun Arduino Pro Mini работающую на сниженной частоте 8 МГц вместо привычных 16 МГц.

Arduino Pro Mini 328P 3.3V 8 МГц
Arduino Pro Mini 328P 3.3V 8 МГц
Arduino Pro Mini 328P 3.3V
Arduino Pro Mini 328P 3.3V

Как и оригинальные платы UNO и Nano данная платформа работает на микроконтроллере ATMega328P, однако тактовая частота снижена 2 раза, и на плате нет USB-UART преобразователя, что значительно сокращает энергопотребление. Для прошивки платы USB-UART преобразователь придется докупить отдельно.

USB-UART преобразователь
USB-UART преобразователь

Я на Али нашел преобразователь в виде шнурка с вилкой,

USB-UART преобразователь для прошивки Arduino Pro Mini 328P
USB-UART преобразователь для прошивки Arduino Pro Mini 328P

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

Arduino Pro Mini 328P
Arduino Pro Mini 328P

Прошиваем пустым скетчем - энергопотребление при напряжении питания 3.3V составляет всего 5.2мА.

Энергопотребление платы Arduino Pro Mini 328P
Энергопотребление платы Arduino Pro Mini 328P

Если плату не предполагается питать от источника питания с напряжением выше 5V - можно выпаять светодиод и стабилизатор питания.

Выпаиваем стабилизатор и индикатор питания
Выпаиваем стабилизатор и индикатор питания

Энергопотребление снизиться до 3.4mA

Без светодиода и стабилизатора Arduino Pro Mini 328P потребляет всего 3.4mA
Без светодиода и стабилизатора Arduino Pro Mini 328P потребляет всего 3.4mA

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

Плата сохраняет работоспособность до падения напряжения до 2.8V
Плата сохраняет работоспособность до падения напряжения до 2.8V

Итоговый результат:

  • диапазон напряжений питания U = 2.8V....5.0V
  • потребляемый ток I = 3.0....8.0mA

Данная плата идеальный кандидат для создания индикатора напряжения на Li-ion аккумуляторе. Для измерений будем использовать встроенный в микроконтроллер внутренний источник опорного напряжения 1.1V.

Также потребуется делитель напряжения, который будет превращать максимальное измеряемое напряжение в 1.1V. Общее сопротивление резисторов делителя не должно превышать 10кОм, но мне было лень бежать в магазин - поэтому слепил из того что было под рукой.

Делитель из резисторов номинальным значением 10кОм и 3кОм
Делитель из резисторов номинальным значением 10кОм и 3кОм

У недорогих резисторов достаточно большая погрешность номинального сопротивления поэтому по факту делитель получился....

Примерно какой то такой делитель слепленный из того что было.
Примерно какой то такой делитель слепленный из того что было.

АЦП в ATMega328P 12 битный.

1024/5.25 = 194

Нас интересуют диапазоны напряжений:

  • 3.3В => 3.3 * 194 = 640
  • 3.5В => 3.5 * 195 = 679
  • 3.7В => 3.7 * 195 = 718
  • 3.9В => 3.9 * 195 = 756

Собираем прототип:

Индикатор заряда аккумулятора
Индикатор заряда аккумулятора

Для проверки загружаем незатейливый скетч, а вместо аккумулятора подключаем Arduino к лабораторному блоку питания.

Скетч для проверки правильности показаний
Скетч для проверки правильности показаний

Все результаты видно на фотографиях

Полностью заряжена
Полностью заряжена
Напряжение  <3.9V
Напряжение <3.9V
Напряжение  <3.7V
Напряжение <3.7V
Напряжение  <3.5V
Напряжение <3.5V
Напряжение  <3.3V
Напряжение <3.3V

При снижении напряжения чуть меньше расчетных пограничных значений, светодиоды начинают подмаргивать (шум) - поэтому добавим в программу гистерезис (~0.1V), ну и пусть красный светодиод при снижении напряжения питания значением менее 3.4V мигает один раз в секунду, намекая на то, что аккумулятор нуждается в срочной зарядке.

Все отладочные константы занесем в скетч, предварительные вычисления будем производить в секции Setup. После сборки схемы подаем на Arduino любое вменяемое для работы напряжение, производим при этом измерение падение напряжения на делителе. Эти 2 значения вносим в скетч, все остальное пусть Arduino считает сама, один раз при выполнение секции Setup.

Объявление констант и переменных
Объявление констант и переменных
Рассчитываем значения в зависимости от сопротивления резисторов делителя
Рассчитываем значения в зависимости от сопротивления резисторов делителя
В цикле loop производим включение/выключение светодиодов в зависимости от напряжения на входе
В цикле loop производим включение/выключение светодиодов в зависимости от напряжения на входе

Преимущества сборки индикатор заряда из "конструктора для домохозяек":

  • схема универсальна для любых источников питания напряжением до 5V (18650, 3 элемента 1.5V AA(AAA) или для комплекта из 4-х 1.2V аккумуляторов) достаточно поменять значения переменных измеряемого напряжения- менять элементы схемы не придется!
  • индикацию уровня напряжения можно вывести на RGB светодиод, дисплей, передать по радиоканалу или на другой микроконтроллер!
  • возможности снижение энергопотребления данной схемы завесит только от знания платформы Arduino (сон, pwm, активация по кнопке, зажигать только один светодиод)!
  • легко прикрутить пьзо-пищалку, которая будет выть при снижении напряжения или электронный ключ который будет отключать нагрузку!

Осталось встроить эту плату в готовую конструкцию - например в самодельную блютус колонку:

Встраиваем плату индикатора уровня заряда в самодельную Bluetooth колонку
Встраиваем плату индикатора уровня заряда в самодельную Bluetooth колонку
-23

Теперь мы всегда знаем когда пришло время подзарядить батарею:

Встраиваем индикатор в блютус колонку
Встраиваем индикатор в блютус колонку

Статья про эту колонку доступна по этой ссылке:

Суровая Bluetooth колонка из Российского абонентского громкоговорителя НЕЙВА

В проекте использовались Arduino Pro Mini 3.3V 8 МГЦ

Полный список статей канала доступен по этой ссылке:

Список всех статей канала ESP32 и Arduino

Всем удачи!