Эта история началась с довольно обычного желания - иметь точные показания пульса в своей хронологии тренировок. Как оказалось, это не такая простая задача даже в 2026 году. Все мои датчики имеют свойство "уплывать" в своих показаниях в самый ответственный момент. Не в силах больше это терпеть я решил написать собственное приложение для устройств Garmin - Extra Sensor.

Оглавление

Про бег

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

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

Как инженер я полюбил бег за обилие цифр

Современный отчёт о пробежке напоминает центр управления полётом космического корабля.

Графики

Как геймер я полюбил бег за RPG

Зачем тратить время на прокачку виртуального персонажа в Азероте, когда я тебя есть свой собственный "герой" в режиме хардкор, без сохранений и с единственной попыткой?

В добавок природа наградила его системой уровней, которые так же можно "апать". Называется это - максимальное потребление кислорода (МПК, VO2max). Спортсмены на выносливость часто меряются этим показателем.

Картинка с сайта firstbeat.
Картинка с сайта firstbeat.

Судя по самым первым пробежкам - я был примерно на уровне Poor. Регулярность подняла этот уровень до Very good. А тематическая литература, немного упорства и специальные тренировки - легко развили до уверенного Excellent+.

Человек с МПК 60, скорее всего, способен пробежать на разряд любую из классических беговых дистанций. МПК 70 обычно имеют спортсмены уровня страны. А 80 и выше - мировая элита. Всё как в легендарных играх Blizzard.

Но, как и в играх, сам по себе уровень не всегда решает. Ещё есть "скилл" (генетика) и "шмот" (карбоновые кроссовки с солидным бустом к скорости).

Про беговые гаджеты

Мои первые пробежки были с мобильным приложением, тогда выбор пал на Runtastic. После перехода на Garmin - импортировал всю историю туда, ничего не потерялось.

Mio Link
Mio Link

Мобильное приложение собирало: расстояние (включая GPS трек), время, темп, пульс, калории.

В качестве пульсометра был браслет Mio Link.

В партнёрстве именно с этой компанией Garmin выпустили свои первые часы с встроенным датчиком пульса.

Первые часы

Через несколько месяцев осознанного бега я купил спортивные часы Garmin Fenix 3 с железным ремешком и нагрудным пульсометром - Garmin HRM-Run.

Garmin Fenix 3 и Garmin HRM-Run
Garmin Fenix 3 и Garmin HRM-Run

К стандартным беговым характеристикам часы добавили: частоту шага (каденс), длину шага, температуру, аэробный эффект тренировки (при наличии пульса).

На основании частоты и длины шага часы могли мерять расстояние даже при отсутствии GPS. Точность была весьма посредственна.

Пульсометр HRM-Run был нового поколения. Одним из первых он научился показывать "динамику бега": частоту шага, длину шага, вертикальные колебания, время контакта с землёй. В спецификации ANT+ это называется Running Dynamics (для беговых датчиков) и HR-Running Dynamics (для нагрудных ремней).

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

Считается, что каденс должен быть выше 180, длина шага по ситуации (в зависимости от вашей скорости), а вертикальные колебания и время контакта с землёй минимальные для большей экономичности бега. Из всего этого я пытался работать над каденсом, он у меня довольно низкий, но никакого успеха в этом не достиг. Некоторые, уважаемые мной тренеры, говорят, что каденсом вообще не нужно заморачиваться - тело само поймёт, как ему лучше.

Второй ремень

Garmin HRM-Tri
Garmin HRM-Tri

Через несколько лет я обновил пульсометр на Garmin HRM-Tri. К "динамике бега" добавилось - распределение времени контакта с землей (баланс). Это соотношение в процентах, какая из ног проводит больше времени на земле.

Третий ремень

Когда второй ремень пришёл в негодность - я сменил его на флагман тех лет Garmin HRM-Pro Plus.

Garmin HRM-Pro Plus
Garmin HRM-Pro Plus

Визуально в тренировках ничего не изменилось. Но в ремне было два важных обновления - он поддерживал одновременную работу по ANT и BLE. И в нём появился функционал датчика Stride Based Speed and Distance или проще говоря "футпода".

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

Ну да ладно. Главное теперь у настроек ремешка появились настройки футпода - использовать его для расчёта скорости или расстояния. А также настройки калибровки расстояния.

Ещё я читал, что на современных моделях часов этот ремень будет использоваться для расчёта мощности бега. Но как-то проверить и подтвердить этот факт у меня не получилось.

Датчик мощности

В прошлом году я купил себе Stryd Power Meter - датчик на обувь для измерения мощности бега. Ходят слухи, что он показывает расстояние и скорость даже точнее GPS.

Stryd Power Meter
Stryd Power Meter

Тут важно понимать, что фактически беговой мощности не существует, пока никто не научился её достоверно измерять. Каждая компания, которая работает с беговой мощностью (например Garmin, COROS, Stryd), делает это в неких условных единицах. Размерность этих единиц отличается у разных брендов, но для удобства все они называются Ватты.

