ANT+ 之【心率传感器设计】【上】

“Don‘t ever underestimate the heart of a champion.”  ——Rudy Tomjanovich

对于这句堪称Clutch City精神写照的话,我却也有着另一方面的理解。

那么便是:对于专业运动训练来讲,心率表真的是最最重要的辅助设备没有之一了。

这次写的主题就是心率传感器(HRM,HeartRateMonitor)。

一、回顾ANT+

  之前的文章中提到了ANT官方对于多种不同类型的传感应用,专门制定了一套设计规范,那就是【ANT+】。

  ANT+是基于ANT技术的一种受控网络(managed network)。它对特定类型的传感器,以及相应的接收终端的设计都给出了标准化的规范与定义。这样做的好处不言而喻----最大限度地保证了不同制造商生产的ANT产品都能具有良好的互操作性、兼容性。而这一点对于建立一个强大的ANT终端生态链无疑是至关重要的。

  本文以最常见的心率检测应用为例,介绍ANT+的心率传感器设计规范。(不含心率接收终端)

二、ANT+心率传感应用

  可以说心率监测应用是ANT技术表现最出色的领域之一,尤其是在面临BLE等技术的有利竞争时,ANT凭借其优良的性能表现,牢牢坚守着相当比例的市场份额。典型的ANT+心率监测应用如下图所示。

  在一个ANT通道中,传感器仅作为数据发送者,将采集到的心率数据发送至接收终端。接收终端往往是具有屏幕、及存储器的设备,负责将接收到的信息进行处理并显示。

  传输的数据具有两种数据页格式,Main Data Pages和Background Data Pages。数据传输的频率固定为4Hz

三、通道配置

  之前介绍过ANT通道配置的基本参数,在一个ANT+网络中,对于特定的应用,其通道配置参数都各不相同。HRM设备类型参数则专门定义为120(0x78)。RF频率被限定为2.457GHz上。我们知道2.4GHz的ISM频段,其范围通常是2.4~2.483GHz,例如802.11a/b/g/n协议族,而ANT可用的频段范围在2.400~2.524GHz之间,略大于前者。实际上,考虑到ANT的TDMA特性,并没有必要对于每个通道配置不同的RF频率。

  通道参数 Transmitter Receiver
网络key ANT+ key ANT+ key
RF 频率 2.457GHz (0x39) 2.457GHz (0x39)
通道ID 设备ID 1-65535 0-1-65535 (0 用于配对)
设备类型 120 (0x78) 120 (0x78)
传输类型 1 (0x01) 0 (0x00用于配对)
  通道类型 0x10 (双向主通道)                        0x00 (双向从通道)
通道周期 8070 (4.06Hz) 8070-16140-32280 (4.06-2.03-1.02Hz)
数据类型 Broadcast Broadcast (可选Ack Burst)

四、数据页格式

  ANT+为HRM定义了2类共5种Data Page格式。各个Page之间即包含共有信息,也包含专有信息。

Main Data Page:

      page0,为简单的心率显示终端(如跑步机)提供无需计算或存储,可直接送显的实时心率,属于“万金油”类型数据。

      page4,最常用的格式数据。包含了前后两次心跳发生的时间差,为计算实时心室搏动间距R-R Interval提供了可能。

Background Data Page:

      page1,传感器累计工作时间,用于记录传感器的电池消耗状况。终端借此实现低电量警示功能。

      page2,OEM生产商ID信息,需要向Nordic交钱申请。

      page3,OEM制造商ID信息。

根据其作用的不同,各个page的发送周期也必然不同。Main类的数据发送频率为4Hz,而Background的信息因为相对没那么重要,其数据发送频率为每65个page发送一次。

PS:接收端可以选择以1~2~4Hz为频率接收数据,响应地会带来功耗以及数据刷新率的改变,需要特别考虑。

  byte 0 byte 1 byte 2 byte 3 byte 4 byte 5 byte 6 byte 7
page 0 0x00/0x80
0xFF

并没有什么卵用


当次心跳时间

0~64s循环计数

步长1/1024s

LSB------MSB


心跳累计

0~255

循环


瞬时心率

1-255

bpm

0x00无效

page 4 0x04/0x84
制造商自定义

接收端不解读


前次心跳时间

0~64s循环计数

步长1/1024s

LSB------MSB

page 1 0x01/0x81
0~0xFFFFFF

上电计数,用于记录电池使用时间

每2s+1,MAX 9320h

page 2 0x02/0x82 制造商ID 设备ID扩展字段
page 3 0x03/0x83 硬件版本号 软件版本号 模块版本号

在Byte 0中有一个toggle bits,其作用在于:当前后消息相同,即心率低于数据发送速率时,用以提醒接收端新消息的到来。

另外值得一提的是,使用page4相比“万金油”page0的优势在于,利用前后两次心跳的时间间隔计算心率,比直接得到的瞬时心率更加稳定可靠。所以绝大多数现有ANT+HRM都是使用page4来传输数据。 

最后还有一点,对于开发者,制造商ID可设置为0xFF。

好了,ANT+的心率传感器设计规范到此就介绍完了。并没有很复杂的样子~ ANT毕竟还算是个developer friendly的协议嘛~

下次将介绍心率传感器应用层相关的一些开发。JUST HRBEAT iT。;)

时间: 2024-10-15 04:29:24

ANT+ 之【心率传感器设计】【上】的相关文章

ANT+ 之【心率传感器设计】【下】

