基于蓝牙5.0的智能开关机系统设计*
2020-05-07任志敏李长旺
任志敏,李长旺
(常州纺织服装职业技术学院,江苏 常州 213164)
0 引言
目前,家中的各种电器设备众多,既有电灯、电视机、电扇等传统电器,也有扫地机器人、蓝牙功放等新设备,不管是哪种电器,开关机的方式无非就是三种,一是传统的机械开关;二是遥控器开关;三是通过手机端APP实现开关机。从中不难发现,机械开关需要人体直接接触,遥控器和APP虽然增加了便利性,比起机械开关方式进步了很多,但是还需要人为操作干预,三种开关机方式都未能做到真正的智能化自主开关机。
传感器技术的发展,使得我们可以较为方便地随时随地获取人体的心率数据。本课题设计了一个系统,在人体进入睡眠状态后,自主关闭电灯等家用电器,人体开始苏醒时,自主打开相关家用电器和设备。
1 总体设计
通过研究发现,获取心率数据的有效方案主要有以下三种。
方案一是使用摄像头拍摄人体手指等部位,把采集的视频信息进行数字化处理,分析视频信息的颜色变化,经过一系列的处理获取心率数据[1]。
方案二是ECG(Electrocardiograph)[2],ECG的典型应用就是医院的心电图,其优点是测量数据精确,缺点是需要较多测量装置,体积较大,不易佩戴。
方案三是PPG(Photoplethysmography)[3]。PPG指的是光电容积脉搏波描记法。血管中的血液流动会受到心脏搏动影响,而产生周期性活动,形成血压呈周期性变化,在充满弹性的血管中因为连续的压力变化,因而造成血管的截面管径会因此而改变血管直径大小,这种血管变化亦会造成血压在变化上呈现连续的状态[4]。PPG测量脉搏就是基于以上基础,采用LED和光电探测器,LED一般向血管发射绿色光,有部分发射光被吸收,还有一部分光被反射或透射,被光接收器接收,其工作原理如图1所示。
图1 反射式光电探测器工作原理图
PPG的典型应用是现在的运动手环或手表,其优点是体积较小,携带方便,易于佩戴,缺点是较之ECG方案心率数据精确性稍低。
经过研究比较现有的三种方案后发现,方案一操作起来比较麻烦,而且需要使用摄像头,需处理的数据量较大。方案二也不适合本课题,显然不可能在人体睡眠时佩戴各种电极装置,因此,排除方案一和二。方案三的装置倒是合适的,但是现有的运动手环或手表仅仅局限于测量心率,数据通过蓝牙传输至手机APP端显示,用户仅仅能读取心率数据,了解自己身体状况,无法有效利用数据。因为大多数该类型APP程序并未公开源码,用户无法对其数据进行二次处理。
为此,我们提出了本课题的方案,借鉴方案二的一些优点,摒弃其局限性。本课题总体设计方案如图2所示。
图2 总体设计方案图
从图2中可以看出,系统一共由四部分组成,分别是①心率采集处理装置S(以下简称为装置S);②开关机命令接收执行装置R(以下简称为装置R);③PC端上位机处理程序(以下简称PC端程序);④手机或平板设备处理程序(以下简称手机端程序)。其中装置S处于整个系统的核心地位,负责心率数据采集,处理,学习,判断,基于数据判断情况通过无线模块发出开关机命令。
2 硬件设计
根据总体设计方案,选择低功耗蓝牙无线传输方式,分别设计了心率数据采集模块,无线模块电路,装置S主板电路,装置R主板等电路。
2.1 心率数据采集模块设计
如前文所述,采用PPG方式获取心率数据。心率数据采集模块主要由环境光传感器APDS-9008,绿色光源发光二极管AM2520ZGC09和运放MCP6001组成。共引出三个引脚,分别是电源VCC,电源地GND和信号SIGNAL。
2.2 无线模块电路设计
nRF52832是Nordic公司推出的一款支持BLE(Bluetooth4.0 low energy)的嵌入式微控制器[9]。它是一款为超低功耗无线应用ULP(Ultra Low Power)打造的多协议单芯片解决方案。nRF52832整合了Nordic一流的无线收发器,一个ARM Cortex-M4内核以及512KB的Flash+64KB的RAM,其支持BLE和专用2.4GHz协议栈。nRF52832有丰富的外设接口,包括31个灵活可配置的通用输入输出引脚,支持SPI/TWI/UART等串行通信,支持10bit ADC模数转换,最高工作主频达64 MHz。
从中我们不难发现,nRF52832既支持低功耗蓝牙BLE5.0,即支持主从一体模式,又采用32位ARM Cortex-M4内核,不管是从运行速度还是蓝牙支持方面都符合本课题的设计需求。因此,nRF52832作为装置S和R的核心微控制器,用于核心板的设计,如图3所示。
图3 无线模块nRF52832原理图
3 软件设计
3.1 双缓冲PPI通道模数转换
nRF52832基于Cortex-M4内核设计,内部设置了PPI(Programmable Peripheral Interconnect)可编程外设接口,功能上PPI和DMA(Direct Memory Access)直接存储访问有些类似。PPI通道使得外设可以通过PPI自动连接任务和事件,不需要CPU参与,可以有效降低功耗,提高处理器效率。PPI一端连接的是事件端点(EEP),另外一端连接的是任务端点(TEP)。因此PPI可以通过一个外设上发生的事件自动触发另一个外设上的任务。首先外设事件需要通过与事件相关的寄存器地址连接到一个事件端点,另一端外设任务事件也需要通过此任务相关的任务寄存器地址连接到任务端点,当两端连接好后就可以通过PPI自动触发了。
为了保证心率采集数据的准确性、稳定性和可靠性,本课题把心率采集模块的Signal信号输出口与P0.31引脚模拟输入通道7相连,配置为单通道输入方式,采样精度为10位,参考电压为内部0.6V。采用连续转换模式(continuous mode),连续采样模式能够通过内部定时器实现定时采样,或者触发任务通过PPI连接一个通用寄存器来实现。为了提高转换效率,本课题采用精确的1/16 MHz定时器通过PPI启动的双缓冲中断采样模式,把启动ADC采样事件的任务交给定时器和PPI通道来完成,CPU不需要参与。
基于以上分析,本课题采用PPI通道双缓冲采集数据步骤为:
Step1:SAADC初始化,设置ADC转换通道为NRF_SAADC_INPUT_AIN7,配置好SAADC转换回调函数,设置双缓冲数组。
Step2:配置好定时器事件和PPI触发通道,定时时间为2ms。
Step3:使能PPI触发通道,等待SAADC采用完成触发中断,调用回调函数。
其中Step1中设置双缓冲数据传输机制,通过设置2个缓冲数组,启动采样后数据依次进入缓冲数组1和缓冲数组2,当两个数组内都有数据就会触发中断事件发生,中断后输出缓冲数组2的内容。数据流向如图4所示。
图4 双缓冲数据传输流程图
设置双缓冲机制的好处是显而易见的,心率数据采集为2ms一次,双缓冲可以保证有足够的时间处理心率数据,避免前后心率数据覆盖。
3.2 处理心率数据触发开关机算法设计
为了实现通过心率数据,特别是BPM值准确判断人体状态的目的,本课题研究了几种方案。方案一是设定两个BPM阈值,比如70和75,即若监测500次BPM值,平均值低于74,认为人体进入睡眠状态;若平均值位于70~75之间,认为人体开始进入苏醒状态。方案二是监测心率变化的状态,即从BPM曲线看,曲线趋势是下降的,认为人体进入睡眠状态;曲线趋势是高低不平的,认为人体是日常活动状态;曲线趋势是上升的,认为人体开始进入苏醒状态。经过实验表明,方案一的BPM阈值设定不是一件容易的事情,因为BPM与每个个体相关。方案二曲线趋势变化,当人体进入睡眠状态,曲线趋势也是有高有低的。考虑到以上两种方案的劣势,本课题研究了第三种方案,步骤是:
Step1:首先学习人体在不同状态时的BPM值,比如人体在22:00开始睡觉,与此同时开始监测BPM值,设定监测时间,可以是30 min,45 min,60 min等,统计这段时间内人体的BPM平均值;其次,持续监测人体在睡眠状态时的BPM值,直到人体开始进入苏醒状态的时刻,每隔1 h计算一次平均BPM值,通过这些平均BPM值可以较好判断人体到底处于哪种状态,这些学习经验值存入装置S的EEPROM存储器。
Step2:关机判断算法。有了Step1的人体状态经验数据,接下来就可以通过其做出判断和决策了。关机判断程序算法如图5所示,算法描述中使用的相关变量描述见表1。
表1 关机判断程序相关变量描述
从图5中可以看出,从某个时间点开始,持续监测人体心率BPM,并作计数,每个BPM与用户设定的myThresh值与经验学习的人体进入睡眠状态BPM平均值AVE比较大小,分别计数小于次数countd和大于次数countu,共监测500次BPM作为一组,若计数countd多余countu,则认为人体进入睡眠状态,发出关机命令,否则继续进入下一个500次BPM数据的比较。开机判断算法与关机算法类似,在此不再赘述。
3.3 PC端上位机程序设计
PC端通过串口与装置S相连,本课题设计的PC端上位机实现两大任务,一是直观显示心率曲线,二是设定心率学习参数,比如设定心率学习时间段,设定阈值等,用于测试装置S心率学习、判断、决策、指挥的功能能否顺利实现[5]。上位机程序运行图如图6所示。
图6 PC端上位机程序运行图