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

КонтроллерНедавно я собрал небольшую переносную колонку. В ней применена плата зарядки на микросхеме TP4056 и литиевый аккумулятор от старого телефона. В данном изделии явно не хватало индикатора разряда аккумулятора.

Анализ готовых решений в интернете подсказал, что можно взять готовую платку примерно за $5

Готовый контроллер разряда батареи

Есть недорогие индикаторы уровня сигнала на микросхеме КА2284, которые тоже можно использовать как 5-уровневый вольтметр-индикатор разряда.

Измеритель уровня

Или поставить миниатюрный цифровой вольтметр за эти же деньги

Миниатюрный цифровой вольметр

Но хотелось чего то странного иного — во первых, с минимум индикации для уменьшения потребления.
Во вторых, более информативное. Ну и если обирать самому, то с минимумом деталей.  При нынешней стоимости микроконтроллеров — вполне получается бюджетный вариант собрать на какой-нибудь AVR-ке, имеющей аналоговый вход и встроенный опорный источник напряжения. Идеально подходила ATTiny13 с ее восемью ножками, но, к сожалению, под рукой были только ATMega328 в DIP28-корпусе за $2, на котором обирают «народные» Arduino UNO. От первых экспериментов осталась такая макетная платка, предполагающая использование контроллера без внешнего кварцевого резонатора.

Микроконтроллер от старых экспериментов

 

Отпиливаю все лишнее и собираю простейшую схему с одним SMD светодиодом, выпаянном из RGB ленты.

Схема1

Получается довольно компактная платка, хотя на ATTiny13 в DIP8 или еще лучше SOP8 было бы гораздо миниатюрнее.

Контроллер разряда батареи

На место пайки капаю из клеевого пистолета для защиты проводников от перелома. Вставляю микросхему в Arduino UNO, прошиваю его на использование с внутренним резонатором на 8МГц, как описано в данной статье. Теперь можно писать программу. Логика простейшая — каждые 10 секунд опрашивается напряжение питания при помощи функции vccRead. Выводы на светодиоды работают в режиме ШИМ, поэтому можно формировать различные оттенки индикатора смешением красного и зеленого цветов.

Свежезаряженный аккумулятор выдает 4.0-4.1В — постоянно горящий зеленый индикатор. Напряжение 4.2В присутствует во время зарядки аккумулятора. В это время индикатор мигает зеленым. Напряжение ниже 3.5В — сигнал, что пора заряжать аккумулятор, поэтому мигаем красным цветом. В остальном диапазоне напряжения выводится постоянно горящий индикатор меняющий цвет от зеленого к красному в зависимости от напряжения.

Вставил микросхему на свою плату и прогнал ее во всем диапазоне напряжений. После этого пришлось ввести калибровочный коэффициент примерно 1.2 при измерении напряжения.

Теперь можно поместить плату в колонку

Плата внутри колонки

Теперь можно закрывать и использовать изделие

Колонка с индикатором заряда

Вся схема потребляет порядка 7-8мА, что практически не сказывается на времени работы колонки.

Полный код программы можно взять здесь Скетч контроллера раз...

Тимофей активно принимает участие в проекте

Основной тестер продукта

 

 

 

 

 

Скетч контроллера разряда батареи
2.9 KiB
3248 Downloads
Детали
Вы можете оставить отзыв или трекбек со своего сайта.

6 комментариев на «Индикатор разряда аккумулятора на микроконтроллере»

  1. ALEX:

    а можно все таки делитель на напряжение питания и мерить методом «analogread» с опорным — внутренний ИОН

  2. Дмитрий:

    с ходу не вышло, arduino 1.6.0 выдал ошибки:
    Arduino: 1.6.0 (Windows 7), Плата»Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)»

    power_led.ino: In function ‘void setup()’:
    power_led.ino:40:11: error: ‘PWM_G’ was not declared in this scope
    power_led.ino:41:11: error: ‘PWM_R’ was not declared in this scope
    power_led.ino: In function ‘void loop()’:
    power_led.ino:59:25: error: ‘PWM_G’ was not declared in this scope
    power_led.ino:60:25: error: ‘PWM_R’ was not declared in this scope
    power_led.ino:64:25: error: ‘PWM_G’ was not declared in this scope
    power_led.ino:65:25: error: ‘PWM_R’ was not declared in this scope
    power_led.ino:70:22: error: ‘PWM_G’ was not declared in this scope
    power_led.ino:71:22: error: ‘PWM_R’ was not declared in this scope
    Ошибка компиляции.
    Подскажите, пожалуйста, как исправить?

    • Alexey Alexey:

      Куда то потерялись две строчки из скетча. Нужно добавить

      #define PWM_R 5
      #define PWM_G 6

      Где 5 — это нога, куда подключен красный светодиод, а 6 — зеленый.
      Скетч обновил.

  3. Дмитрий:

    А можно hex для прошивки выложить?

  4. Вадим:

    Могли бы вы дать скетч для Attiny13?!
    И схему,если можно.

  5. Александр:

    Алексей , а какие fuses вы выставляли на МК ?

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.