Измеряем потребление батарейки на мобильных устройствах. Эксперимент в Яндексе
В наши дни можно утверждать, что телефон перестал быть устройством только для звонков. Он позволяет нам оплачивать покупки, находить правильную дорогу, вызывать такси. Ситуация, в которой у вас садится батарейка, становится одной из самых стрессовых. Остаться ночью на незнакомой улице без телефона довольно неприятно. При этом расход батарейки растет во многом как следствие расширения возможностей.
Производители как железа, так и софта, стараются решить эту проблему. Для Яндекса она тоже актуальна, потому что наши сервисы — это то, что должно быть под рукой у человека в любой момент. Мы по-разному над этим работаем и в рамках эксперимента создали устройство для измерения тока, который потребляется телефоном с батарейки. Теперь мы умеем мерить мгновенные значения тока с батарейки телефона (Nexus, iPhone и др.) в миллиамперах 500 раз в секунду, сохранять эту метрику на диск и считать по ней среднее потребление.
Под катом я расскажу, как у нас это получилось. Будет много фото железок, но заранее прошу прощения за качество — снимки сделаны в боевых условиях.
С самого начала у нас была какая-то тактика
Несколько месяцев назад, когда мы начинали прикручивать нагрузочное тестирование телефонов к Яндекс.Танку (это наш opensource инструмент для тестирования производительности), мы столкнулись с тем, что одну из самых важных метрик — потребление тока с батарейки — мы не можем замерить достоверно, а на некоторых телефонах не можем замерить вообще. Например, вот как выглядит график потребления тока на iPhone, полученный стандартными средствами от Apple:
Все три запуска теста значение потребления вообще не изменялось и было равно 1/20. Удивляет использованная единица измерения — 1/20 означает, что если телефон дальше будет работать с тем же энергопотреблением, то сядет он за 20 часов. То есть, метрика получается очень неточная и не очень интерпретируемая. Кроме того, цифры в сыром виде получить нельзя, только разве что скриншот сделать и приложить его к тикету.
С Android девайсами ситуация выглядит лучше, но все равно далека от идеала. Ток замерять можно, читая из /proc/…
циферку, но лучше не делать это слишком часто — опросом значения можно просадить производительность телефона и испортить тесты. На разных девайсах циферка находится в разных местах файловой системы. На части Android телефонов вообще отсутствует железка, измеряющая ток, поэтому на них не получится программными средствами снимать потребление. На Nexus, которые мы взяли как reference, значение в /proc
меняется раз в 20 секунд.
В общем, мы решили попробовать измерять потребление хардверно и таким образом убить всех зайцев разом: так можно мерить вообще на всех девайсах, включая ноутбуки и холодильники. Мы знали о существовании Power Monitor, но цена устройства (примерно $800 за штуку, а на каждый телефон потребуется свой девайс), и его несовместимость с Linux (а значит, и сложности с автоматизацией), заставили задуматься о своем велосипеде. Аналогичная ситуация наблюдается с осциллографами и другими измерительными устройствами общего назначения на рынке — покупать дорого, автоматизировать сложно.
Существует еще проект BattOr, по описанию это примерно то, что мы хотим. Сам я не пробовал связаться с авторами, но коллеги говорят, что команду купил Google и с тех пор от них ничего не слышно и на почту они не отвечают. Совпадение? =)
Для начала, в качестве proof-of-concept, мы собрали схему с шунтом, аналогичную представленной в этой статье. Ток мы измеряли в разрыве провода USB. Поскольку значение силы тока ожидалось небольшое, до 500 мА, пришлось усиливать напряжение с помощью инструментального усилителя, а не снимать его напрямую с шунта ардуинкой.
После еще некоторых танцев с бубном нам удалось получить на экране ноутбука график потребления телефоном тока с USB. Тут мы поняли, что таких измерений нам не хватает — мы мерим не ток с батарейки, а ток с USB, телефон запасает энергию в батарейке, и мы не можем сопоставить график потребления тока с тем, что происходит на телефоне. Решили, что нужно вытаскивать батарейку из телефона и использовать вместо нее внешнее питание, а USB во время тестов вообще не втыкать.
Электроника работает на белом дыме
Как известно, все, чему нас учили на уроках физики и электротехники, — ложь, никаких электронов не существует, а устройства работают на белом дыме. И если этот белый дым выходит, то устройство работать перестает. В очередном эксперименте белый дым вышел из Arduino и мы ее потеряли. Оказалось, что между “0” на входе нашего блока питания и “-“ на его выходе — 88 вольт переменного напряжения. После еще нескольких экспериментов с разными БП мы поняли, что не все они одинаково хороши, но есть такие, которые нам подходят. И мы стали использовать эти подходящие. Также мы решили больше не использовать схему с шунтом и инструментальным усилителем и вместо этого взять готовый модуль измерения тока к Arduino на базе MAX471, которая по сути то же самое, только в виде микросхемы. Еще мы рассматривали вариант на базе датчика Холла (ACS712), но, изучив документацию на этот чип, увидели, что он сильно шумит и решили даже не пробовать.
Для того, чтобы питать современный телефон не от встроенной батареи, а от внешнего источника, мало его разобрать и вытащить батарею — уж слишком умны современные батареи. Поэтому мы вытаскиваем из батареи контроллер и подключаемся уже к нему.
Чтобы вернуть модифицированный таким образом iPhone (или другое устройство) в собранное состояние, мы сверлим корпус и выводим два проводка.
Вот такая коробочка у нас получилась в результате. Правда, в метро ее лучше не возить, телефон, провода, вот это все… могут не понять =)
Что нам это дает
Мы уже начали внедрять тестирование наших приложений на энергопотребление, так что ждите улучшений в этой области. Процитирую коллег, которые пользуются нашей коробочкой.
Для получения релевантного результата теста при прямых замерах батарейки этим устройством достаточно пяти минут. Если же замерять «как раньше», то есть смотреть на скорость уменьшения % заряда батареи — то требуется 6-8 часов, плюс не забывайте про человеческий фактор. То есть, время теста сократили с 8 часов до 5 минут: почти в 100 раз.
Текущий разброс результатов замера ± 15%. Это не идеал и надо погрешность уменьшать. Однако, теперь доверие к результату повысилось за счёт исключения человеческого фактора и существенно меньшего времени на 1 замер. Достаточно выполнить за полдня много-много замеров и отсечь результаты, пострадавшие от внезапных всплесков непонятной активности на телефоне.
Стало возможным кросс-платформенное, и кросс-девайсное сравнение значений. Единица измерения — mA, а не «скорость уменьшения процентов заряда», которая зависит от платформы, объёма батареи, «свежести» батареи, не говоря уже про запущенные процессы… Сравнить только mA при одном и том же запущенном Я.Сервисе на Andoird и на iOS — нельзя. Надо добавить поправочный коэффициент — сколько жрёт каждая платформа, без Я.Сервиса. Но, это опять-таки вопрос на пол дня замеров (и это с кофе-поболтать).
Пара слов про софт
Чтобы собирать данные от Arduino (а она просто 500 раз в секунду шлет их по USB), мы написали простенькую читалку. На Python возникли проблемы с повторным открытием устройства на чтение — во второй раз данные уже не читались. Мы не стали разбираться и просто переписали то же самое на Golang — после этого все заработало.
Тут нас ждали еще небольшие грабли: в буфере устройства с предыдущего запуска остаются старые данные. Поэтому сейчас мы просто отбрасываем первые 500 измерений (1 секунда). Затем собранные в .csv данные обрабатываем скриптом на Python (в котором используются Pandas и Seaborn) и получаем графики, которые вы видели в начале статьи.
Если вам интересны исходники читалки, прошивка и код для обработки данных — могу поделиться, пишите в личку.
Хорошо быть уверенным, что твой телефон будет работать в то время, когда он нужен. Ведь внезапное окончание заряда аккумулятора может привести к отсутствию связи именно тогда, когда должен произойти важный звонок. Чтобы свести вероятность данной проблемы к минимуму неплохо бы знать какое количество электрической энергии потребляет телефон в том или ином режиме своей работы. Допустим вы зарядили телефон на 100% и планируете обходится без подзарядки продолжительное время. Но при этом есть нужда в использовании различных приложений, которые установлены на телефоне. Дело в том, что при работе разных приложение потребление тока также разное. Давайте с вами разберемся, как можно измерить количество потребляемой энергии телефоном, чтобы для себя знать, какими функциями можно больше пользоваться, а какие лучше запускать только при необходимости. Чтобы продлить время работы телефона, когда он используется в отсутствии доступа к подзарядке.
Итак, нам понадобится обычный амперметр постоянного тока. Простой электронный мультиметр для этих целей как раз подойдет. Если у вас его еще нет, то желательно приобрести хотя бы самую дешевую его модель. Так как в личном инструменте домашнего мастера он должен быть у каждого. Берем мультиметр, выставляем на нем режим измерения постоянного тока на пределе до 10 ампер. Но перед этим нужно подготовить для измерения сам телефон. Для этого снимаем заднюю крышку телефона, чтобы добраться до аккумулятора. Выключаем телефон и вынимает аккумулятор.
Как известно, чтобы измерить ток, нужно щупы мультиметра подключить в разрыв цепи, а именно. Эти щупы мультиметра должны быть между плюсовым выводом аккумулятора и плюсовым контактом самого телефона. Хотя можно измерительные щупы подключить и между минусами тех же контактов. То есть, если мы будем использовать плюсовые контакты, то минус аккумулятора и минус питания телефона должны быть соединены. Ну, а если используются минусовые контакты, то соединены должны быть плюсовые контакты.
Теперь как можно сделать выводы, к которым и будем подсоединять свой амперметр, своими руками (это нужно для удобства измерения). Берем два куска изолированного многожильного провода, небольшого сечения. Подойдут любые провода диаметром где-то 0,3-0,5 мм. Слишком толстые будет не совсем удобно использовать, а слишком тонкие будет являться дополнительным сопротивлением для прохождения тока. Длина проводов где-то 20 см. Хотя она особо роли не играет. Лишь бы не были слишком длинные или слишком короткие. Ведь это просто не совсем удобно. С концов этих проводов снимаем изоляцию на расстоянии где-то 3 мм.
Еще нам понадобится кусочек обычного скотча, который будет служить изолятором между ранее заготовленными проводами, а точнее между их оголенными частями. Смысл заключается в том, чтобы аккуратно соединить концы этих проводов, ровно зафиксировав между ними этот кусочек скотча. Размеры куска скотча должны быть такими, чтобы полностью покрывать один контактный вывод на аккумуляторе (плюса или минуса). После этого эту проволочную конструкцию нужно также аккуратно зажать между аккумулятором и контактами питания самого телефона. В итоге мы получим как бы разрыв одного из полюсов питания телефона. Если соединить эти провода другими концами, то телефон включится, нажав предварительно кнопку включения.
Итак, теперь можно приступать к самому измерению тока потребления. Мы измерительные щупы мультиметра подсоединяем к нашим проводам, идущим от телефона. Включаем мультиметр и телефон, после чего пристально смотрим на экран амперметра. Уже при запуске амперметр покажет определенные значения тока. Дожидаемся пока телефон полностью загрузит свою операционную систему и войдет в нормальный режим своей работы. Ну, а теперь уже можно и тестировать величину потребления тока в различных режимах работы устройства связи и развлечения.
Начинаем по очереди запускать различные приложения на телефоне, и при этом наблюдаем за изменением потребляемого тока.
Лично у меня получилось так:
» больше всего тока потребляется при записи видео с камеры, около 700 мА;
» при работе самого экрана на средней яркости ток около 200 мА;
» в режиме ожидания с погасшим экраном ток практически не потребляется;
» при воспроизведении видео на плеере ток где-то около 250 мА;
» при прослушивании музыки с погасшим экраном ток около 30 мА;
» просмотр фотографий приравнивается к рабочему экрану – 200 мА;
» в режиме телефонного разговора ток потребления около 300 мА.
Теперь как можно исходя их увиденных величин тока понять, на сколько именно хватит заряда аккумулятора смартфона. Тут все просто. Нужно имеющуюся емкость остаточного заряда аккумулятора разделить на имеющиеся значения тока. Допустим мы полностью зарядили свой смартфон. Реальная емкость аккумулятора в этом телефоне равна 3000 ампер. Значит нужно 3000 разделить, к примеру на 300 мА (средне потребляемый ток при разговоре по телефону). В итоге мы получим 10 часов беспрерывных разговоров на полном заряде аккумулятора. Если же наш аккумулятор разрядился на половину и имеет заряд на 50%, то значит его емкость уже равна где-то 1500 мА. Значит при половинном заряде мы будет разговаривать без перерыва около 5 часов (1500 делим на 300). Вряд ли вы будете без перерыва столько говорить, хотя у некоторых так и бывает.
В результате наших действий мы имеем. Допустим батарея разрядилась уже до 20%. При этом мы сразу же в голове подсчитываем, что примерная остаточная емкость заряда аккумулятора равна где-то 600 мА. И зная какие функции телефона сколько потребляют тока мы начинаем экономить. То есть, можно слушать музыку без включенного экрана, либо разговаривать непродолжительное время. Примерно прикидывая остаточное время. В итоге мы можем обезопасить себя от нежданного полного разряда своего телефона и его внезапного отключения.
P.S. Как по мне, так знать сколько именно потребляет телефон электроэнергии просто необходимо. Ведь в этом случае вы защитите самого себя от проблемы неожиданного отключения своего устройства связи в самый неподходящий момент. Причем, что процедура измерения силы тока на телефоне достаточно проста, и ее может сделать даже школьник.
Что нужно знать о характеристике тока при зарядке современных смартфонов?
Многие пользователи телефонов интересуются, какой ток необходим для зарядки аккумулятора. Есть определенные нормы, принятые производителями электроники. Они оказывают влияние на продолжительность зарядки, срок службы элемента питания и даже работоспособность устройства. Мы рассмотрим случаи, когда происходит уменьшение и превышение силы тока.
Уменьшение силы тока
При зарядке смартфона от компьютера можно заметить, что для полного пополнения аккумулятора энергией требуется слишком много времени. Обычно телефон заряжается через три-пять часов. Причина — низкий ток на выходе разъема USB 2.0, не превышающий 0,5 A (ампер). Новая разновидность портов USB 3.0 выгодно отличается от предшественника увеличенным током, достигающим показателя 0,6-0,9 A. Таким образом, от такого порта мобильное устройство заряжается немного быстрее.
Норма тока для зарядки телефона
Большинство блоков питания для телефонов выдают ток 1-2 A — такой показатель специально подобран производителями. Он позволяет относительно быстро наполнять аккумулятор энергией и не вызывает вредного перегрева устройства. Обычно показатель тока указывается на корпусе зарядного устройства. Также можно самостоятельно выполнить замеры современным амперметром. Он часто продается под названием «тестер зарядки» и прост в использовании — достаточно подключить выходной кабель зарядки к прибору, и последний отобразит нужные параметры.
Превышение силы тока
Такая ситуация наблюдается, когда пользователь заряжает смартфон посредством блока питания от планшета. Обычно оптимальный ток для зарядки планшетных компьютеров составляет 2 A, поэтому для многих бюджетных телефонов такие блоки питания не подходят. Несмотря на то, что современные смартфоны обладают встроенным контроллером питания, может возникнуть сильный нагрев АКБ, что крайне нежелательно. Если ток заряда сильно превышен, контроллер сгорает.
Рекомендуется осторожно пользоваться сторонними адаптерами и правильно выбирать аналогии, характеристики которых будут соответствовать оригинальным зарядным устройствам.
Итоги
Мы рассмотрели ситуации, касающиеся нормы тока для зарядки смартфонов, его уменьшения и превышения. Определить силу тока можно посредством специального тестера, продающегося в магазинах электроники. Альтернативный вариант — установка приложения Ampere на смартфон. Программа отображает достаточно точный показатель тока, поступающего на смартфон. Если результат сильно отличается от указанных производителем характеристик, рекомендуется проверить исправность блока питания.