基于Linux的嵌入式智能止鼾枕系统的设计与实现
2024-04-03郭焰芳吴建雄陈健锋张伟
郭焰芳 吴建雄 陈健锋 张伟
关键词:Linux技术;鼾声监测技术;RK3308;OTA;止鼾枕
0 引言
睡眠是人类生活的重要组成部分,充足的睡眠可以让人们拥有更好的精神状态,是国际公认的健康标准之一[1-2]。打鼾是阻塞性睡眠呼吸暂停的主要症状[3],是由于松弛的组织阻塞气道导致的,不仅影响自身的睡眠质量还会影响他人[4],是高血压、心脑血管等疾病的诱因[5]。智能止鼾枕是集鼾声监测和鼾声干预于一体的智能设备,可以在一定程度上改善单纯鼾症患者的打鼾情况[6]。然而,不同的智能止鼾枕设计方案,其实现功能、系统配置和通信方式不尽相同,因此,进行止鼾枕的创新性设计变得至关重要[7]。
王兴宇等人采用YQ5969SAFY语音识别模块对接收到的声音信号进行滤波处理,利用基于STM32F103嵌入式系统的实时频谱分析技术来识别鼾声,并利用闭环反馈控制技术来控制外围器件对枕头内部气囊的充放气,从而实现智能止鼾枕的设计[8]。宋亚明通过声音传感器采集声音数据,采用STM32F103C8T6嵌入式微处理器为系统的主控,进行音频信号端点检测和特征提取,进而识别出鼾声,并控制枕头气囊充放气[9]。王泽明采用驻极体话筒采集音频数据,以Arduino为主控,将接收到的枕边设备数据信息上传给计算机进行模型数据比对识别鼾声,进而控制枕头气囊充放气[10]。Zhang J等人利用脉搏血氧仪进行SpO2检测,并将信号发送到智能手机中的呼吸暂停检测和分类模块以判断是否发生呼吸暂停事件。随后,结果被发送到智能手机中的调整决策模块。如果需要调整,则会将包含预期调整参数的调整命令发送到枕头控制器,控制器控制相应的设备来调整枕头。完成枕头调整后,脉搏血氧仪继续检测SpO2信号,以评估调整的有效性,形成闭环反馈机制[11]。
针对以上问题,提出了Linux技术与鼾声监测技术相结合的方式构建智能止鼾枕系统软件核心,设计克服了现有智能止鼾枕实现方案的众多缺陷,利用Linux技术优势,可进行多任务多线程工作,通过OTA 的方式升级系统,更新鼾声监测算法和Linux上层应用,增加了系统的灵活性,方便后期维护。
1 智能止鼾枕系统简介
系统主要由外置监测硬件(下文称控制器)、枕头、云服务器和手机客户端四部分组成。该系统通过对用户的睡眠环境进行音频采集与分析,判断用户是否打鼾,根据用户的打鼾情况做出相应的止鼾策略,控制气泵对枕头内气囊进行充放气,调整用户的头部位置,达到止鼾的效果,并能通过手机客户端查看用户睡眠可视化数据,从而了解自己的睡眠情况,为后期睡眠问题诊断和治疗做重要的数据支撑[12]。智能止鼾枕系统结构图如图1所示。
以下是系统各组成部分的功能:
1) 控制器:系统的控制核心,是基于Linux操作系统的嵌入式应用开发,内置鼾声监测算法,具备环境音源采集、分析和控制气泵对枕头内气囊充放气等功能,可以与手机客户端、云服务器和枕头通信。控制器可以通过手机客户端进行BLE配网,并将本地睡眠数据通过Wi?Fi上传到云服务器进行存储。
2) 枕头:系统的执行端,可以与控制器进行双向BLE通信。枕头可以将感应到的压力数据实时传输给控制器,当用户躺下时,控制器结合压力数据进行综合判断,并打开鼾声监测算法进行鼾声监测,当监测到用户打鼾时,控制器发送BLE指令让枕头气囊鼓起,改变用户脖子俯仰角度,使呼吸道通暢,从而缓解打鼾症状。
3) 云服务器:系统的睡眠数据存储中心,可以与手机客户端和控制器通信。云服务器可以接收并存储控制器上传的睡眠数据,并接受手机客户端的网络数据请求。
4) 手机客户端:系统的睡眠数据可视化中心,可以与控制器和云服务器通信。手机客户端可以协助控制器完成BLE配网,主要负责从服务器拉取睡眠数据实现止鼾效果可视化。
2 系统硬件设计
智能止鼾枕系统的硬件核心包括控制器硬件和枕头端硬件。控制器硬件主要负责鼾声监测并协调整个系统的运作,枕头端硬件主要负责执行来自控制器的鼾声干预指令并将结果反馈给控制器。
2.1 控制器硬件设计
控制器搭载了Linux操作系统,控制器的上层应用和鼾声监测算法正是运行于Linux操作系统之上。采用瑞芯微的RK3308作为主控SoC(System on Chip,片上系统)芯片,其主要外设包括Wi?Fi+BT 模组、PDM数字麦克风、按键和指示灯等。控制器电路原理框图如图2所示:
各模块作用如下:1) Wi?Fi+BT模组提供控制器蓝牙和Wi?Fi通信功能;2) 麦克风提供控制器录音功能,使用两个PDM麦克风,在控制器开启鼾声监测算法的同时,录制双声道音频,通过音频分析结果做出相应的鼾声干预策略;3) 按键提供控制器与用户间的交互媒介;4) 指示灯包括枕头指示灯、Wi?Fi指示灯和档位指示灯,用于指示智能止鼾枕系统的工作状态,是用户与控制器交互的信息反馈媒介。
2.2 枕头端硬件设计
枕头端采用蓝牙MCU ATB1103L作为控制核心,其外设包括气泵、气阀和压力传感器等。气泵通过气管与进气阀相连,进气阀通过气管与气囊相连,气管中间连接排气阀。其中共有三个气囊放置于枕头的左、中、右。枕头端电路原理框图如图3所示:
枕头端压力传感器采用柔性薄膜压阻式位置传感器,分布在枕头的左、中、右,用于感应来自外界的压力,通过压力传感器数据判断用户是否在枕,并将在枕状态通过蓝牙信号实时地传输给控制器,提供控制器决策依据。在控制器向枕头端发送鼾声干预指令前,会先根据枕头端传来的压力传感数据判断用户的在枕位置信息,再将充放气指令连同充放气对象气囊ID发送给枕头端,当枕头端接收到控制器的止鼾干预指令时,枕头端控制中心通过控制气泵和气阀的开启和关闭对指定气囊ID进行充气和放气,实现止鼾干预的效果。
3 系统软件设计
3.1 控制器软件设计
控制器是基于Rockchip Buildroot Linux SDK 开发,而SDK的源代码编译需要搭建Linux交叉编译环境,使用Ubuntu 14.04.1进行源码编译。
在安装完Linux系统之后通过apt-get 指令安装Kernel、Uboot和Buildroot编译需要依赖的软件包。有了编译依赖之后就可以通过交叉编译工具链编译应用代码,其中U-Boot及Kernel使用的编译工具链预置目录在prebuilt/gcc下,buildroot使用该开源软件中编译出来的工具链。
为了方便代码的开发调试和交叉编译,通过搭建Samba服务器在Windows访问Linux服务器代码进行代码的修改编写,通过SecureCRT工具使用SSH2协议远程登录到Linux服务器进行交叉编译。
将编译生成的固件打包并烧写到控制器即完成控制器Linux运行环境的构建,在此基础上进行控制器上层应用的开发和调试。控制器上层应用软件创建了六个线程,分别是蓝牙事件处理线程、LED控制线程、按键事件监测线程、止鼾枕系统状态上报线程、网络判断线程和OTA升级线程。控制器整体软件流程如图4所示:
其中,控制器与枕头蓝牙通信以及信息处理是系统的软件核心。当控制器监测到用户在枕连续时间超过30分钟时,开启鼾声监测算法进行录音采集和音频分析,通过鼾声阈值判断所录制音频片段是否属于鼾声,以此确定是否为连续鼾声以及连续打鼾时长,针对不同的鼾声类型,给出相应的止鼾策略控制枕头进行充放气,针对鼾声干预后鼾声分贝等情况给出新的止鼾策略,形成闭环反馈机制。当用户离枕超过30 分钟,控制器关闭鼾声监测算法,并将睡眠数据通过Wi?Fi上传到云服务器。鼾声监测算法工作流程如图5所示:
3.2 枕头端软件设计
枕頭端作为蓝牙从设备仅与控制器建立连接进行实时数据传输,枕头端实时地将用户在枕状态、有无动作以及在枕的位置信息发送给控制器,控制器做出鼾声干预决策之后,向枕头端发送干预指令,指令内容包括充气持续时间、充气后停顿时间、放气持续时间和气囊标识ID,枕头端收到指令控制气泵和气阀的开关对气囊进行充放气操作,并将干预结果信息反馈给控制器。枕头端软件工作流程如图6所示:
3.3 手机客户端设计
手机客户端采用Android Studio Java语言编程,负责请求服务器数据实现数据的可视化以及协助控制器完成BLE配网。客户端配网流程如图7所示:
4 结束语
为有效缓解打鼾情况,本文设计了一种以Linux 技术和鼾声监测技术为核心的智能止鼾枕系统,该系统可以在用户出现打鼾现象的时候做出综合性的止鼾策略并进行物理止鼾干预,通过控制枕头中气泵对气囊进行充放气来改变用户的头部位置,达到止鼾的效果,并能通过手机客户端查看用户的睡眠情况,为阻塞性睡眠呼吸暂停的诊断和治疗做数据参考。系统支持Linux Recovery OTA升级方案,灵活性高且易于维护,解决了现有大部分止鼾枕只能利用函数中断去处理不同事件的缺陷。该系统可稳定运行且能够达到良好的止鼾效果和用户体验。设计方案对智能止鼾枕的相关研究有一定的参考价值。