作为医嘱手环,除了有手环的常规功能之外,还有和医院的互动功能:
◇心率、血氧监测使用MAX30102模块,算法是FFT快速傅里叶变换,同时心率、血氧信息会通过8266WiFi发送给上位机,在动态网页上实时显示。
◇RFID识别药品通过按键选择OLED屏幕上的“核验”功能进行核验,核验的过程分为核验RFID标签扇区密码,读取相应扇区存放的数据,再进行字符串对比。如果读出的字符串和手环内部设置的患者编号不同,LED红灯亮起,OLED显示“核验错误”,同时蜂鸣器进行报错,直到用户按下确定键。核验正确则亮绿灯,延时2s消失。同时核验记录会通过8266WiFi发送给上位机。注意:要先在RFID标签相应扇区里写入信息◇接收通知根据信息种类分成手术通知、服药提醒和请家属来手术室。当通过8266WiFi接受到不同字符串时,会在OLED屏幕上显示相应内容。
硬件组成
手环的全部芯片包括:
主控选择STM32F103VET6。手环所需IO口不多,所以主控换成C8T6也行。
通信选择8266WIFI是方便组网,基本手机开个热点就行,后期如果希望把上位机动态网页放在网络上,或者想在手机上做个相应的app,8266WiFi也更容易接入,注意要选3.3V供电的模块。
读写RFID标签使用的是MFRC522,相比于经典的RC522,在体积上缩小很多,但是其他包括指令、频率、时序都没发生变化,因为做的是手环(虽然现在做的比较丑),所以对使用模块大小是越小越好。RFID标签没使用自带的复旦M1卡,而是买了不干胶标签,方便黏在药瓶上。
血氧模块使用的MAX30102,是之所以选择MAX30102,是因为它是目前最普遍的血氧模块,接口简单,使用IIC,例程也很容易找。而pulsesensor需要先经过AD转换再进行计算。
程序一共设置了两个flag,一个是表示屏幕和目前所在时间的scflag位,另一个是rflag位,用于接收中断。
刚开始写的程序中,把scflag相应执行的程序放在主程序,中断只改变scflag值。主程序先判断scflag位,再执行相应程序,但是由于心率计算时间一般比较长,需要好几秒,经常会出现返回断点后要过两三秒才会出现相应画面。所以,后面把相应程序全部放在中断里。
点击可以放大上图是接收中断的函数,因为异步通信是一帧帧接收,所以为了防止在使用netassist调试时不小心按错字符发送,我规定了一个头“rv”,只有当前两位字符是“rv”,单片机才会将以下接收的四个字符存储在字符串里。四个字符接受完后,就选择执行相应命令,具体格式如下表。
后续项目升
医嘱手环的功能还可以更强大。有些疾病是可以通过连续性心率监测诊断,例如原发性高血压在初期和后期心率会有增加10~15%,那么通过长期的心率监测可以起到预警作用。另一个构想是添加一张sd卡,用来存储心率数据,然后将一个人长期以来的心率读出来,运用现在已经找到的一些心率模型,来判断是否具有某些疾病的心率特征。
要实现上述的功能,有个关键问题,max30102模块的测量数据是否符合目前疾病心率模型的标准,还待继续考量。