Что же такое мощность бега? Мощность сравнима с усилием, прилагаемым для продвижения вперёд. На ровной дороге в идеальных условиях мощность будет соответствовать темпу и синхронно изменяться вместе с ним. Но в других условиях (грунт, горка, ветер) темп может падать, и в этот момент очень важно не переборщить с усилием. Неправильное распределение своих сил в нестандартных условиях - довольно частая ошибка начинающего бегуна из-за которой можно завалить забег.

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

Датчик Stryd работает в часах Garmin через специальное "дополнение" к тренировке. На часах Fenix 3 оно добавляет в тренировку следующие беговые метрики: Power, Cadence, Ground Time, Vertical Oscillation, Form Power, Leg Spring Stiffness, Impact Loading Rate. На Fenix 8 появились ещё две: Temperature, Humidity.

Новые часы

Через несколько месяцев после покупки Stryd я обновил беговые часы на Garmin Fenix 8. Прошлая модель продержалась более 10 лет и у меня к ней не было никаких претензий. Батарейка стабильно отрабатывала 5-6 дней в режиме ежедневных часовых пробежек.

Garmin Fenix 8
Garmin Fenix 8

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

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

Также новые часы добавляют в тренировку некие абстрактные "попугаи", которые я просто игнорирую: нагрузка во время упражнения, динамическая нагрузка, выносливость, определение бега/ходьбы, время интенсивной активности, Body Battery, активные калории и приблизительная потеря жидкости с потом.

Вместе с нагрудным датчиком пульса в тренировку добавилась частота дыхания. Если не ошибаюсь - она измеряется по динамике изменения интервалов ударов сердца (оно же ВСР, HRV или RR-интервалы). Именно для их определения нужен нагрудный датчик.

Четвёртый ремень

Garmin HRM 600
Garmin HRM 600

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

Летом 2025 года программа сертификации ANT+ устройств, по неизвестной мне причине, закрылась. Возможно поэтому в ремне добавили поддержку новой метрики только по протоколу secure BLE.

Я проверял - при подключении по ANT протоколу "процент потери скорости при шаге" действительно не появляется в тренировках.

Прочие датчики

  • COROS Heart Rate Monitor - тут я поддался хитрым маркетологам и купил себе наплечный ремень, который много раз видел на фотографиях с забегов. Плюсом хотелось протестировать альтернативную технологию определения пульса.

  • Polar H10 - это самая упоминаемая модель пульсометра в Интернете. Именно её используют как эталон точности во многих сравнительных статьях. Нужно было обязательно протестировать всё самому!

  • Polar OH1 - это наплечный датчик от производителя "лучшего" нагрудного ремня. Я не питал особых надежд по его точности, но интересно было проверить и сравнить с другим достаточно популярным датчиком.

Что не так с пульсом?

В 2025 году пульс на большинстве моих стартов был с ошибками.

Важно предупредить, что у меня довольно высокие пульсовые зоны. Разогнать пульс выше 200 ударов на очередном субботнем паркране или вести дружескую беседу на 180 ударах - это обычное дело. Формула пульсовых зон от возраста давно устарела и совершенно тут не работает. Как и советы бега на пульсе 120-130.

Примеры с марафона (42.2 км) - завал на финише, которого быть просто не могло. К сороковому километру у меня оставались силы и я выдал максимально возможное ускорение.

Марафон (42.2 км)
Марафон (42.2 км)

Полумарафон (21.1 км) - сильная жара, средний пульс на девятнадцатом километре 200 ударов и опять завал на финише. Но я там точно не сбавлял!

Полумарафон (21.1 км)
Полумарафон (21.1 км)

Паркран (5 км) - хаос пульса на всей дистанции и уже привычный завал на финише.

Паркран (5 км)
Паркран (5 км)

Особенности работы датчиков на устройствах Garmin

Как видно из главы про гаджеты, при подключении к часам дополнительных датчиков - показания довольно многих метрик дублируются. Например, если выйти на пробежку с часами Garmin Fenix 8, ремнём Garmin HRM 600 и датчиком Stryd Power Meter, мы имеем:

  • два пульса - с часов и с HRM

  • четыре расстояния и скорости - часы GPS, часы без GPS, HRM, Stryd

  • три частоты шага (и прочей динамики бега) - часы, HRM, Stryd

  • две мощности - часы и Stryd

Но в Garmin есть фундоментальное ограничение - из всех дублей в тренировку попадёт только одна метрика, и не всегда понятно, из какого источника.

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

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

Датчики в экосистеме Garmin работают весьма неочевидно. Но имея на руках несколько часов и несколько датчиков - многие моменты начинают проясняться.

Если попробовать добавить датчик Stryd к часам Garmin Fenix 3, то он отобразится два раза: FP (Foot Pod) и PWR (Power).

Если попробовать его добавить к новым часам Garmin Fenix 8, то он отобразится четыре раза: молния (Power), человек (Running Dynamics), ботинок (Foot Pod), молния - это подключение датчика по технологии BLE (потому что у датчика есть имя), а три предыдущих строчки - это подключение датчика по ANT (потому что в имени стоит цифра, она же ANT ID).