好久不见!!最近的几个月发生了不少事情,导致精力极度分散,自己todolist上各个项目的优先级不停地被调整,博客的事情就被暂时搁置了下来,特别是__AW君__的出现,让自己突然有了一种说不出来的感觉……唔,果然love is blind没错,所幸自己毕竟是一个天生乐观的人,接下来的剧情我会用心去体验的~ 让我们永远相信美好的事情即将发生吧! /****************************************************************************

【AllJoyn专题】基于AllJoyn和Yeelink的传感器数据上传与指令下行的研究

笔者接触高通物联网框架AllJoyn不太久,但确是被深深地吸引了.在我看来,促进我深入学习的原因有三点:一.AllJoyn开源,对开源的软硬件总会有种莫名的喜爱,尽管也许不会都深入下去:二.顺应潮流,物联网虽远未普及,但已是大势所趋,高通公司在领域布局,致力于打造舒适高效的智能家居场景,推出AllJoyn软件框架,适应了发展趋势:三.文档丰富,开源软件的使用,特别是框架,若没有文档相助,相信没有多少开发者愿意尝试,AllJoyn在这方面做得不错,日后还需做得更好.当然啦,也有些额外原因,包括高通

C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入

前言:今天十一长假的第一天,本因出去走走,奈何博主最大的乐趣是假期坐在电脑前看各处堵车,顺便写写博客,有点收获也是好的.关于MEF的知识,之前已经分享过三篇,为什么有今天这篇?是因为昨天分享领域服务的时候,用到MEF的注入有参构造函数的方法,博主好奇心重,打算稍微深挖一下,这篇来对此知识点做个总结. 还是将前面三篇的目录列出来,对MEF没有了解的朋友,可以先看看: C#进阶系列——MEF实现设计上的“松耦合”(一) C#进阶系列——MEF实现设计上的“松耦合”(二) C#进阶系列——MEF实现设

MEF实现设计上的“松耦合”

C#进阶系列——MEF实现设计上的“松耦合”(二) 前言:前篇 C#进阶系列——MEF实现设计上的“松耦合”(一) 介绍了下MEF的基础用法,让我们对MEF有了一个抽象的认识.当然MEF的用法可能不限于此,比如MEF的目录服务.目录筛选.重组部件等高级应用在这里就不做过多讲解,因为博主觉得这些用法只有在某些特定的环境下面才会用到,着实不太普遍,感觉没有钻下去的必要.如果你有兴趣也可以去了解下.这篇打算将MEF和仓储模式结合起来谈谈MEF在项目中的使用. 1.仓储模式:也叫Repository模式

Apache Crunch的设计 (上)

背景 Apache Crunch是FlumeJava的实现,为不太方便直接开发和使用的MapReduce程序,开发一套MR流水线,具备数据表示模型,提供基础原语和高级原语,根据底层执行引擎对MR Job的执行进行优化.从分布式计算角度看,Crunch提供的许多计算原语,可以在Spark.Hive.Pig等地方找到很多相似之处,而本身的数据读写,序列化处理,分组.排序.聚合的实现,类似MapReduce各阶段的拆分都可以在Hadoop里找到影子. 本文介绍Crunch在数据表示模型.操作原语.序列

全心全意为人民服务体现在我们软件设计上

我们这里管理是用的今目标平台,这个平台的网页端效果也在慢慢进步.但另我感触最深的是他们对用户需求的挖掘. 这也是我们系统上线后引发的思考:用户是否喜欢你的软件,不是取决于你的软件技术多么牛B,架构多么先进,而是你是否抓住了他们的心. 我们是为某公司做一个员工打分系统,当上线后,发现了下几个问题: 1.用户进来后不知道干嘛 2.打分的选项之间没有区别,很容易眼花 3.打过分和没有打过分的选项也没有区别 4.打完分之后,员工会问你,我打完分了,然后干嘛,这也是我们的失误 现在来看上面的几条,有哪条是

C#进阶系列——MEF实现设计上的“松耦合”(二)

前言:前篇 C#进阶系列——MEF实现设计上的“松耦合”(一) 介绍了下MEF的基础用法,让我们对MEF有了一个抽象的认识.当然MEF的用法可能不限于此,比如MEF的目录服务.目录筛选.重组部件等高级应用在这里就不做过多讲解,因为博主觉得这些用法只有在某些特定的环境下面才会用到,着实不太普遍,感觉没有钻下去的必要.如果你有兴趣也可以去了解下.这篇打算将MEF和仓储模式结合起来谈谈MEF在项目中的使用. 1.仓储模式:也叫Repository模式.Repository是一个独立的层,介于领域层与数

云上树莓派(2):将传感器数据上传到 AWS IoT 并利用Kibana进行展示

云上树莓派(1):环境准备 云上树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 1. 传感器安装及配置 1.1 DHT22 安装 DHT22 是一款温度与湿度传感器,它有3个针脚,左边的第一个引脚(#1)为3-5V电源,第二个引脚(#2)连接到数据输入引脚,最右边的引脚(#4)接地. 而树莓派3B 一共有40个针脚(GPIO,General Purpose I/O Ports,通用输入/输出端口),只需要将传感器的3个引脚接入板子上的合适引脚即可.我的连接是 1 -

面试挂在了 LRU 缓存算法设计上

好吧,有人可能觉得我标题党了,但我想告诉你们的是,前阵子面试确实挂在了 RLU 缓存算法的设计上了.当时做题的时候,自己想的太多了,感觉设计一个 LRU(Least recently used) 缓存算法,不会这么简单啊,于是理解错了题意(我也是服了,还能理解成这样,,,,),自己一波操作写了好多代码,后来卡住了,再去仔细看题,发现自己应该是理解错了,就是这么简单,设计一个 LRU 缓存算法. 不过这时时间就很紧了,按道理如果你真的对这个算法很熟,十分钟就能写出来了,但是,自己虽然理解 LRU