这是由一年不戴的 Apple Watch 引发的一点研究,也是在购买后一周年才想起去搞明白的一些问题。近期因为跑步和骑行,又重新戴上了 Apple Watch,这东西吸附在充电底座上被遗忘有好些日子了。我是第一批预订 Apple Watch 并在发售当天拿到货的。 算来整整一年了,但除了第一周的新鲜劲,后来就不了了之,除了 Apple Pay 绑定外,期间没怎么使用,他人对于电池续航的担心,对于我纯属多虑。相比于传统机械计时器,Apple Watch 的厚度还是显得突兀,对于在手表上运行 App,我觉得它更像是个 Wrist Notifier,最多还能兼职做个 Wrist Remote Control,帮助拍摄视频和照片。Apple Watch 剩下的最大用处,也就是健康与运动功能监测了。

作为一个以健身为主要卖点的产品,其自带的 Activity、Workout 和 Health 这三款应用按照苹果一贯的调性,自认为是 intuitive 的,上手就能用,并没有给出相关使用说明,有些东西是一笔糊涂账。这一年来我也没打算去理解这些 App 之间的情景与数据关系。网上的资料并不翔实,有的问题没被提到。但既然开始要做健身监测,所以还得自己研究弄明白。

要搞清健康与运动的数据,肯定绕不开传感器。在官网很容易查到 iPhone 的传感器,这里解释得更详细。Apple Watch 的传感器也有介绍。对于运动与健康数据的采集,现在都采用协处理器接口采集传感器的数据,不需要太多调用 CPU 在 OS 层的操作,能保证持续低功耗得监测和获取数据。在罗列出的所有传感器中,运动与健康数据采集所需要用到的传感器为:

  • 心率传感器 Heart-rate Monitor
  • 加速感应器 Accelerometer
  • 陀螺仪 Gyroscope
  • 气压计 Barometer
  • GPS + Compass

其他如环境光感应器,距离传感器,NFC 芯片等与运动数据采集并没有什么关系。考虑到使用场景和耗电续航,iPhone 6(s) 并没有配备心率传感器,而 Apple Watch 1st Gen 也没有配备气压计、GPS 和电子指南针。

Apple Watch (1st Gen)iPhone 6(s) for Example
心率传感器 Heart-rate Monitor
加速感应器 Accelerometer
陀螺仪 Gyroscope
气压计 Barometer
GPS + Compass

Apple Watch

Apple Watch 利用 LED 绿光和红外光,以及两种光传感器来检测心率。当其处于 15 摄氏度以下的低温时,通过测量绿光的吸收状况来获得更精确的数据。而高温环境下,比如用户正在健身房里挥汗如雨时,皮肤表面水分增加,由于更多绿光已经被吸掉,要检测皮下反射的绿光就比较困难,这时 Apple Watch 就转换到红外光模式。 —— 知乎链接

Apple Watch 上独有的心率传感器不仅采集间隔心率和实时心率 (开启手表上的 Workout 应用),而且通过算法给出卡路里消耗。如不佩戴 Apple Watch,Activity 应用是不采集运动数据的,里面的卡路里消耗,运动时间和每小时站立的次数都为零。

但是,Health 里的 “Walking + Running Distance" 、“ Flights Climbed “ 和 “ Steps ” 却依然有数据记录。那是因为在 Health 的 Sources - Devices 里面不仅采集 Apple Watch 的运动数据,还有 iPhone 和其他第三方的设备。iPhone 通过 M 系列协处理器在低功耗下不断采集加速感应器,陀螺仪和气压计上产生的数值。这是手机产生的数据,与 Apple Watch 无关,Health 专项详细数据会注明是来自手机、手表、第三方腕带或是体重秤。

Settings - Privacy - Motion & Fitness 里,则可以授权健康应用或其他第三方 App 使用 iOS 所产生的数据。

总之, Health 是所有健康与运动数据的汇总站。

在抬腕看表时 Apple Watch 自动点亮,放下手腕屏幕自动熄灭,这也离不开加速感应器和陀螺仪的配合。通过测试,垂直固定手臂只转动手腕激活陀螺仪,或保持手腕不动抬起手肘激活加速感应器(跑步时的摆臂),Apple Watch 的屏幕都不会被点亮,由此可以断定抬腕看表这个动作是加速感应器和陀螺仪同时感应到变化后把数据回馈给 S1 芯片,由其根据算法判断是否该唤醒屏幕。

iPhone

气压计和 GPS 是 iPhone 独有的传感器(截止 2016 年 4 月)。气压传感器 Barometer 给出的是环境气压海拔,GPS 获得的卫星读数是实际地理海拔。电子气压计的精度很大程度上与空气湿度和温度有关。我特意在波音 777 上做了测试。B-777 是我乘过最舒适的客机,我指的并不是座椅机餐娱乐这些东西,而是能不能让我长途飞行中睡舒服的舱内加压。由于曾经工作时耳蜗和鼓膜遭受过冲击波,所以对舱内加压更敏感。民航标准是舱内气压 0.8bar 或等效 2500m 的海拔,但感觉 B-777 的舱压更高,折合下来的海拔应该会更低,人也更舒服,由于我喜欢坐机舱中间瞅没人的联排座位睡觉,因此 GPS 信号是被屏蔽的,手机上给出的海拔读数在 1900 - 2200 之间,用的是 Baromenter 这款 App。坐窗边的人可以用 GPS 测下巡航高度(宽体客机一般在 9000-10000 米左右),这就是飞行的实际高度了。

举这个例子想说的是, 现在的 Barometer 通过气压变化判定高度,作用实在有限,否则 App Store 上也不会只有那几个应用。相对于电梯上升或爬楼,我相信更多的是采用加速感应器和陀螺仪相结合的算法来得出上升高度的。如过想要知道自己的实际海拔,iPhone 自带的指南针里就有。

Google 一搜,还有人说气压计能在导航时知道你是上匝道或是进隧道了,但这个很容易证伪。行车时只要关闭车窗和天窗,打开内循环,车内气压几乎恒定。测算到是否开上匝道,我相信还是因为陀螺仪(上坡时产生仰角,进隧道时产生俯角)和加速感应器综合状态的变化,跟气压计关系不大。

GPS 在 iPhone 完全离线下也能使用。卫星给出的读数是四组,分别是经纬度,海拔高度和 UTC 时间。所以在没有网络的情况下,也可以知道自己的地理海拔高度,Barometer 告诉你的则是气压折算后的海拔,而且波动范围很大。

下图是一个人驾车从四川阿坝开往青海年保玉则路上即时观察的海拔。除了大一点的乡镇,路上联通根本没信号。iPad mini 是蜂窝版,带了 GPS 模块,因此能不断获取地理高度数值;随着高度增加,环境气压不断降低,为防止高反,在成都买了许多巧克力以增加血糖和血红蛋白携氧量。这些充氮包装在过3000米海拔后都鼓了起来,到了5000米隘口的时候感觉快爆了。

初次使用 Apple Watch 时要携带开启定位于 GPS 的 iPhone 用以同步校准 Apple Watch。在骑车锻炼时,苹果建议把 iPhone 也带上,这样可以调用指南针和 GPS,记录你骑行轨迹,但其他大部分如跑步,爬楼,划船之类的练习,靠心率、加速感应器和陀螺仪,就能相对靠谱得获得到卡路里消耗了。