Хабрахабр

[Из песочницы] Красивые точные часы из старого смартфона

Речь в статье пойдёт о том, как старый ненужный мобильник переделать в отличные настенные часы с крупными цифрами, всегда точным временем и резервным питанием.

Опишу пример схемы на несложных аналоговых компонентах, которая осуществляет автоматическое резервное питание. Я расскажу о некоторых выясненных особенностях сихронизации времени в ОС Андроид, а также о разных электрических хитростях в системе питания смартфона. не являются рекламой, надеюсь это понятно.) И конечно речь будет о программной части андроид – как и с помощью чего можно самому сделать из смартфона красивые часы на любой вкус.
(традиционный disclaimer – любые упомянутые бренды, трейдмарки и т.п.

Вторую жизнь старому смартфону

У меня давно лежал без дела старенький Philips Xenium W732. Полностью работающий, с целым экраном. Я решил дать ему вторую жизнь – превратить в настенные часы. Мои старые домашние часы, ещё советские, с мерцающими маленькими цифрами было очень плохо видно уже с пары метров. К тому же они жутко отставали, их то и дело приходилось подводить, а при любом пропадании электричества в доме вообще обнулялись и требовали нудной процедуры тыкания в кнопки и установки времени заново. Всё это мне давно надоело, и я решил сделать из старого мобильника хорошие «умные» часы, лишённые всех этих недостатков.

Что мне было нужно

  1. Большие чёткие цифры любого желаемого цвета, шрифта и яркости.
  2. Максимальная точность и стабильность хода без какого-либо моего вмешательства извне.
  3. Энергонезависимость, т.е. часы должны продолжать работать при временных перебоях с электричеством.
  4. Полностью автономная работа, в смысле – без использования каких-либо оплачиваемых сетей данных, сим-карт, операторов и т.п.
  5. Максимальное соответствие принципу «сделал, включил и забыл». То есть устройство никогда не должно требовать ни обслуживания, ни ещё какого-то интерактива.

Обеспечиваем Android точным временем

Первым делом нужно было получить в смартфоне постоянно точное мировое время. Понятие «точное» для меня вполне укладывается в 1...2 секунды отклонения от мирового.

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

При этом не потребуется даже сотовая сеть с неизбежными сим-картами и оплатами тарифов. В самом простом случае в андроиде её можно настроить по методу «по сети». Достаточно раздать на смартфон домашний вайфай, а роутер настроить на синхронизацию времени от провайдера интернета или ntp-сервера.

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

Абсолютная точность времени, так как GPS сам на этом основан. Из плюсов – синхронизироваться можно в любой точке планеты, где видно небо. Отсутствие дополнительных лишних радиоканалов и излучений.

В произвольном месте в глубине комнаты скорее всего ничего не поймается, особенно если в устройстве старый и нечувствительный чип. Из недостатков GPS – устройство должно видеть хотя бы немного открытого неба. А так как мои часы располагались именно вдали от окна, мне понадобилась выносная GPS-антенна…

Простейшая внешняя антенна для приёма GPS

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

В простейшем исполнении это просто прямой кусок провода с длиной, равной половине длины волны требуемого сигнала. Решение нашлось случайно – я как-то увидел описание антенны типа «полуволновой диполь». Такая «сложность» конструкции меня вполне устраивала, поэтому я просто взял первый попавшийся коаксиал с произвольным волновым сопротивлением и аккуратно припаял его к смартфону на соответствующие контакты патч-антенны GPS.

Фото контактов GPS-антенны на плате W732


К этим контактам припаивается оплётка и центральная жила коаксиала

Другой конец кабеля я просто освободил от экранной оплётки, чтобы осталась центральная жила длиной 95мм – это половина длины волны на частоте L1 стандартного сигнала GPS (1575,42МГц).

Простейшая GPS-антенна. Полуполновой диполь


Эту антенну нужно расположить как можно ближе к окну.
Я приклеил её к стеклу скотчем.

Телефон унёс подальше от окна, а зачищенный на 95мм конец провода наоборот поднёс к окну, чтобы ему было побольше видно неба.

7 спутников и зафиксился! И что же – филипс вскоре наловил свои честные 5... Антенна работает!

Позже я выяснил, что такое согласование сопротивлений нужно для того, чтобы просто получить максимальную эффективность линии передачи (отсутствие концевых отражений и чрезмерного затухания). А я ещё волновался по поводу якобы необходимого в таких случаях согласования волновых сопротивлений кабеля, антенны и приёмника, которым мне запудрили мозги в интернете на антенных форумах. 3 метра, как у меня, и задача стоит просто доставить хоть какую-то часть сигнала до приёмника, то об этом согласовании можно вообще не задумываться – всё будет работать с любым коаксиалом. А если линия всего 2...

Особенности процесса GPS-синхронизации

Получив работающий GPS, я конечно сразу выставил в настройках андроида метод синхронизации времени «по спутникам GPS» и оставил телефон в таком состоянии на проверку. Каково было моё удивление, когда несколько часов спустя время на телефоне ощутимо «разъехалось» с контрольными часами на компьютере (там windows синхронизирован по ntp). Стал выяснять причину… Оказалось, что андроид, настроенный на синхронизацию времени по GPS, фактически производит эту синхронизацию лишь один единственный раз – в момент фикса координат.
А потом, даже несмотря на то, что смартфон продолжает непрерывно отслеживать спутники, его системное время всё равно определяется только внутренним генератором, то есть никакой синхронизации и не ведётся вовсе! По крайней мере в моём филипсе на андроиде 4.0.3 всё происходит именно так.

Не буду же я то и дело вручную дёргать GPS, чтобы обновить точное время… Для меня это стало неприятным сюрпризом.

Я использую для навигации программу Locus от Asamm software, в которой можно настроить не постоянное поддержание GPS в активном состоянии, а периодические одноразовые фиксы координат через заданные промежутки времени, то есть именно то, что мне и требовалось. Решение было найдено программное. За 15 минут системный таймер любого нормального смартфона не накопит ошибку времени больше 1... Я выставил интервал 15 минут, и проблема благополучно исчезла – время в мобильнике с этих пор всегда чётко совпадает с мировым! При желании можно фикситься по-горячему хоть каждые десять секунд. 2 секунды, что вполне меня устраивает.

Организация питания стационарного смартфона

После того, как точное время было обеспечено, настала очередь сделать грамотное питание для моих часов.

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

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

Штатный аккумулятор филипса


Это его нормальное состояние. Плоский и твёрдый…

Как вы понимаете, мне ещё крупно повезло, что швы корпуса батарейки выдержали и не вскрылись, иначе не миновать бы мне литиевого пожара, дыма, вони и испорченного линолеума.

Телефон на такой сценарий не затачивался. Вывод один – просто так использовать смартфон месяцами и годами на постоянной зарядке нельзя. А потом всё же предполагается разряд. Его основная задача – грамотно зарядить аккумулятор до максимума, не позволив превыситься вольтажу и температуре. И заново подзаправка до 100%. Если же аппарат никогда не отключать от розетки, контроллер обычно начинает поддерживать пилообразный график заряженности – сначала доводка до 100%, потом отключение тока и ожидание разряда где-то процентов до 90. А многие старые телефоны просто могут тупо всегда держать максимальное напряжение на батарее. И это ещё более-менее заботливый подход.

Некоторые смартфоны вообще заливают свои аккумуляторы даже выше 4,2В, чтобы максимально увеличить время автономной работы. Известно, что чем выше напряжение на литий-ионной ячейке, тем быстрее идёт её старение и деградация. Если она к тому же ещё и старая, то тут недалеко до постепенного развития микроскопических внутренних замыканий, теплового разгона и взрыва, как это случилось у меня. А результат один – постоянно находясь под максимальным напряжением, батарея значительно быстрее деградирует.

После казуса со взорвавшимся аккумулятором я задумался – как мне одновременно и иметь резервное питание и не допустить постоянного нахождения батареи под полным напряжением?

Перебрал много разных сценариев, в итоге остановился на следующем.

В обычном режиме телефон будет всегда питаться от розетки, то есть 5В через разъём USB.

Далее аккумулятор просто спокойно разряжается саморазрядом, будучи никуда не подключённым. Резервный аккумулятор с помощью несложной дополнительной схемы автоматически и единовременно заряжается до его нормального максимума 4,2В, после чего полностью отключается от заряда. И так далее, всё на полном автомате. При этом схема постоянно следит за его напряжением и вновь включает единовременный заряд до 4,2 только когда вольтаж ячейки опустится ниже определённого заданного минимума (я принял 3,6B). Реальное время между этими подзарядками составляет годы, в течение которых аккумулятор медленно саморазряжается, но тем не менее остаётся вполне способным в любой момент запитать нагрузку, пусть даже и не от полной своей ёмкости.

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

И уж точно не взорвётся! При таком подходе литиевая ячейка эксплуатируется в более щадящем режиме, чем при постоянном поддержании на ней максимального напряжения.

Хитрости смартфонной электрики

Теперь о том, как всё это реализовать схемотехнически.

Дело тут осложняется тем, что в смартфоне оказалось не так всё просто организовано в системе питания.

Например, без аккумулятора телефон не включится даже при наличии 5В по USB.

Хотя питание-то при этом явно идёт только от USB-разъёма! Если вынуть аккумулятор во время работы от USB – тоже сразу всё гаснет.

Я не хотел быть привязанным к штатной филипсовской батарейке и решил выяснить – что будет, если оставить клемму третьего контакта вообще не подключённой? Ещё поначалу была проблема с третьим контактом аккумулятора. Это означало бы, что я навсегда привязан к родному аккумулятору филипса, потому что городить тут какие-то обманывающие цифровые интерфейсы я точно не намеревался (помню, подобный сюрприз был у меня при работе с аккумуляторами видеокамеры от всемирно известной и уважаемой японской фирмы). Оказалось, смартфон при этом не включится… Я даже начал опасаться, что по среднему контакту идёт какая-нибудь мудрёная цифровая шина, типа i2с, которая передаёт телефону не только разную техническую телеметрию, но и всякие заводские коды в стиле «свой-чужой».

На моё счастье у Philips W732 всё оказалось очень просто! Я посмотрел осциллографом что там происходит на третьем контакте. Вход третьего контакта в смартфоне высокоимпедансный. Туда выведено обычное постоянное напряжение от внутреннего датчика температуры аккумулятора.

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

График зависимости отображаемой температуры батареи от напряжения 3-го контакта

Выяснилось, что если на третьем будет менее 153мВ, начнутся полноэкранные предупреждения о перегреве батареи и через несколько секунд телефон штатно выключится. При напряжении выше 630мВ андроид начинает считать, что его аккумулятор замёрз до минусовой температуры, но будет продолжать работать (и даже молча!). Дальше мне экспериментировать уже не требовалось – я просто понял, что обмануть третий контакт здесь элементарно – просто подать туда любой потенциал между 155 и 600мВ.

В итоге у меня оформилось 2 критерия, без соблюдения которых смартфон вообще не заработает:

1. Обязательное наличие напряжения на плюсовой клемме аккумулятора (несмотря на то, что система питается от разъёма USB)

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

600мВ. 2. Наличие постоянного напряжения на третьем контакте аккумуляторной колодки в диапазоне 155... Здесь уже достаточно простого высокоимедансного потенциала-обманки.

Кстати, до сих пор не понимаю для чего в андроиде выставлено такое высокое значение порога выключения (3,4В), в то время как стандартная литиевая ячейка запросто может безопасно разряжаться до 3 и даже 2,8В! Единственное, что приходит на ум – это наличие в смартфонах внутренних потребителей на 3,3В, которым нужен запас по питанию для их buck-преобразователей. Но можно ведь и SEPIC поставить и использовать аккумулятор более полно! Или в современный век об этом уже никто не думает?

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

Поначалу я решил делать это прямо от батарейного плюса смартфона, ведь я наивно полагал, что у него там честные и неизменные 4,2В. Резервный аккумулятор часов требуется периодически от чего-то заряжать. Оказалось, что никакими постоянными уровнями там и не пахнет!.. С помощью осциллографа я посмотрел что там творится в действительности.

Во-первых, если на батарейный плюсовой вывод ничего не подключено, контроллер заряда всё равно не спит и периодически «щупает» его проверками.

Осциллограмма напряжения на плюсовой клемме аккумулятора


(реконструкция реальной осциллограммы)

Видите – примерно через каждые 45 миллисекунд телефон выдаёт лесенку из последовательных «прощупываний» – не появилось ли на контакте аккумулятора внешнее напряжение? А между этими проверками держится некий постоянный уровень 4,05В.

Но, опять же, не постоянно, а периодами по 10 секунд. Если подключить аккумулятор, система распознаёт его и исправно начинает заливать туда ток. отбирает ток от аккумулятора, причём с приличной силой (точные числовые значения всех этих параметров я не измерял, мне был интересен принцип). Через каждые эти 10 секунд заряда смартфон на 2 секунды включает полноценный реверс тока, т.е. Было хорошо видно, как именно после этого реверса в андроиде обновляются значения всех параметров батареи. Во время этого кратковременного отбора тока смартфон измеряет заряд аккумулятора под нагрузкой, получая таким образом честные цифры процентов и вольтажа.

И автоматически выключать заряд, когда падение на шунте снижалось бы до заданного минимума, свидетельствуя о достижении зарядным током окончательной стадии заряда. Весь этот хитрый механизм заряда мне совершенно не подходил, и даже мешал, потому что я предполагал строить логику зарядных цепей, основываясь на непрерывном аналоговом контроле напряжения на измерительном шунте. Это будет и надёжнее и прозрачнее для последующего понимания. А тут этот реверс совершенно всё портил… Я сначала пытался как-то это обойти или обмануть, но в результате понял, что проще применить внешний источник эталонного зарядного напряжения.

6В USB-зарядника точные и температурно-стабильные 4,2В. Я поставил внешний интегральный стабилизатор (обычный, линейный), с помощью которого получал из плохо стабилизированных 5... А во-вторых, от этой шины работает система заряда резервного аккумулятора. Ими я, во-первых, запитал смартфону плюсовую клемму аккумулятора, чтобы тот всегда думал, что у него 100% заряженная батарейка и никогда ничего по этому поводу не вещал на весь экран.

Оказывается, что если отключить питание по USB и подать на аккумуляторную клемму смартфона постоянное напряжение от стабилизированного источника, которое никогда не будет меняться, андроид всё равно будет упорно рисовать наклонный, спадающий график процента заряда! Попутно наткнулся на любопытное наблюдение. Я специально провёл эксперименты, включая и выключая подсветку экрана, как один из самых прожорливых потребителей тока. Видимо в программу контроля батареи андроида вшито какое-то уравнение расчёта этих процентов, которое учитывает не только фактическое напряжение ячейки, но и ток потребления аппарата. Вот какая статистика набралась за сутки:

Так андроид нарисовал график «разряда аккумулятора»

Видите, когда экран работал и ток от клеммы аккумулятора шёл ощутимый, андроид рисовал хороший наклон, примерно 5% спада за час. Потом я выключил подсветку и смартфон заснул, ток упал до каких-то малых дежурных значений, и график пошёл фактически горизонтально. Снова включил экран – и опять скат. Заметьте, напряжение на плюсовой клемме батареи всегда было строго постоянно. Значит андроид рассчитывал свой процент заряда только исходя из замеряемого тока.

Однако как только заряд доходит до 15% (здесь телефон выдаёт предупреждение о разряженной батарее), график перестаёт снижаться и дальше так и идёт горизонтально на 15%… Вот такая хитрость (или глюк).

Оказалось, что если подать одновременно питание по разъёму USB и стабилизированное внешнее питание на клемму аккумулятора, но меньшее, чем 4,2В, то смартфон сначала будет долго и честно показывать неполный процент заряда, а потом вдруг начнёт ругать, в стиле "У вас что-то с батареей! Была и ещё одна особенность. И конечно же всё это опять в полный экран и поверх моих часов! Заряд идёт слишком долго!".

Поэтому «диапазон спокойствия» тут довольно узкий – всего 0,1В. Ну а если подать больше 4,2В, то уже где-то с 4,3В он начнёт ругаться про опасное превышение вольтажа батареи, это понятно.

И больше он уже, слава богу, ни на что никогда не жалуется! И вот только если ему обеспечить и питание 5В по USB, и полную эмуляцию точных 4,2В по клемме аккумулятора – вот только тогда андроид счастливо замолкает, считая, что он честно зарядил свою батарейку до максимума.

Сразу успокою тех, кто, возможно, подумал, что я сделал очень плохо, нагрузив два несогласованных низкоимпедансных источника напряжения друг на друга (т.е. внешний 4,2В-стабилизатор и плюсовую клемму аккумулятора, которая сама по себе тоже «питает»). Дело в том, что мой внешний стабилизатор представляет собой обычный линейный LDO и по своей схемотехнике не умеет отводить ток. Только подводить. Поэтому никаких электрических конфликтов тут не возникает, как это может случиться, например, при параллельном соединении нескольких разных батареек.

Схема

Когда ТЗ наконец полностью определилось, можно было приступать к разработке конкретной схемы. Несмотря на кажущуюся простоту задачи, повозился я с ней знатно! Пришлось понавыдумывать и потом забраковать больше десятка разных вариантов, от неприлично простых, до громоздких. Вот что получилось в итоге:

Схема управления питанием

Несмотря на кажущуюся избыточность, схема несложная. Благодаря SMD, платка размером 35х22 мм легко умещается внутри отсека вынутого штатного аккумулятора. В качестве резервного аккумулятора я применил обычный литий-ион 18650, смонтированный на подставке часов.

Схема обеспечивает следующие функции:

  1. Основное постоянное питание 5В от розетки через разъём USB.
  2. Автоматический перевод смартфона на резервный аккумулятор при пропадании питания от USB.
  3. Подвод стабильных 4,2В в аккумуляторную клемму смартфона (чтобы андроид всегда был спокоен).
  4. Эмуляцию напряжения для третьего аккумуляторного контакта (при любом режиме питания).
  5. Автоматический старт заряда резервного аккумулятора при понижении его вольтажа ниже заданного уровня.
  6. Заряд резервного аккумулятора по упрощённому, но безопасному закону.
  7. Автоматическое прекращение заряда по достижению заданной величины зарядного тока.
  8. Резервный аккумулятор не держится всегда под максимальным напряжением.

Теперь вкратце, как схема работает.

Он выдаёт мне нужный и идеально ровный вольтаж 4,22В вплоть до 2А нагрузки. Чтобы получить стабильные и температурно-независимые 4,2В, я применил замечательный интегральный LDO ADM7172 от Analog Devices. Его я пускаю в смартфон на плюс батарейного разъёма (VBAT), а также использую для заряда резервного аккумулятора системы.

Цепь эмуляции напряжения для третьего контакта батареи (TEMP) сделана на простом диоде D2, запитанном мизерным фоновым током.

Светодиод LED2 здесь поставлен только с целью сдвига уровня для небольшого ускорения открывания Q4 в процессе просадки шины. P-канальный мосфет Q4 подключает к смартфону резервный аккумулятор сразу, как только на основной питающей шине +5V USB пропадает напряжение. Он инфракрасный и никуда не светит.

Резервный аккумулятор BT1 заряжается через мосфет Q3 и контрольно-ограничивающий резистор R9R10. На остальных деталях сделана схема заряда.

Он тут так включён, что обеспечивает одновременно контроль и степени разряда и степени заряда. Здесь интересна работа ИОУ U2. ОУ здесь работает в режиме компаратора, а положительная ОС для него получается сама собой за счёт процессов в управляемых им цепях.

Когда аккумулятор по той или иной причине разрядится ниже этой точки (+3,63В на схеме), выход ОУ постепенно «отлипнет» от плюса и тем самым откроет зарядный мосфет Q3. Вот как это происходит: когда всё нормально – есть питание +5В USB и резервный аккумулятор заряжен до вольтажа, выше, чем выставлено точкой делителя R4R5R6 – тогда ОУ выдаёт на выходе потенциал 4,2-вольтовой шины (от которой он питается), и зарядный мосфет Q3 закрыт. Здесь можно применить и настоящий компаратор с собственным гистерезисом, но в реальности переключение усилителя происходит надёжно и быстро, никаких дребезжащих дрейфов нет. В аккумулятор потечёт ток, напряжение на ячейке сразу же подрастёт хотя бы на несколько милливольт (за счёт ненулевого внутреннего сопротивления) и это послужит надёжной ПОС для ОУ.

Во-первых, он ограничивает зарядный ток, что здесь совершенно необходимо, иначе даже 2-амперный зарядник банально не справится и просядет. Заряд аккумулятора идёт через резистор R9R10 (он составной с целью увеличения мощности рассеяния). Во-вторых, по падению напряжения на этом резисторе схема определяет момент, когда надо выключить заряд.

В самом начале заряда, когда аккумулятор полностью разряжен, на R9R10 падает около 0,5В, отчего ОУ оказывается надёжно разбалансированным в состоянии режима заряда. Происходит это так: как только включается заряд, то одновременно открывается вспомогательный мосфет Q2, который перестраивает контрольный делитель R4R5R6 для инвертирующего входа ОУ, и таким образом ОУ начинает отслеживать уже то напряжение, которое выделяется на зарядном резисторе. И только когда аккумулятор постепенно полностью зарядится, ток через контрольный резистор ослабеет до определённого значения (примерно 20мА), тогда и потенциалы входов ОУ выравниваются, после чего он тем же внешним механизмом ПОС перебрасывается в противоположное состояние (плюс на выходе), выключая мосфеты Q2 и Q3 и прекращая заряд.

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

График зарядной функции

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

Типовой рекомендуемый профиль заряда для Li-ion

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

При пропадании питания от розетки, Q1 закрывается и отсекает всю неиспользуемую часть схемы от общего провода. Мосфет Q1 применён для того, чтобы при работе только от резервного аккумулятора не тратить напрасно его ток на запитку всей остальной схемы. 5 микроампер, и это автоматически предотвращает глубокий разряд аккумулятора в случае, если вообще забыть об обесточенной системе надолго. Благодаря этому собственное потребление всей конструкции падает до ничтожных 3...

В самом начале заряда аккумулятора зарядный ток достигает 1А, и если весь 1 вольт перепада напряжения от шины +5В USB возложить на крошечную ADM7172 размером 3х3 мм, она будет уж очень горячая, даже несмотря на термопэд, припаянный к плате. Диод Шоттки D1 на входе в стабилизатор U1 выполняет двойную функцию – блокировку обратного тока через U1 (внутри ADM7172 такой блокировки нет) и разгрузку маленькой микросхемки стабилизатора от чрезмерной рассеиваемой мощности. Поэтому часть входного напряжения удачно гасится на блокировочном диоде D1, и в итоге обе эти детали разогреваются более равномерно и не так сильно.

Об использованных компонентах

В качестве входного стабилизатора я применил отличный LDO с действительно низким минимальным проходным падением, хотя в данном месте напряжение на нём никогда не опустится менее 0,4В. Просто ADM7172 мне очень нравится по многим его характеристикам. А так тут можно поставить практически любую микросхему линейного стабилизатора, главное, чтобы она выдавала надёжные вольты, не плавающие от температуры, и хотя бы 1,5А тока.

Особенно это касается разрядного P-канального ключа Q4. От мосфетов мне здесь были нужны минимальные сопротивления канала в открытом состоянии (RdsON). В открытом состоянии у него реальные 1,3мОм, что при рабочем токе смартфона в 200... Туда я поставил великолепный тошибовский образец TPH1R712MD – лучшее, что нашлось по сопротивлению канала в маленьком плоском корпусе. 300мА даёт транзитные потери ценного аккумуляторного напряжения на уровне ничтожных 0,4мВ!

У мосфетов FDMC8010 от Fairchild с этим тоже всё хорошо. Низкое RdsON также желательно иметь для Q1, чтобы поточнее привязываться к потенциалу общего провода. Есть и более низкоомные экземпляры, но в данной конструкции мне были важны ещё и маленькие размеры деталей.

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

Правда, по сравнению с обычными ИОУ он конечно медленный как черепаха (GBW 80кГц и скорость нарастания всего 0,03В/мкс). В качестве компаратора U2 я использовал микромощный ИОУ MCP6V11 от Microchip, который мне приглянулся прекрасной экономичностью – всего 7 микроампер в фоне. Я, кстати, пробовал ставить сюда и настоящий компаратор со встроенным гистерезисом. Но всё равно прекрасно здесь работает. Оказалось, что MCP6541 переключается настолько быстро, что скоростной фронт его импульса легко проникает через межэлектродную ёмкость затвора Q2 в цепь контрольного делителя R4R5R6 и попадает на свой же инвертирующий вход. Нашёл отличный образец MCP6541, который потребляет в фоне всего 600 наноампер (!), а при срабатывании умеет дёргать выход с силой до 30мА… Но, поставив его напрямую вместо MCP6V11 (их распиновка совпадает), я внезапно получил несрабатывание схемы. Получается такая динамическая обратная связь, и компаратор не переключается, а начинает генерировать.
Проблема устранится простым добавлением высокоомного резистора между выходом компаратора и затвором Q2, но у меня уже была готовая плата, на которой даже для одного дополнительного маленького SMD-резистора совершенно не было места, поэтому я просто оставил здесь MCP6V11.

По-хорошему это должно происходить раз в несколько лет… Можно применить абсолютно любой, любого цвета, а можно его вообще не ставить. Светодиод LED1 нужен только для индикации, когда в аккумулятор льётся заряд.

Конденсаторы я применил танталовые, lowESR, в корпусах 7343H, но сгодятся любые, лишь бы влезли вместе с платой в отсек аккумулятора (у филипса W732 он размером 55х60х8 мм). Резисторы и конденсаторы самые обычные SMD, к ним никаких требований, кроме маленького размера.

Так как места в отсеке ещё хватало, я намеренно увеличил площадь платы и пошире разнёс на ней греющиеся детали, чтобы они зря не перегревали друг друга и остальных своих соседей. В процессе заряда аккумулятора вся плата первые пару часов прилично греется, градусов до 60.

Плата управления питанием в отсеке аккумулятора

Делал вручную, фоторезистом. ФР-метод позволяет легко получить «техпроцесс» 0,15мм, но у меня почему-то весь текстолит такого дурного качества, что тонкие дороги норовят отвалиться при лужении… Если кто-нибудь знает где можно с гарантией купить хороший качественный текстолит – пишите в комментах!

Стабильно включается как с питанием от розетки, так и от аккумулятора, работает молча. Итак, смартфон наконец нормально запитан, и работает «как часы» во всех смыслах! Если вынуть из розетки – продолжает спокойно работать от резервного аккумулятора, и вскоре начинает отображать реальное напряжение на нём. При подключённом заряднике всегда показывает 100% заряд. Всё как надо! При восстановлении сетевого питания опять же молча и спокойно показывает 100% заряд.

В принципе, через подобную схему можно запитать любой мобильник, у которого по третьему контакту аккумулятора передаётся простое постоянное напряжение.

Цифровые часы для Android

На этом с железом дело было завершено. Настала пора программной начинки. А именно – нужно было получить на экране смартфона большие цифровые часы.

Вот что мне требовалось:

  1. Максимально крупные цифры! Не люблю щуриться и разглядывать мелкоту издалека.
  2. Возможность поставить любой шрифт любого цвета. От этого тоже зависит удобочитаемость.
  3. Эксклюзивность отображения часов на экране – ничего, кроме цифр времени там быть не должно. Никаких прогнозов погоды, предупреждений, сообщений, строк состояния и прочей ерунды – никогда не должно появляться.
  4. Ясное дело, что экран смартфона никогда больше не должен был гаснуть сам по себе.
  5. Грамотно работающая функция автояркости экрана.
  6. Максимальная надёжность работы (я всё таки живу по этим часам). Зависы, фризы – всё это исключено.

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

Несмотря на целую гору подобных программ, практически ни одна мне не подходила! Потом долго искал в интернете нормальную программу полноэкранных цифровых часов для андроид. Про доставшую уже всех всплывающую рекламу я вообще молчу… Мне от часов нужно было только время! Все разработчики поголовно стараются напихать в свои изделия кучу ненужного – начиная от какого-нибудь весёленького фона (неотключаемого), и заканчивая прогнозами погоды, новостями, календарями и прочим подобным мусором.

Циферки везде маленькие, а отступы от краёв экрана огромные. А ещё всеобщая особенность часовых программ и виджетов – совершенно неэкономное использование площади экрана. У моего филипса и так-то экран не самый большой – всего 4,3".

1. Короче, нашёл практически единственную подходящую программу – Big Digital Clock 1. 1.

Скриншот Big Digital Clock

У неё самые большие цифры. И всё равно им ещё далеко до полного использования площади матрицы. Из достоинств программы – возможность убрать с экрана всё, кроме времени, возможность выбрать любой цвет, 24-часовой формат, немигающее разделительное двоеточие, любая ориентация экрана и автоматическое поддержание негаснущей подсветки. Из недостатков – намертво вшитый шрифт, имитирующий типовой семисегментник.

Сначала всё было хорошо – цифры вроде крупные, видны нормально, а после моих старых часов – вообще небо и земля! Поставил её и начал повседневное использование. Решил проверить – это разовый глюк или «особенность» программы. Но вот, где-то через месяц непрерывной работы я внезапно заметил, что время на них застыло и не меняется! Что за ерунда!?

Показания времени просто перестают обновляться. Перезапустил часы, и уже через пару недель фриз повторился. 10 минут, обновляет показания часов и снова впадает в ступор. Вместо этого программа произвольно отвисает каждые 7... Понятно, что такая «надёжность» меня не устраивала.

Автоматизаторы Android и их «фишки»

Так как это была практически единственная подходящая программа, мне пришлось начать придумывать к ней костыли. Решил, что нужно поставить какой-нибудь автоматизатор андроида, чтобы он периодически перезапускал глючную программу часов ещё до того, как она успела бы зависнуть. Поставил Tasker. Возился, разбирался – но что-то не понравился он мне… Поменял его на Automagic. Кто не в курсе – этот автоматизатор применяет построение сценариев на основе визуальных блок-схем. И вот эта его особенность мне очень даже приглянулась!

Представление сценариев автоматизации в виде блок-схем Automagic

Функцию периодического перезапуска моей глючной программы часов я реализовал практически сразу. А потом ещё поставил Automagic на свой основной рабочий смартфон и на неделю завис в интереснейших экспериментах с ним. В итоге понаделал себе в телефоне множество полезностей для повседневной жизни.

Я набрёл в свойствах Automagic на такую фишку, как Custom Widgets. Но главное оказалось не в этом. Тут я и смекнул, что могу нарисовать себе такие часы, какие только душе угодно! И тут оказалось, что с её помощью можно нарисовать и «оживить» практически любой самодельный виджет, на который только хватит фантазии и функционала программы! Да ещё в справке по программе как раз описывался пример создания виджета часов.

Благодаря ланчеру Nova, я имею возможность растягивать виджеты хоть до самых границ матрицы. Через пару дней всё было готово в самом лучшем виде! И вот что в итоге – по-настоящему огромные цифры, касающиеся самых границ дисплея… Наконец-то доволен!!! Также я скрыл док-бар и статусную строку, освободив экран от всех элементов интерфейса.

Наконец-то цифры занимают ВСЮ ширину экрана!

Применение Automagic позволило удовлетворить все мои требования. Можно поставить любой .ttf или .otf-шрифт. Можно в любой пропорции поджимать и растягивать символы, чтобы идеально вписать их в экран. Наконец, можно иметь только то, что нужно! Я даже разделительное двоеточие в часах не стал рисовать – с простым пробелом всё прекрасно читается. В применении каких-либо внешних программ и костылей сразу отпала всякая необходимость.

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

А почему нет, если всё это можно легко реализовать? Далее вообще пошли заморочки с разными полировками внешнего вида.

Но в период времени с 0:00 до 9:59 цифр на экране только три, они занимают меньшую ширину, чем четыре, и тем самым используют матрицу не полностью. Например, при выборе размера и фактора ширины шрифта нужно исходить из 4-символьного формата времени (ХХ: ХХ). С помощью Automagic дело легко решается парой дополнительных команд. Мелочь, но некрасиво. В данном случае это фактор ширины (сплюснутость) символов шрифта, которую я задал изменять по срабатыванию триггера вышеуказанных интервалов времени. Он имеет функцию, позволяющую менять почти любой параметр custom-виджета на лету. Работает!

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


Фактор ширины шрифта меняется «на лету» при переходе от 9:59 к 10:00
и обратно от 23:59 к 0:00

Ещё у меня сначала были сомнения по поводу момента обновления показаний часов, происходящих каждую минуту. Я опасался, что Automagic будет обновлять виждет не синхронно со сменой минут системных часов смартфона, а произвольно, внося таким образом случайную погрешность в течение минуты. Стал проверять…

Можно в обычное текстовое поле виджета посылать числовые значения внешним action-событием. В Automagic для реализации времени в custom-виджете есть два различных способа. Для каждого такого события как раз есть специальная опция «At fixed time», означающая, что отсылать нужно именно синхронно с моментом изменения системного времени.

А второй способ проще – он не использует внешних скриптов и заключается во вписывании прямо в нужное текстовое поле виджета функции системного вызова типа

Но здесь уже нет такой опции «At fixed time». Виджету просто ставится галочка «Automatically refresh» и задаётся «Refresh interval» ровно в одну минуту. И тут уже мои опасения как раз и заключались в том, что этот интервал самообновления виджета в одну минуту может отсчитываться произвольно относительно временнóй «сетки» смены минут системного времени. Я провёл пару экспериментов, но мне на радость оказалось, что всё в порядке. Виджет самообновляется чётко сразу же, как только сменяется показание минут системных часов!

Независимо от того, в какой момент времени виджет начал работу.

Автояркость экрана

Следующее, что хотелось сделать – хорошую чёткую автояркость экрана. Встроенная автояркость на моём старом филипсе работала ужасно. Дёрганая, неадекватная и с очень узким диапазоном. Здесь я не стал заморачиваться и поставил одну из множества программ автояркости. Сначала попробовал Lux, но мне не понравились какие-то не интуитивные настойки и запутанные профили. Поменял на Velis, и это оказалось то, что надо. Что мне особенно понравилось – Velis даёт возможность рисовать настоящую кривую зависимости яркости от показаний люксометра и в реальном времени показывает на этом графике как смартфон регулирует по нему яркость. Можно настроить любой о-очень плавный закон изменения яркости и конечно же любое её значение, вплоть до 1%, когда экран уже почти не видно. Очень удобно ночью, когда цифры должны еле-еле светиться.

Особенно это заметно в полной темноте – прямоугольник экрана хорошо видно в виде серого фона, что-то типа glow-эффекта. Пока я обкатывал новые часы, заметил, что матрица смартфона даже с абсолютно чёрным фоном экрана всё равно прилично светится пробивающейся сквозь неё подсветкой. Цвет цифр часов я выбрал красный, т.к. Я решил исправить это внешним светофильтром. красный цвет я чётче всего вижу издалека.

Плёнки надёжно прилипли и получилось хорошее прозрачное «стёклышко» густого красного цвета. Первый светофильтр я изготовил вручную – напечатал на струйном принтере на прозрачной плёнке сплошную красную заливку и сложил два ещё сырых отпечатка чернилами друг к другу. На бумаге они печатают прекрасно, но получить с их помощью прозрачную цветную заливку на плёнке невозможно – будет шумный матовый слой, сквозь который ничего не видно. Кстати, сейчас такой лайфхак уже не прокатит, банально потому, что у меня на работе заменили абсолютно все струйные принтеры на модные лазерные МФУ.

Но я тут как-то зашёл в Комус за карандашами, и случайно увидел вот такую штуку:

Фото

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

С красным светофильтром

Заключительные штрихи

В принципе, на этом превращение старого ненужного мобильника в отличные красивые часы можно считать законченным.

Мелочь, но приятно! Правда я ещё до кучи заморочился тем, что в редакторе шрифтов немного поменял .otf-шрифт, чтобы символы были такими, как мне хотелось, вплоть до малейших изгибов. Использовал один из опенсорсных шрифтовых редакторов, Glyphr Studio. Также пришлось сделать шрифт моноширинным, чтобы при смене символов строка не съезжала и не залезала за границы дисплея.

Здесь большой простор для творчества. Ну и в конце концов осталось только закрепить всю конструкцию на полке в углу комнаты. Другой конец привинтил к полке. Я просто согнул Г-образную полоску алюминия и аккуратно прикрутил к ней заднюю крышку смартфона винтиками. И немного сгибать-разгибать алюминий, регулируя угол по вертикали. Можно вращать, устанавливая любой угол обзора. На деле я вообще как установил всё, так больше и не трогаю.

Здесь я обошёлся без изысканного дизайна, там сзади ничего не видно. Резервный аккумулятор приспособил в месте изгиба крепёжной полосы. Также не стал заморачваться с какими-либо клеммными контейнерами для аккумулятора, а просто осторожно припаялся прямо к металлическому корпусу 18650 в тех местах, которые не примыкают к внутреннему содержимому аккумулятора, чтобы не перегреть его паяльником.

А внутри я точечно подпаялся прямо к деталям и дорожкам платы смартфона. Все соединения сделаны обычными проводками, пущенными через насверленные дырочки в задней крышке смартфона.

Всего от конструкции идут два внешних провода: питание 5В от сетевого зарядника и кабель GPS-антенны, идущий к окну и приклеенный там на стекло скотчем.

Часы уже почти год радуют меня большими красивыми цифрами, точным ходом и бесперебойной надёжной работой.

А ещё ради прикола я нарисовал второй виджет часов – для вертикального расположения смартфона.

Горизонтальные и вертикальные часы в одинаковом масштабе

Его я стал изобретать по той причине, что цифры при таком нетрадиционном расположении можно сделать ещё крупнее, то есть полезное использование площади экрана получается максимально возможным. К тому же в этом случае исчезает необходимость изменять фактор ширины символов каждый раз при переходе от формата времени X:XX к XX:XX и обратно, так как всё всегда влезает автоматически.

Ну, это дело на любителя, лично мне нравятся и те и другие. Правда почти все, кому я показывал такие нестандартные вертикальные часы говорили «фууу, горизонтальные лучше!».

Всех, кто читал, благодарю за внимание! На этом всё.

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть