Недавно я собрал небольшую переносную колонку. В ней применена плата зарядки на микросхеме TP4056 и литиевый аккумулятор от старого телефона. В данном изделии явно не хватало индикатора разряда аккумулятора.
Анализ готовых решений в интернете подсказал, что можно взять готовую платку примерно за $5
Есть недорогие индикаторы уровня сигнала на микросхеме КА2284, которые тоже можно использовать как 5-уровневый вольтметр-индикатор разряда.
Или поставить миниатюрный цифровой вольтметр за эти же деньги
Но хотелось чего то странного иного — во первых, с минимум индикации для уменьшения потребления.
Во вторых, более информативное. Ну и если обирать самому, то с минимумом деталей. При нынешней стоимости микроконтроллеров — вполне получается бюджетный вариант собрать на какой-нибудь AVR-ке, имеющей аналоговый вход и встроенный опорный источник напряжения. Идеально подходила ATTiny13 с ее восемью ножками, но, к сожалению, под рукой были только ATMega328 в DIP28-корпусе за $2, на котором обирают «народные» Arduino UNO. От первых экспериментов осталась такая макетная платка, предполагающая использование контроллера без внешнего кварцевого резонатора.
Отпиливаю все лишнее и собираю простейшую схему с одним SMD светодиодом, выпаянном из RGB ленты.
Получается довольно компактная платка, хотя на ATTiny13 в DIP8 или еще лучше SOP8 было бы гораздо миниатюрнее.
На место пайки капаю из клеевого пистолета для защиты проводников от перелома. Вставляю микросхему в Arduino UNO, прошиваю его на использование с внутренним резонатором на 8МГц, как описано в данной статье. Теперь можно писать программу. Логика простейшая — каждые 10 секунд опрашивается напряжение питания при помощи функции vccRead. Выводы на светодиоды работают в режиме ШИМ, поэтому можно формировать различные оттенки индикатора смешением красного и зеленого цветов.
Свежезаряженный аккумулятор выдает 4.0-4.1В — постоянно горящий зеленый индикатор. Напряжение 4.2В присутствует во время зарядки аккумулятора. В это время индикатор мигает зеленым. Напряжение ниже 3.5В — сигнал, что пора заряжать аккумулятор, поэтому мигаем красным цветом. В остальном диапазоне напряжения выводится постоянно горящий индикатор меняющий цвет от зеленого к красному в зависимости от напряжения.
Вставил микросхему на свою плату и прогнал ее во всем диапазоне напряжений. После этого пришлось ввести калибровочный коэффициент примерно 1.2 при измерении напряжения.
Теперь можно поместить плату в колонку
Теперь можно закрывать и использовать изделие
Вся схема потребляет порядка 7-8мА, что практически не сказывается на времени работы колонки.
Полный код программы можно взять здесь Скетч контроллера раз...
Тимофей активно принимает участие в проекте
а можно все таки делитель на напряжение питания и мерить методом «analogread» с опорным — внутренний ИОН
с ходу не вышло, 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
Ошибка компиляции.
Подскажите, пожалуйста, как исправить?
Куда то потерялись две строчки из скетча. Нужно добавить
#define PWM_R 5
#define PWM_G 6
Где 5 — это нога, куда подключен красный светодиод, а 6 — зеленый.
Скетч обновил.
А можно hex для прошивки выложить?
Могли бы вы дать скетч для Attiny13?!
И схему,если можно.
Алексей , а какие fuses вы выставляли на МК ?