Итак, старые часы не поддерживают внешние Running Dynamics датчики и не поддерживают технологию BLE, поэтому Stryd обнаруживается всего два раза.

Если подключить датчик как Power, то он будет источником для стандартной мощности на экране в часах и в результатах тренировки. И заменит собой данные с самих часов (только у Fenix 8).

Если подключить датчик как Foot Pod, то он будет источником темпа и дистанции в помещении. Но можно указать в настройках, чтоб он был источником темпа и/или дистанции даже при наличии GPS.

Если подключить датчик как Running Dynamics, то он будет источником динамики бега. И тут есть важный момент - если вы носите современный нагрудный HRM от Garmin, то он уже является источником беговой динамики. Если вы подключите Stryd в качестве этого датчика, то его показания станут основными. При этом вы потеряете показатель "распределение времени контакта с землей", потому что ремень, находясь на груди, может его померять, а датчик, находясь на одном из ботинков - нет.

Так что у вас есть выбор - какие датчики и в каких режимах подключать к часам. Но что самое интересное - вы можете вообще не подключать датчики к часам для получения с них данных в своих тренировках. Это можно сделать при помощи Data Field - специальных приложений из магазина Connect IQ Store. Приложения такого типа умеют отображать на экране тренировки какую-то свою дополнительную информацию, а также умеют напрямую подключаться к внешним датчикам и записывать с них информацию в FIT-файл, для последующего отображения и анализа в веб-интерфейсе и мобильном приложении Garmin Connect, а также в сторонних сервисах.

Команда Stryd написала для своего датчика такое приложение - Stryd Zones. После добавления этого Data Field в свою тренировку, совершенно не важно, подключили ли вы датчик к часам каким-либо из вышеупомянутых способов. Приложение само найдёт ваш датчик и начнёт отображать с него информацию на специальном экране:

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

Особенности разработки под Garmin

Инженеры Garmin придумали несколько типов приложений:

  • Watch Face - экран часов или самый популярный вид приложений.

  • Watch App - обычное приложение, запускаемое вручную пользователем. Например, генератор QR-кодов PSX-7 BarNote. Очень удобный, советую. Поддерживает большое количество форматов и все типы карт скидок, которые у меня были.

    Кроме того, все спортивные активности с функцией записи тренировки, также являются этим типом приложений.

  • Data Field - расширение к существующей тренировке. Может отображать в процессе тренировки какую-то информацию и графику на экране часов, а также записывать дополнительные данные в файл с тренировкой. Затем эти данные можно посмотреть в веб-интерфейсе или мобильном приложении Garmin Connect или проанализировать на сторонних сайтах.

  • Widget - мини приложение "быстрого запуска".

  • Audio App - приложение, источник музыкальных треков.

Начнём с хорошего

Для разработки был создан язык Monkey C. Авторы явно вдохновлялись Java. Хоть я и не фанат Java, синтаксис языка довольно приятный, остальное дело вкуса и привычки.

В качестве среды разработки предлагается использовать Visual Studio Code с специальным плагином из официального списка дополнений. Я не активный пользователь VSCode, но это довольно популярная и вполне удобная современная IDE.

Вместе с SDK поставляется эмулятор на 162 различных устройства Garmin, который позволяет провести базовую отладку приложения в около реальных условиях.

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

А теперь плохое

Для установки своего приложения на часы нужен провод. На дворе 2026 год, у вас на руках продвинутое современное устройство с поддержкой беспроводных протоколов Wi-Fi, Bluetooth, ANT+, но для установки своего тестового приложения нужен провод.

И вот вы подключаете часы к компьютеру проводом (с некой долей вероятности ничего не заработает и часы нужно переткнуть), ждёте секунд 20-30, копируете файл в специальную папку, отключаете часы от компьютера, ждёте секунд 10-15, и, наконец, можете тестировать. Я даже удалил лишние карты с часов, чтоб каждый старт проходил быстрее.

Удалённых средств отладки также нет. Работаем дедовским способом - принтами в логи. Чтоб включить логи определённого приложения - необходимо заранее создать соответствующий файл логов на часах. Получается для включения и для просмотра логов опять нужен провод.

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

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

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

Вместе с приятным синтаксисом Java, язык перетянул и его тёмную сторону - невероятную прожорливость к памяти. Чуть позже это нам сильно аукнется.

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

Бета-версия

Через какое-то время я обнаружил другой способ отладки своего приложения - его можно загрузить в портал Garmin Connect IQ с включенной галочкой "бета-версия". Такое приложение сможет видеть в магазине и устанавливать на свои часы только ваш аккаунт. То есть протестировать своё приложение может только разработчик и только на своих личных часах. Если есть желание протестировать на часах жены - нужно сделать и её аккаунт разработчиком и разместить от её имени ещё одно "бета-приложение".

