自己做一块运动手表,硬件和固件该怎么搭
自己做一块运动手表,硬件和固件该怎么搭|z35资讯网
去年有个朋友问我,能不能帮他做一块运动手表,要求不高:能测心率、能记轨迹、续航别三天一充。我当时想,这不就是拿个开发板拼一拼的事。真动手才发现,光是让心率在跑步时不乱跳,就折腾了快两个月。
先说结论:运动手表这东西,硬件堆料不难,难的是把传感器数据做干净。市面上几百块和几千块的差别,八成在算法和功耗调校上。

先把需求写清楚再买零件
我见过太多人一上来就买一堆模块,结果发现屏幕驱动不起来,或者电池塞不进壳子。正确的顺序是反过来的:先定屏幕尺寸和续航目标,再倒推电池容量,最后选主控。

我的第一版方案是这样定的:

- 主控用 nRF52840,蓝牙5.0自带,低功耗模式下电流能压到 3μA 左右
- 心率用 MAX30102,便宜好买,缺点是抗运动干扰差,得靠算法补
- 六轴用 LSM6DSO,加速度计加陀螺仪,步频和泳姿识别都靠它
- GPS 选 u-blox M10,冷启动 25 秒左右,比老款省一半电
- 屏幕 1.28 寸圆形 AMOLED,分辨率 410×502,阳光下能看清
这套下来物料成本大概 300 出头,比想象中便宜。麻烦的是它们凑在一起会互相干扰,GPS 天线离屏幕排线太近,定位精度直接掉到 15 米开外。后来把天线挪到表耳位置才好。
心率数据为什么总是飘
PPG 心率最坑的地方是运动伪影。你手臂一摆,光电信号里混进周期性噪声,跟心跳频率差不多,算法分不清。我试过三种做法:
第一种直接读原始值,跑起来能从 140 跳到 80,完全没法看。第二种加带通滤波,静态准了,一加速又废。最后用的是加速度计做参考信号的 LMS 自适应滤波,把运动噪声减掉,再加一个 8 秒滑动中值。这样跑间歇的时候,心率曲线终于跟胸带对得上了,误差控制在 5 次以内。
GPS 也是类似思路。单纯拿原始点画轨迹,树荫底下能画出锯齿。我的处理是先按 HDOP 值过滤掉精度差的点,再用卡尔曼滤波做平滑,最后按速度阈值剔除明显跳点。这套流程跑完,绕操场跑十圈,轨迹基本能贴住跑道。
续航是算出来的,不是调出来的
很多人以为省电靠软件优化,其实大头在方案设计阶段就定了。我的表 500mAh 电池,目标 14 天待机、20 小时 GPS 记录,算下来平均电流必须压在 1.5mA 以内。
分解一下:屏幕常亮模式占 0.8mA,主控休眠加定时唤醒 0.2mA,心率每 5 分钟测一次 0.1mA,剩下留给蓝牙同步和 GPS。GPS 全开的时候电流 25mA,所以不能常开,得做成"按需定位",每 10 秒抓一次点,中间让芯片进休眠。这样记录模式平均 12mA,20 小时刚好用完。
如果一开始没算这笔账,后面怎么优化都补不回来。我第二版想加个血氧,测下来功耗翻倍,只能砍掉。
外壳我用的是光固化树脂打印,做了三次才把按键行程调舒服。防水靠表壳内侧一圈硅胶圈加超声波焊接,实测 5ATM,游泳没问题,但别戴着洗热水澡,胶圈会老化。
从能用到好用,中间还隔着传感器标定、固件 OTA、App 数据同步这一堆事。自己做着玩,把心率、GPS、续航这三样做扎实,就已经超过很多贴牌产品了。真想量产,EMC 认证和电池安全那关才是硬骨头。