并非没有运动的一天:重新编程中国心率监测器

“听着,慢跑时应该有什么样的心率?”
-好吧,我不知道-150首
-是吗?为什么我有840?
-每分钟840吗?!
-什么,有必要考虑一下还是什么?
“你觉得呢?”
“好吧,我只是数了数,直到迷路了……所以,好吧,我去点票了。”
(电影“选举日”)

几乎与中国的心率监测器有关。俗话说,如果你想做点好事,那就自己去做。并且,如果该设备无法正常运行,那么是否有可能对其进行改进?


许多对运动感兴趣的人在运动过程中会监控自己的心率。为此,使用心率监测器。本文的任务不是考虑所有类型,而是最可靠和最可靠的方法之一是从心脏接收电信号的胸部脉冲传感器。

为了增加我的运动量,还购买了Kyto 2809 心率监测器,脉搏很好,但需要精确测量RR间隔。心率监测器支持两种协议:ANT +和BLE。根据规范,除了直接心跳速率外,这两者都传输RR间隔的持续时间。

什么是RR间隔
RR – R .


RR , . . , (. « RR » « »). .

为了记录来自两个渠道的数据,编写了一个Android应用程序来满足您的需求,同时将数据日志记录到文本文件中。模拟心率监测器作为或多或少合适的标准发送,以5.3 kHz的频率发送信号,并通过arduino直接连接到PC。

第一次比较有点难过。


一次实际心跳的“设备”显示4-5不存在(在蓝色图表上,您可以看到很多点)。即使考虑到可能的平均值,该脉冲也不会准确发光。关于测量RR语音间隔完全没有用。

与制造商的沟通并没有带来结果。除了几个视频之外,还试图说服我一切都很好,并说出“ KYTO2809心率数据准确!”的字样,但我没有从中得到任何帮助。然后他的目光用螺丝刀落在盒子上。打开盒子,我发现了nRF51422芯片。


知道有用于这些MK的SDK后,我决定尝试对其进行刷新。那里需要最简单的程序:从心脏电信号的放大器(照片中的黑点)开始,信号进入MK输入,这是技术问题,我们通过中断捕获脉冲,测量它们之间的时间,并通过BLE和ANT +显示所有这些。一切都很简单,但是中国程序员显然出了点问题。

这些芯片通过SWD编程。本机固件受到保护,无法读取。因此,毫不犹豫地执行了命令“ format c:” “-eraseall”。面板甚至显示相应的联系人。来自心脏的电信号的放大器的输入P0.07。BLE模块本身的引脚排列是(从上到下):
  1. 地线
  2. Vdd
  3. P0.30
  4. P0.00
  5. P0.01
  6. P0.02
  7. P0.03
  8. P0.04
  9. P0.05
  10. P0.06
  11. P0.07
  12. P0.08

SDK包含许多足以编写您自己的固件的示例。该芯片已经很旧了,其SDK也已经过时,版本为10。使用它们,在心率监测器上提高了BLE服务:设备信息,电池服务,心率。已为ANT +添加HeartRate配置文件。我们使用计时器测量RR间隔,将数据发送到BLE和ANT +配置文件。为了在没有外部刺激的情况下(5秒内)节省电荷,心率监测器进入睡眠模式。当出现脉冲(输入中断)时,MK唤醒。在制造商的固件中,Kyto2809不断通过BLE传输广告数据包,即仅使用ANT +通道时,BLE继续发送数据包并耗尽电池电量。我将广告时间限制为5分钟,这应该会对盈利产生积极影响。
测试表明,对于“计算的心率”参数,最好引入滤波(故意丢弃不准确的数据,即低于30且高于240的脉冲)并以移动平均值进行平均。与下面的模拟心率监视器的最终比较。 RR间隔的测量差异为0-2 ms,这是完全可以接受的。


在有用的功能中,添加了更新OTA固件(原始名称DFU OTA)的功能。现在,已经缝制了OTA-bootloader,如果您想更改代码中的某些内容,就可以轻松更新固件。固件是通过智能实用程序nRFConnect从智能手机完成的。另外,如果我没记错的话,您可以在Android应用程序中提供OTA支持,这里有一些库。不幸的是,要将引导加载程序填充到内存中,您需要通过SWD连接,因为 OTA最初不是由制造商提供的。

固件顺序:

  1. 我们缝了SoftDevice310,它是BLE和ANT + Nordic的堆栈;
  2. 我们缝了Kyto_DFU_bootloader.hex(可以组装箱子);
  3. 通过nRFConnect填充完成的软件包kyto_hr_dfu.zip

最后两个文件在这里也有不带OTA的固件(KytoHR.hex)。

All Articles