Теперь при каждом малейшем обновлении, которое требуется посмотреть на живом устройстве, необходимо собирать специальную версию приложения "для магазина", загружать её на портал, дожидаться когда телефон увидит обновление, и, лишь затем, можно тестировать. А телефон видит эти обновления очень неохотно. Иногда приходится синхронизировать его с десяток раз. Иногда телефон врёт, говорит что всё обновил, хотя по факту это не так. Иногда говорит, что на часах старая версия, хотя на часах она уже новая.

Из плюсов - у такой бета версии теперь есть рабочие настройки. А ещё собранные с её помощью данные в FIT файл можно отображать на портале Garmin Connect и в мобильном приложении.

16 килобайт памяти

Через несколько дней разработки у меня уже было рабочее приложение для Fenix 8 и я решил проверить его на Fenix 3. Всё отлично стартовало, но при добавление нескольких датчиков приложение всё же падало. "Out Of Memory Error" или нехватка памяти.

Как оказалось, на первом поколении часов, приложению Data Field выделяется всего 16 килобайт памяти. У меня в кармане лежит не очень свежий мобильник с 16 гигабайтами памяти. Это 16 миллиардов байт. А на часах ваша программа должна уложиться в 16 тысяч байт. И это включая сам исходный код, где каждая строчка, каждая переменная и инструкция занимает драгоценные байты.

В общем первая версия приложения сразу после старта отъедала около 14 килобайт памяти. А настройки нескольких датчиков - ещё порядка килобайта сверху. Да, просто настройки тоже весьма ощутимо отнимают память. Когда приложение попытается создать ANT подключение или начнёт запись в FIT файл - каждое из этих действий также требует немало памяти.

Активная память текущей бета-версии - 22КБ
Активная память текущей бета-версии - 22КБ

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

Настройки

И снова ряд странных решений со стороны инженеров Garmin.

Настройки приложения можно менять из мобильного приложения Connect IQ или настольного приложения Garmin Express. При этом интерфейс настроек подгружается с сайта Garmin и без интернета не работает.

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

Настройки приложения ANT+ HRM Heart Rate Monitor
Настройки приложения ANT+ HRM Heart Rate Monitor

Иногда настройки начинают сильно глючить и никак не сохраняют ваши изменения. Тогда приложение нужно удалить и установить заново. В редких случаях и это не помогает, тогда можно попробовать поменять настройки с помощью приложения Garmin Express.

Из графических элементов настроек разработчику доступно - поле текстового ввода, выпадающий список и переключатель. Отдельно стоит отметить - расширяемый список, где можно объединить настройки в группу и пользователь сможет добавлять их несколько раз. Как раз подходит для настройки датчиков. Не понимаю, почему авторы многих приложений, включая скриншот выше, этим не пользуются.

Хотя понимаю - тут не обошлось без багов со стороны Garmin. Все настройки в таком списке обязательно должны иметь текстовые значения, иначе интерфейс приложения падает с ошибкой. Падает как интерфейс эмулятора, так и мобильное приложение Connect IQ.

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

Архитектура приложения

Основной сущностью приложения является "сенсор". Я сразу решил не останавливаться только на пульсе, а спроектировать приложение, которое сможет работать с любым типом датчиков. И тут важно понимать, что один физический датчик может предоставлять несколько сенсоров.

Например, Garmin HRM 600 может быть источником: пульса, скорости, расстояния и каденса. Плюс он может их отправлять как по ANT протоколу, так и по BLE протоколу, а это уже восемь сенсоров. Плюс пользователю может захотеться отобразить на экране мгновенный пульс, средний пульс на круге и/или средний пульс за тренировку - а это фактически три разных сенсора. И приложение поддерживает все эти случаи.

Сборка приложения

Сперва у меня были мысли выпустить под Fenix 3 отдельную версию приложения, в которой, для облегчения конструкции, будет полностью вырезан код работы с BLE, он всё равно там не поддерживается. И некоторые разработчики действительно идут таким путём.

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

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

В итоге у меня получилось четыре принципиально разные сборки приложения:

  1. Для часов epix. Это самая первая модель часов Garmin с поддержкой приложений Connect IQ. Они не умеют записывать данные в FIT-файл. Поэтому я просто вырезал такую опцию из их настроек. Фактически в исходном коде приложения функционал записи в FIT-файл остался, и если его вызвать на часах - приложение просто упадёт. Но раз настройки нет - никто этот функционал вызвать не сможет.

  2. Для первого поколения устройств с 16КБ памяти - поколение Fenix 3. Это самая проблемная и урезанная сборка. Настройки ограничены всего 4 сенсорами. Запись в FIT-файл происходит в упрощённом виде. Всё ради экономии памяти.

  3. Старые модели устройств без BLE функционала - поколение Fenix 5. Все упоминания BLE вырезаны из настроек и кода приложения. Пришлось пробежаться по характеристикам всех моделей на сайте Garmin, чтоб составить правильный список.

  4. Современные модели с полным функционалом - поколение Fenix 6 и выше.

