Товары из Китая

Простой самодельный индикатор уровня заряда аккумулятора


  • Цена: $2
  • При разработке или модернизации различных портативных DIY устройств частенько возникает потребность в отображении актуального текущего уровня заряда аккумулятора или батареек. Первое, что приходит на ум — купить готовый модуль, типа такого. Это самый простой вариант, но он вынуждает идти на компромиссы: его придется ждать неопределенное время и останавливать разработку на этот срок; он может не подойти по размерам; может сильно врать по показаниям, и исправить это никак не получится. Я хочу показать довольно простой способ изготовления такого индикатора из минимального количества широкодоступных деталей.

    Прошивка, схема и список деталей

    Модуль реализован на простейшем микроконтроллере Attiny13A и 4х индикаторных светодиодах. Схема сильно упрощенная, без какой-либо защиты от помех и неправильной полярности, в моем случае это допустимо, т.к. индикатор устанавливается в маломощное устройство. Если предполагается работа в более жестких условиях, то стоит добавить в цепь питания микроконтроллера диод Шоттки и конденсатор 1-10мкФ, а так же пересчитать в прошивке пороговые значения напряжений с учетом падения напряжения на диоде.

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

    Схема:

    Простой самодельный индикатор уровня заряда аккумулятора

    Для сборки нам понадобятся:

    • Attiny13A
    • Резисторы на 18 кОм и 4.7 кОм — для делителя напряжения. Не обязательно SMD и именно с такими значениями, прошивку можно настроить под другие
    • Резисторы 220 Ом — для подключения к светодиодам
    • Arduino Nano 3.0 — для использования в качестве программатора
    • SOIC клипса — по желанию, без нее можно обойтись, но она сильно ускоряет и облегчает прошивку микроконтроллера в SOIC-8 исполнении
    • Разноцветные 3мм светодиоды

    У тех, кто увлекается DIY и всякими ардуинами, перечисленных выше компонентов скорее всего навалом, так что покупать ничего не придется, разве что Attiny13A.

    Возможности

    Я поставил цель запилить максимально простой, но в то же время достаточно функциональный индикатор. Для отображения уровня заряда в нем используются 4 светодиода, логика работы проста:

    • Горят 4 светодиода — заряд 100% — 75%, напряжение 4.2В — 3.9В
    • 3 светодиода — 75% — 50%, напряжение 3.9В — 3.7В
    • 2 светодиода — 50% — 25%, напряжение 3.7В — 3.5В
    • 1 светодиод — 25% — 0%, напряжение 3.5В — 3.3В

    Первый и последний светодиоды могут мигать, сигнализируя соответственно либо о перезаряде (напряжение > 4.25В), либо слишком низком напряжении (< 3.3В). Диапазон рабочих напряжений модуля лежит в пределах от 2.7В до 5.5В, максимальный потребляемый ток — около 50мА (зависит от значений ограничительных резисторов).

    Настройки и режимы работы

    На гитхабе в разделе firmware лежат уже готовые «отполированные» мною бинарники прошивок (файлы all_leds.hex и single_led.hex), они рассчитаны на применение резисторов номиналами 18 кОм и 4.7 кОм в делителе напряжений. Но бывает так, что именно таких резисторов может не оказаться, либо может попасться кривой микроконтроллер (по даташиту у Attiny13A заявлена точность измерений ADC в районе 10%), тогда потребуется самостоятельно модифицировать и пересобрать прошивку для себя, сделать это можно в программе Atmel Studio.

    Доступные для изменения настройки в прошивке:

    Простой самодельный индикатор уровня заряда аккумулятора

    UHI здесь задает порог напряжения, выше которого начинает работать индикация перезаряда, остальные (U100, U75, U50, U25) — пороги для зажигания соответствующих светодиодов. При напряжении ниже U25 срабатывает индикация низкого напряжения. Общая формула для вычисления этих пороговых значений в зависимости от номиналов резисторов и напряжения аккумулятора имеет вид:

    Простой самодельный индикатор уровня заряда аккумулятора

    Где Ubat — напряжение на входе, R1, R2 — значения сопротивлений резисторов делителя. В случае, если МК подключен через диод Шоттки, в формулу добавляется величина падения на диоде Ud:

    Простой самодельный индикатор уровня заряда аккумулятора

    Но, как я уже говорил, погрешность АЦП у этого типа МК довольно большая, поэтому занесенные мною в прошивку значения слегка отличаются от теоретических. В идеале можно добиться очень высокой точности, но только методом проб и ошибок на конкретном экземпляре микроконтроллера. Для использования индикатора в качестве простого показомера «заряжено» — «разряжено» подойдут и мои значения.

    Помимо пороговых значений изменять можно еще 2 параметра: гистерезис UHYS и режим отображения USE_ALL_LEDS. Первый служит для предотвращения мерцания светодиодов при переходе через пороговые напряжения, чем выше значение — тем меньше вероятность мерцаний. Если никаких неожиданных миганий при работе индикатора вы не наблюдаете — то этот параметр трогать нет необходимости. Второй параметр, USE_ALL_LEDS, задает один из двух способов индикации: в случае наличия строки с этим параметром в индикации будут участвовать все «младшие» светодиоды, если же эту строку закомментировать или вовсе удалить — будет гореть только один светодиод, отвечающий за текущий уровень заряда. Как это выглядит — покажу дальше, а пока предлагаю приступить к сборке модуля.

    DIY, DIY, DIY

    В случае использования МК в исполнении DIP-8 удобнее всего собирать модуль навесным монтажом. В моем случае МК в SOIC-8, поэтому я буду делать плату буквально на коленке и покажу небольшой лайфхак, как можно легко от руки разводить платы для SMD. Первое, что нам для этого нужно — кусок текстолита, размером примерно 20×10мм:

    Простой самодельный индикатор уровня заряда аккумулятора

    Его даже не обязательно покупать, можно вырезать из ненужной платы какого-либо устройства, покрытые медью площадки такого маленького размера встречаются довольно часто. Далее шкурим и обезжириваем поверхность, затем примеряем наш МК:

    Простой самодельный индикатор уровня заряда аккумулятора

    Придерживая пинцетом, с помощью тонкого перманентного маркера наносим на будущую плату риски между контактами контроллера:

    Простой самодельный индикатор уровня заряда аккумулятора

    Так легко и просто мы получаем практически идеальное посадочное место под пайку, и так можно «обрисовать» практически любой SMD компонент:

    Простой самодельный индикатор уровня заряда аккумулятора

    Далее просто от руки дорисовываем места под резисторы делителя и выводы на светодиоды:

    Простой самодельный индикатор уровня заряда аккумулятора

    Осталось протравить нарисованную плату, сделать это легко и просто с помощью валяющихся у каждого дома ингредиентов, записываем рецепт:

    • Пол рюмки перекиси водорода из аптечки
    • Кидаем в нее половину чайной ложки поваренной соли
    • Добавляем чайную ложку лимонной кислоты
    • Перемешиваем до полного растворения компонентов, если плохо растворяется — смесь можно подогреть

    Кидаем плату в раствор:

    Простой самодельный индикатор уровня заряда аккумулятора

    О начавшемся процессе травления возвещают появившиеся на поверхности меди пузырьки. Пока плата травится, я распечатал на принтере будущий корпус для индикатора:

    Простой самодельный индикатор уровня заряда аккумулятора

    Спустя 15-20 минут плата полностью протравилась, а раствор стал бирюзовым:

    Простой самодельный индикатор уровня заряда аккумулятора

    Вытаскиваем плату, смываем маркер, проверяем дорожки:

    Простой самодельный индикатор уровня заряда аккумулятора

    Все протравилось идеально, можно паять компоненты, которых не так много: всего 1 МК и 2 резистора. Паять удобнее всего пастой, фен в нашем случае не нужен, можно обойтись обычным паяльником с тонким жалом:

    Простой самодельный индикатор уровня заряда аккумулятора

    Плата готова, теперь нам нужно подготовить светодиоды. Я использовал обычные дешевые 3мм светодиоды: красный, оранжевый, зеленый и белый. Для удобства пайки я распечатал второй корпус и сделал из него подставку:

    Простой самодельный индикатор уровня заряда аккумулятора

    Минусовые выводы светодиодов подрезаны и запаяны вместе, к плюсовым паяем ограничительные резисторы:

    Простой самодельный индикатор уровня заряда аккумулятора

    Я использовал по 220 Ом, но при использовании одинаковых резисторов для всех светодиодов у них будет сильно отличаться яркость. В моем случае это не критично, но для большей красоты следует подбирать резисторы индивидуально.

    Далее берем нашу плату, размещаем между выводами светодиодов и паяем минусовой контакт диодов к нижней дорожке земли на плате:

    Простой самодельный индикатор уровня заряда аккумулятора

    Свободные концы резисторов паяем к соответствующим пятакам платы:

    Простой самодельный индикатор уровня заряда аккумулятора

    Последний штрих — паяем провода питания. Я забыл развести пятаки для удобства, поэтому пришлось паять так:

    Простой самодельный индикатор уровня заряда аккумулятора

    Вид с обратной стороны:

    Простой самодельный индикатор уровня заряда аккумулятора

    Модуль готов, теперь в него необходимо «вдохнуть жизнь» прошивкой.

    Заливаем прошивку

    Для заливки прошивок в контроллеры я приспособил Arduino Nano. Прямо в Arduino Studio есть специальный скетч, который заливается в Nano и превращает его в AVRISP программатор:

    Простой самодельный индикатор уровня заряда аккумулятора

    В коде скетча перед заливкой в Arduino необходимо предварительно раскомментировать строку #define USE_OLD_STYLE_WIRING:

    Простой самодельный индикатор уровня заряда аккумулятора

    В результате мы получаем удобный ISP программатор, который можно использовать с avrdude. Подключаем ардуину к микроконтроллеру в соответствии со схемой:

    Простой самодельный индикатор уровня заряда аккумулятора

    SOIC клипса в таких делах очень сильно выручает, но при ее отсутствии можно подпаяться напрямую к контроллеру. Конденсатор между RESET и GND можно не использовать, все должно работать и без него.

    После подключения и проверки всех проводов пытаемся запустить прошивку командой, подставив нужное название файла:

    avrdude -p t13 -c avrisp -b 19200 -u -Uflash:w:название_файла_прошивки.hex:a -Ulfuse:w:0x65:m -Uhfuse:w:0xFD:m

    В случае успеха на экране будет что-то типа такого:

    Простой самодельный индикатор уровня заряда аккумулятора

    Если ошибка — то проверяем в первую очередь провода и правильность установки софта/драйверов, правильность выбора COM-порта. По опыту скажу, что сломать Attiny при прошивке очень сложно, они практически не убиваемые. Ни внезапно отвалившаяся в процессе прошивки клипса, ни баги с софтом на компе ему не страшны. Единственное, чем можно запороть этот МК — это неправильными фьюзами.

    Проверяем работоспособность

    После удачной прошивки модуль должен сразу заработать, потому что на него подается питание через программатор. Для большей уверенности необходимо подключить его к регулируемому источнику питания и прогнать диапазон 3В — 5В и проверить, что все светодиоды и режимы индикации работают. За неимением ЛБП выйти из положения можно с помощью наборов различных элементов питания: при работе от одной CR2032 модуль должен мигать красным светодиодом, сигнализируя о слишком низком напряжении; при питании от 3xAA или 2xCR2032 должен напротив мигать белый светодиод, обозначая превышение допустимого для Li-ion напряжения. Если при проверке на ЛБП выясняются расхождения с заявленными пороговыми напряжениями и индикацией, то для повышения точности можно методом проб и ошибок найти более точные значения UHI, U100, U…

    Примеры работы в гифках

    Изменение напряжения от 4.2В до 3.3В и обратно:

    Простой самодельный индикатор уровня заряда аккумулятора

    Индикация превышения допустимого напряжения:

    Простой самодельный индикатор уровня заряда аккумулятора

    Те же примеры с удаленной из прошивки строкой USE_ALL_LEDS:

    Простой самодельный индикатор уровня заряда аккумулятора

    Простой самодельный индикатор уровня заряда аккумулятора

    Индикация низкого напряжения:

    Простой самодельный индикатор уровня заряда аккумулятора

    Продолжаем DIY

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

    Простой самодельный индикатор уровня заряда аккумулятора

    Простой самодельный индикатор уровня заряда аккумулятора

    Для надежности внутренности я залил эпоксидной смолой:

    Простой самодельный индикатор уровня заряда аккумулятора

    Как оказалось, сделал я это зря) Эпоксидка при застывании расширилась и немного повела корпус, для целей фиксации все же лучше использовать герметик или термоклей.

    Переднюю часть для красоты шкурим и тем самым матируем:

    Простой самодельный индикатор уровня заряда аккумулятора

    Итоговый вид:

    Простой самодельный индикатор уровня заряда аккумулятора

    Простой самодельный индикатор уровня заряда аккумулятора

    Разница в яркости немного портит впечатление, но при желании это можно легко решить.

    Выводы

    По функциональности самодельный модуль ни в чем не уступает покупным, и при этом имеет кучу преимуществ:

    • В нем легко добиться высокой точности с помощью подгона параметров
    • Легко адаптировать под любой дизайн и встроить куда угодно
    • Его можно собрать на коленке из имеющихся элементов
    • При необходимости можно модифицировать его на работу с 2S и выше, либо вообще на другие элементы питания

    Единственный недостаток — сделать его все же несколько сложнее, чем просто заказать и ждать)


СМОТРИ ТАКЖЕ

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

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