Применив немало терпения и упорства, у меня получилось написать Data Field под абсолютно все модели устройств на рынке. Итоговый билд содержит в себе 307 разных версий приложения!

Кстати, недавний рекорд на марафоне из двух часов был поставлен в базовой модели - Garmin Forerunner 55. Эта модель соответствует поколению Fenix 6, и является самой популярной в статистике скачивания моего приложения:

Особенности сохранения данных в FIT-файл

Все правила, по которым Garmin позволяет сохранять дополнительные данные в тренировку не столь очевидны, поэтому пришлось добывать их опытным путём. Итак:

  • В одной "записи" FIT-файла может быть до 32 байт дополнительных данных.

  • Записи могут быть разные: данные за одну секунду, статистика круга, статистика за сессию. У каждой будет свой отдельный лимит.

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

  • В одной записи может быть до 16 полей данных в зависимости от размера поля. Например, пульс и каденс легко умещаются в один байт (значения от 0 до 254). Для мощности нужно использовать два байта (значения от 0 до 65 тысяч). На расстояние и скорость нужно четыре байта, потому что это вещественные числа.

  • Если один сенсор отображается на графике, в статистике круга и в статистике за сессию, то это три разных поля данных.

Разработчик может указать, какие поля данных он хочет отображать в интерфейсе Garmin Connect, как они должны называться и какие имеют единицы измерения. Таких полей может быть до 256 штук, и это оказалось серьёзным ограничением для моего проекта.

Дальше будет сложно, пропустите этот раздел, если запутались в цифрах.

Возьмём пульс. Пользователь может подключить к современной модели часов Garmin до 9 ANT датчиков и до 3 BLE датчиков. Это уже 12 полей данных для отображения в виде графиков. Для отображения среднего значения пульса круга и среднего значения пульса за тренировку нужно ещё два поля данных на каждый сенсор. Итого получается 36 полей данных только на пульс.

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

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

Поэтому я принял решение назначать правильные имена только первым четырём сенсорам каждого типа - четыре Heart Rate, четыре Distance и так далее. А остальные сенсоры будут отображаться в интерфейсе Garmin Connect с нейтральным именем Sensor 1, Sensor 2 и так далее.

Итого на данный момент потрачено "4 типа именных сенсоров х 3 поля данных х 4 штуки каждого + 8 штук нейтральных сенсоров х 3 поля = 72 полей данных". Хороший задел на развитие.

Кстати, это одна из причин, почему я отказался от max/min значений сенсоров. Они также отнимают поля данных тренировки. Если учесть, что max/min нужно отображать за круг и итоговые за тренировку, то каждый сенсор отнимал бы не 3, а 7 полей данных. И вместо 72 штук было бы занято уже 168. А если не ограничивать количество всего 4 датчиками каждого типа, а ориентироваться на 12 - то получаем 336 полей данных и уже не укладываемся в лимиты Garmin.

Мой рейтинг пульсометров

Какой же датчик пульса оказался самым лучшим? Если вы ожидаете тут услышать название модели, которая покажет точный пульс на любой тренировке, то я вас разочарую. Такой модели нет. Любой из тестируемых мной датчиков может в любой момент потерять пульс и "уплыть" в неадекватные значения.

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

На данный момент я ушёл гораздо дальше от простого сравнения графиков. Уже несколько недель я бегаю с 5 датчиками одновременно и собираю информацию о каждом ударе сердца в виде RR-интервалов (или вариабельности сердечного ритма). По этим данным очень наглядно видно, когда датчик потерял пульс и сколько ему потребовалось времени, чтоб найти его снова. На графике пульса подобный момент можно даже не заметить, но именно эта информация отражает качество и стабильность работы датчика.

Итак, рейтинг от лучшего к худьшему:

  1. Polar H10 - действительно лучший из вышеупомянутых датчиков. Он полностью провалил замеры пульса на самой первой пробежке. Иногда терял пульс в процессе тренировки. Но, в сравнении с Гарминами, его данные HRV более ровные, а ошибки менее частые и более короткие.

  2. Garmin HRM-Pro Plus - прошлый флагман Garmin оказался лучше новинки. Меньше ошибается, стабильнее работает. Но и он бывает подводит.

  3. Garmin HRM 600 - разочаровал в сравнении с прошлой моделью. Инженеры Garmin перемудрили с защищенным протоколом BLE и реализовали его довольно криво. Выдача RR-интервалов по протоколу BLE с ошибками, пользоваться невозможно. При потерях пульса передача данных подвисает и нарушается. Но бывают и редкие пробежки без единой ошибки.

  4. COROS Heart Rate Monitor - на удивление пульс с этого датчика часто похож на правду. Главное надевать его на самую мясистую часть руки. В рекламных фото положение плохое! Желательно сместить датчик чуть ниже, как на рекламных фото Polar OH1. График пульса отображается с небольшой, но заметной задержкой от нагрудных датчиков.

  5. Polar OH1 - сильно разочаровал. График часто уплывает от вышеупомянутых датчиков. Но, как я и сказал ранее, даже с этой ошибкой средние значения пульса всех датчиков совпадают с точностью до 1-2 ударов.

Ниже момент, когда подвёл Polar H10 (красный на графике) в свою самую первую пробежку. Может быть как-то сказался абсолютно новый ремень.

Отставание Coros (красный) от нагрудного датчика. Думаю тут всё наглядно.

Ещё большее отставание Polar OH1 (красный) и довольно заметная ошибка. При этом средний пульс получится в точности как у нагрудного датчика.

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

Также важно упомянуть, что в последнее время для нагрудных ремней я использую электродный гель Унимакс от компании Гельтек, который значительно сократил количество "уплываний" пульса. Хотя это может быть простым совпадением.

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

Что лучше, ANT или BLE?

Тоже интересный вопрос, которым вероятно многие задаются.

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

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

Чем отличается нагрудный датчик от ЭКГ?

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

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

Датчик умеет снимать показания ЭКГ с частой 130 Гц (раз в секунду). Медицинские приборы обычно выдают свои результаты на ленту со скоростью 25 или 50 мм в секунду. Получается точность датчика Polar будет 0.2 или 0.4 мм ленты соответственно, что вполне сравнимо с медицинскими приборами.

Но есть важное отличие. Стандартный медицинский прибор снимает показания через десять контактов (электродов). Измеряя разность потенциалов между этими контактами он рисует на ленте двенадцать графиков (отведений). Нагрудный пульсометр имеет всего два контакта и может нарисовать всего один график. Но чем же они отличаются?

Три основных контакта (стандартные отведения) крепятся к правой руке, левой руке и левой ноге. Горизонтальную разность потенциалов (между руками) отражает первый график, диагональную (между правой рукой и левой ногой) - второй график, вертикальную - третий график.

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

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

Но люди разные. Именно поэтому кардиограмма снимается несколькими контактами в разных местах. Взгляните на мою ЭКГ, которую я снял совсем недавно:

Скорость 25 мм в секунду
Скорость 25 мм в секунду

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

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

Рекомендую очень интересный и довольно понятный курс лекций - ЭКГ под силу каждому, откуда я взял слайды выше.

Что дальше?

Я продолжаю бегать каждый день с несколькими датчиками пульса и собирать с них данные. Из-за недавнего перелома крестца мне пока не удалось изучить поведение датчиков на достаточно высоких пульсах. Думаю после таких тестов можно будет сделать новые и достаточно интересные выводы.

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

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

Если вам интересно сравнить показания ваших датчиков пульса или расстояния - воспользуйтесь моим приложением Extra Sensor.

Кстати, датчик Stryd действительно очень точно измеряет пройденную дистанцию. В моих тестах разница с GPS стабильно составляла не более 50 метров для 5 километровой пробежки. А вот нагрудные Garmin HRM ошибаются с расстоянием часто и сильно.

Комментарии (33)


  1. NutsUnderline
    05.05.2026 05:57

    Я Polar H10, а так же пару Whaoo Tickr X гонял с тремя разными ремнями, родными и сторонними. И смачивал и с гелем. В очень ровных условиях, на беговой дорожке. Polar H10 отваливается рандомно и на несколько минут - запросто. Запускал его в т.ч. в режиме трасляции "сырых" данных, типа ЭКГ - отвалы хорошо видны. Хуже если не отваливается а начинает галлюцинировать значениями погоды на Марсе. Whaoo отваливается меньше, но может уплыть.

    Одновременно на руке недорогие amazfit bip 6 с оптическим датчиком. Которые не отваливаются вообще , если хорошо ремешеок затянут. И пульс 1к1 с нагрудными.


    1. AlexxIT Автор
      05.05.2026 05:57

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


      1. NutsUnderline
        05.05.2026 05:57

        будет какая-то принципиальная разница между брендами.

        у них всяко разные алгоритмы обработки, так что "поведение" уже заметно разное


        1. AlexxIT Автор
          05.05.2026 05:57

          Если всем датчикам приходится работать с кардиограммой, как на моём первом графике ЭКГ - то никакой алгоритм тут не вытащит.

          Хотя у меня были подозрения, что Polar может пытаться угадывать, когда должен был быть следующий удар. В случае нормальной работы сердца и правильном анализе HRV - примерное время будущего удара довольно очевидно.


          1. NutsUnderline
            05.05.2026 05:57

            говорят, яблоки че то угадывают при помощи ИИ.

            по рекламе и обсуждениям Polar н10 может создаться ложное впечатление что он работает стабильно, его предлагают в качестве прям образцового. Но он же без видимых причин теряет, это не разовые вылеты. Если он пытается угадать то это даже хуже.


    1. Krenodator
      05.05.2026 05:57

      Сырые данные вообще мало кто умеет нормально фильтровать. Там половина датасета - это тупо шум от движения грудной клетки


  1. NutsUnderline
    05.05.2026 05:57

    датчик Stryd действительно очень точно измеряет пройденную дистанцию

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


    1. AlexxIT Автор
      05.05.2026 05:57

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

      У меня были отдельно мысли написать в перспективе алгоритм автоматической калибровки для Garmin HRM. Но пока собираю статистику и сконцентрирован на HRV.


      1. NutsUnderline
        05.05.2026 05:57

        сам калибруется после нескольких пробежек с GPS

        как по мне это тот самый "несущетвенный" факт о котором предпочитают "забывать" упомянуть производители


      1. Krenodator
        05.05.2026 05:57

        Без нормальной калибровки это просто рандомайзер цифр. Шаг меняется от усталости, и вся эта математика летит в корзину)


        1. AlexxIT Автор
          05.05.2026 05:57

          Сейчас этот рандомайзер отличается менее чем на 1% от GPS на протяжении нескольких недель.

          И я не могу использовать слово "ошибается". Потому что нет гарантий, что именно GPS выдаёт более точную дистанцию.


  1. tuxi
    05.05.2026 05:57

    К гармину через ANT+ легко подключается Coospo HW9 (вариант на бицепс), приличный недорогой быстрый пульсометр. Вариант с креплением на бицепс более комфортно, чем нагрудный вариант, и более точный, чем варианты на кисть. И самое главное - быстрый, высокая частота передачи показаний.
    Я занимаюсь эндюранс тренировками, он практически мгновенно отдает пульс, задержка может секунд 10...


    1. AlexxIT Автор
      05.05.2026 05:57

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

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

      А нагрудные меня никогда не напрягали. Разве что сейчас три ремня одновременно вызывают лёгкий дискомфорт.


      1. tuxi
        05.05.2026 05:57

        Насчет приложения: нет мыслей реализовать алгоритм расчета CR10 ? Как пример - приложение от acentas (есть под андроид и под windows)

        Скрытый текст


        1. AlexxIT Автор
          05.05.2026 05:57

          Быстро погуглил. Сходу не нашёл как он считается и чем он так хорош.

          Есть мысли посчитать DFA alpha 1. По слухам этот показатель может указать на первый порог. Но ему нужны очень точные интервалы HRV, чего я сейчас и пытаюсь добиться.


          1. tuxi
            05.05.2026 05:57

            Вот я тоже не нашел как немцы это сделали. Но это у них работает. Не знаю как - но попадание с ощущениями процентов 90. Реверсить приложение наверное надо.


    1. Krenodator
      05.05.2026 05:57

      10 секунд для интервальной тренировки это целая вечность. За это время можно уже закончить ускорение


  1. Trudnyi
    05.05.2026 05:57

    Для сведения, вдруг пригодится - при загрузке на портал есть еще одна опция (была по крайней мере) - ERA (Error Reporting Analytics). Это официальный инструмент Garmin для разработчиков Connect IQ, который позволяет удаленно собирать и анализировать отчеты о сбоях приложений, установленных на устройствах пользователей.


    1. AlexxIT Автор
      05.05.2026 05:57

      Спасибо, посмотрю. Пока не нужно. Приложение не сильно популярное.


  1. Advisory
    05.05.2026 05:57

    Считается, что каденс должен быть выше 180

    у меня довольно высокие пульсовые зоны. Разогнать пульс выше 200 ударов на очередном субботнем паркране или вести дружескую беседу на 180 ударах - это обычное дело

    в Garmin есть фундаментальное ограничение - из всех дублей в тренировку попадёт только одна метрика, и не всегда понятно, из какого источника

    На всех трех графиках, что вы показали, падения пульса (искажения) происходят после того как вы ускоряетесь. Не пробовали искать причины некорректного учета, что-то общее, именно в этом?

    Как разработчик измеряет каденс, не знаете? Не происходит путаницы — вместо пульса начинает каденс на графике отображать? Исключили изменения в прилегании датчика (напрягли грудь, свели плечи вперед) и/или более интенсивное трение футболки? Алгоритмы усреднения (отсечения артефактов) при достижении пороговых значений?

    Не пробовали строить собственные графики по сырым интервалам (FIT) и сравнивать с полученными от разработчика, чтобы исключить некорректные алгоритмы отрисовки?


    1. AlexxIT Автор
      05.05.2026 05:57

      Много вопросов.

      1. Что можно сказать точно про ускорения, что там пульс строго выше 180 ударов. А это порог когда 3 удара в секунду превращаются в 4 удара. Может тут есть какая-то связь.

      2. Каденс шлёт сам датчик. Что вместо пульса начинает отображаться каденс - исключено.

      3. Более интенсивно трётся футболка - возможно. На финишных ускорениях очень сложно думать своей головой.

      4. Пульс также шлёт сам датчик, тут Гармин ничего не выдумывает при отрисовке.


  1. tortor
    05.05.2026 05:57

    Какая же у вас максимальная ЧСС если "рабочая" на полумарафоне под 200? И ЧСС в состоянии покоя тоже интересно узнать - также повышена или же вот такой огромный т.н. "резерв" ЧСС?


    1. AlexxIT Автор
      05.05.2026 05:57

      Примерно 206 максимум. Не меняется с самого начала занятий бегом, более 10 лет.

      Рабочий полумарафон от 190 до 195. Также не меняется более 10 лет. 200 это был перебор в жару и по горкам.

      На днях делал холтер - ненадолго ночью опускается ниже 50. Но в среднем пульс покоя 55 ударов.


  1. Krenodator
    05.05.2026 05:57

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


  1. mikelavr
    05.05.2026 05:57

    По поводу кардиогеля - он действительно улучшает контакт, и датчики работают лучше. Но примерно через полгода ремешок так наедается геля, что начинается утечка тока по ремешку - и данные резко становятся хуже. Решается относительно просто - ремешок замачивается в воде, и примерно раз в сутки с него руками собирается набухший гель. Раза с четвертого удается отмочить :-).

    Прошелся примерно по вашему пути, только приложения сам писать не стал. Для сравнения показаний с двух датчиков есть готовые приложения. Сравнивал несколько моделей, подключенных к часам Garmin Forernner 245 и Fenix 7S. Мои выводы:

    Garmin HRM Pro - плохая чувствительность, легко теряет контакт.

    Polar H10 - хорошо, сбои точечные и в основном на резких ускорениях (интервальные тренировки). Использовал его как образцовый, хотя и достаточно старый (на данный момент уже 9 лет).

    Polar Verity Sense - отлично, но есть задержка 8-10 сек. Для интервальных тренировок неприемлемо, а для равномерных - отлично.

    Coros HRM - отлично во всех режимах. Задержка если и есть, то не более 1 сек. На нём и остановился в итоге. Очень удобно, что он сам включается и выключается.

    Встроенный в часы оптический датчик для тренировок непригоден. Зато очень хорош для снятия данных по ночам.

    Мой МЧСС ~180, возможно поэтому сбоев в конце забегов не видел. Половинку бегу на 165-168.

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

    Протокол ANT+ достаточно старый, там плохо реализован антиколлизионный протокол. В 2012 году эфир был почище... Сейчас же, если в манеже больше 100 человек, или на крупном забеге - ANT+ начинает отчаянно сбоить. Поэтому перешел на BLE.


    1. AlexxIT Автор
      05.05.2026 05:57

      Спасибо за расширенный отзыв.

      Другие похожие приложения действительно есть, я добавил скриншот одного из них в статью. Но я не смог найти приложение, которое поддерживало бы BLE датчики. Мне хотелось использовать COROS как запасной датчик, а в ANT он не умеет.


      1. mikelavr
        05.05.2026 05:57

        Согласен, все аналогичные приложения работают только с ANT+. Поэтому в качестве опорного у меня был Polar H10 - он умеет работать по ANT+. Тестируемый при этом можно подключать по любому протоколу.

        Кстати, я проводил инструментальный замер чувствительности нескольких датчиков на самодельном стенде. Результаты измерений:

        Garmin HRM3-SS: 2,90 mV
        Garmin HRM-Dual: 2,74 mV
        Polar H10: 0,59 mV

        Garmin HRM Pro протестировать не удалось - он несъемный, хорошо подключиться не получается.


        1. AlexxIT Автор
          05.05.2026 05:57

          А есть идея как проверить проводимость геля? Есть желание, но нет идей как это сделать.

          Ещё у меня есть мысли купить контакты от ЭКГ и приделать их к датчикам. Я делал опыты с Polar, если развернуть его вдоль электрической оси сердца - график сильно улучшается.


          1. mikelavr
            05.05.2026 05:57

            В принципе, достаточно просто сместить ремешок так, чтобы датчик оказался над сердцем. Это уже улучшает показания.

            http://www.muscleoxygentraining.com/2021/08/dfa-a1-and-optimal-hrm-position.html


            1. AlexxIT Автор
              05.05.2026 05:57

              Как раз ближе к сердцу и немного под углом у меня будет полностью мёртвая зона для датчика. Потому что перпендикулярно оси сердца.

              Я находил её с помощью функции ЭКГ от Polar. А так же находил ось сердца. Она практически вертикальная, немного под углом.


          1. mikelavr
            05.05.2026 05:57

            Проводимость геля точно лучше, чем проводимость пота. Тем более, что солёность пота сильно индивидуальна.

            Вообще, с контактными датчиками есть две беды. Мало пота (начало тренировки, или холодная погода), много пота (в жаркую погоду). Но HRV можно снять только контактно, внешние оптические датчики таких данных почему то не выдают. Хотя оптический датчик в часах HRV успешно считывает.

            Бегунам всё же не нужно ЭКГ на бегу...


            1. AlexxIT Автор
              05.05.2026 05:57

              Я уже изучил историю с HRV. Оптические датчики её действительно не выдают потому что не умеют считать.

              У Polar OH1 можно её добыть из ANT протокола, но цифры будут полный бред.

              Оптический датчик часов её действительно считает, но доверять этим показателям можно только в состоянии полного покоя. Как раз подходит для мониторинга сна.


      1. mikelavr
        05.05.2026 05:57