基于蓝牙通信的阅读视力检查仪设计
2019-07-25
(浙江工业大学 教育科学与技术学院,杭州 310023)
0 引言
国内外眼科领域目前一般使用阅读视力表来评估阅读能力。传统E字对数视力表使用字母“E”作为视标,而阅读视力表则一般使用不同印刷大小的文字作为视标,可以检查受测者适合阅读哪种印刷大小的文字,反应受测者进行日常阅读时所需要的功能性视力。临床上阅读视力检查可用来确定低视力患者近用助视器以及老视者配验老视眼镜时的配验参数[1];也用于比较低视力患者治疗前后阅读能力的变化,来评估视功能康复情况或手术效果[2-3],选用合适的阅读视力表,准确检查阅读视力,是眼科视功能检查、视觉康复等领域的需要[4]。
国外最流行的阅读视力表是明尼苏达连续文本阅读视力表,简称MNREAD[5];国内学者在MNREAD的基础上开发了C-READ中文对数阅读视力表等适用于中文本土阅读者的检查工具[1, 6-7]。但实际用于临床检查时,使用的均是纸质版本的阅读视力表,需要手工记录数据,检查效率低,且表存在光照度无法定量、文字难以逐行显示等问题。需要一种专门的检查仪器,优化检查流程,减少人工操作,自动记录分析数据,呈现直观的检查结果。除了上述功能需求,检查仪的主要实现难点在于显示最小视标所需像素密度(pixels per inch, ppi)远高于主流平板电脑或手机屏幕的像素密度;例如C-READ中文对数阅读视力表中,小数记录2.0视力对应的汉字视标高度约为0.29 mm,以一个汉字需要10*10的分辨率来计算,需要单位英寸像素点数达到874 ppi才能清晰显示。而主流平板电脑或手机屏幕的像素密度一般不超过350 ppi,小数记录视力、汉字视标高度和清晰显示所需ppi对应关系如表1所示。针对上述问题和难点,为满足正常和低视力人群阅读视力检查的需要,本文基于STM8S105系列单片机,并配以BLE103蓝牙4.2模块、定制段式液晶显示模块和手机控制App设计了阅读视力检查仪。优化数据收集效率的同时,也保证了文字视标显示的清晰度。理论上本仪器可以通过定制来适用于多种临床阅读测验。但本设计以C-READ中文阅读视力测验[7]为例,更好的适用于简体中文阅读者,以检验本仪器的有效性。
表1 小数记录视力与汉字视标大小对应表
1 阅读视力检查仪的总体设计
阅读视力检查仪总体结构框图如图1所示,由硬件端和上位手机App端两部分组成。其中硬件端由STM8主控单片机、蓝牙4.2透传模块、定制段式液晶显示模块和电源组成,手机App端的功能主要包括通过蓝牙对单片机发送指令,通过语音识别判断受测者阅读内容正误,记录阅读数据和呈现分析结果。STM8单片机是硬件部分的主控核心,连接蓝牙4.2透传模块对上位手机App端发送的数据进行解析,并驱动段式液晶模块;段式液晶模块是通过曝光、显影、蚀刻、固化等高精度工艺将每行特定大小的文字与段位一一对应,在单片机驱动下达到文字显示或不显示的效果;电源采用四节五号干电池,通过稳压电路分别给单片机、蓝牙模块和液晶模块供电。使用本仪器进行阅读视力检查时,首先打开阅读视力检查仪电源,使检查仪的单片机上电,唤醒蓝牙模块进入广播状态持续监听指令;再由医生打开手机App连接检查仪,并将控制指令通过蓝牙串口发送至检查仪的单片机模块;接着定制液晶模块在单片机的驱动下显示屏幕上特定的汉字或符号,患者阅读屏幕上出现的句子,手机App通过语音识别等方式记录检查数据;最终收集多组患者数据,形成检查结果图表。该仪器减少了人工成本,简化了操作流程,且具有显示效果清晰、数据记录完整、功耗低等特点。
图1 阅读视力检查仪总体结构图
2 硬件设计
2.1 主控模块
主控模块是整个阅读视力检查仪硬件的控制中心,负责与蓝牙模块进行数据交换,解析控制参数,驱动段式液晶面板显示。本文使用STM8S105K6T6C单片机为阅读视力检查系统主控芯片。它是意法低功耗8位单片机,最高内置32K闪存,嵌入130nm非易失性存储器,提供EEPROM数据写入操作,可达30万次擦写极限。片内集成10位ADC、UART、SPI、I2C等多个外设接口。可以满足本设计控制系统功能的全部需求。PD6和PD5两个引脚与蓝牙模块的UART_TX、UART_RX相连,实现与蓝牙的UART通信。PD7连接蓝牙模块的RST位,是用于控制蓝牙复位的引脚。PD4连接蓝牙模块的WU位,用于蓝牙低功耗唤醒。单片机与段式液晶模块之间的通过引脚模拟特定的串行输入信号进行通信,其中PC7连接液晶模块的LCD_DATA串行数据输入引脚,PC6连接LCD_CL1时钟信号引脚1,PCPC5连接LCD_CL2时钟信号引脚2,PD0用于控制LCD的背光强度,通过以不同占空比PWM驱动三极管将液晶模块的背光负极间隙接通来达到控制亮度的需求。SWIM作为调试模块接口,NRST作为复位接口。主控电路设计如图2所示。
2.2 蓝牙模块
蓝牙模块是实现单片机与上位控制App之间通讯的关键。本设计选用目前主流的蓝牙4.2解决方案,使用BLE 103 芯片,发射功率-19 dBm至+8 dBm,接收灵敏度-78 dBm。工作电压1.7 V-3.6 V。具有超低功耗、体积小、性能稳定可靠等优点[8]。通过蓝牙透传的工作方式传输数据,可以不对单片机与手机App之间传输的数据进行任何协议封装上的处理,可以自己控制数据包的大小,只是将串口连接在单片机上,简化了蓝牙通讯的过程。BLE 103通过UART_TX、UART_RX引脚与单片机之间进行数据传输。蓝牙模块电路原理图如图3所示。
图3 BLE103蓝牙模块原理图
2.3 液晶显示模块
液晶是一种介于液体和晶体之间的物质,液晶本身是不会发光,它可以通过电流来控制光纤的穿透度,从而显示出图像,按显示方式分类有正显、负显,偏光片具有全透、半透模式。液晶显示模块是阅读视力检查仪设计的难点,普通笔段式液晶只能以较低的分辨率显示数字和部分字母,要高清晰度显示阅读视力表的内容,则需要定制段式液晶模块。本设计正是采用了一种定制式的液晶模块,该模块由段式液晶显示屏幕、2个NT7063驱动IC、LED背光源和外部连接端口等组成。液晶显示屏幕前制程采用高精度烙板,通过曝光、显影、蚀刻、固化等工艺将所要显示的汉字及符号固定在指定的位置。线宽、线距可以精度可达10 μm,笔段理论形变量在1 μm以内,具备清晰显示中文阅读视力表最小视标的能力。由于阅读视力表的内容需要长时间显示,适用于引线总数较少的情况[9],故采用静态正显驱动,占空比1/1,偏压1/1。偏光片采用全透模式。NT7063驱动模块一共有1个COM端,包括GND、VDD、DATA、CL1、CL2、M、BL+、BL-几个引脚接口,其中每行中文句子为一个段落,与122个SEG端一一对应相连。工作时,LCD驱动模块与主控单片机通过DATA、CL1、CL2几个接口进行SPI通信,接收从单片机输入的数据字符串,驱动模块再将字符串输入LCD显示存储寄存器,就可以控制相映射段码的显示状态。通过手机App上位控制,每次只改变一个段落的显示状态,就可以达到句子逐行显示的效果。BL+,BL-是LED背光源的接口。电路原理如图4所示。
图4 液晶显示模块电路原理图
3 软件设计
3.1 单片机主程序设计
单片机主程序流程图如图5所示。采用外部事件中断模式,上电后先初始化,然后进入低功耗模式,等待外部事件(接收到来自手机App的指令)中断唤醒。处理完该事件后,单片机继续进入低功耗模式。
数据传输是手机App与单片机直接能以一种可靠的方式进行数据交换的重要环节,因此两者直接需要以一定的数据格式进行数据的打包和解码操作。根据本设计的需要,制定了如表2的数据收发格式。
表2 数据收发格式
图5 单片机主程序流程图
单片机首先根据从蓝牙模块转发来的数据长度找到校验符,对整条数据进行校验,再确认数据正确后对命令字进行判断,根据命令字的内容对控制数据做不同方式的解析,从而提取最终的控制数据来控制液晶屏段落的点亮和背光强度的控制。
3.2 手机App程序设计
由于微信小程序(以下简称小程序)具有跨机型的适配功能和完整的开发框架,可以调用蓝牙API接口实现与蓝牙设备的数据传输[10],同时也可以调用语音识别接口实现语音的听写[11]。本文采用微信小程序v1.02开发上位控制手机App(以下简称小程序)。小程序主要功能包括:通过蓝牙命令收发数据,控制屏幕句子逐行显示,调节背光强度,语音识别阅读内容,收集分析阅读数据。
小程序通过调用手机蓝牙功能建立与单片机之间的蓝牙通讯是实现上述功能、保证检查仪屏幕正常显示的关键。小程序启动后,会直接查询已经记忆MAC地址的蓝牙设备,如果没有已存在的记忆地址,或无法跟已记忆的建立连接,则进入匹配状态,查询附近处于广播状态的蓝牙设备,获取并解析其特征值。鉴权成功后,订阅该设备以建立连接状态,同时小程序还会记忆该蓝牙设备的MAC地址,以便下一次连接时直接访问。连接成功的小程序将会一直处于监听状态。当操作小程序开始进行阅读视力检查时,小程序按照表2格式,对需要显示的液晶字符段落、背光强度等控制信息进行整合之后调用蓝牙通讯接口API将数据发送给蓝牙模块,蓝牙模块在接收到数据后将数据转发给单片机,单片机将段码映射表中相应的字符数值传输并写入检查仪上的LCD显示储存器中,控制检查仪逐行显示相应的段落的文字显示。小程序与单片机之间建立蓝牙通讯的逻辑流程图如图6所示。
图6 小程序蓝牙通讯流程图
小程序总体流程图如图7所示。程序启动后,首先通过蓝牙配对连接阅读视力检查仪,然后医生选择相应的检查项目,开始对患者阅读视力检查。检查中,要求受测者要又快又准地阅读文字,当一行句子出现时程序便开始计时,受测者停止阅读时结束计时,程序通过调用语音识别接口听写阅读内容,以判断受测者本行阅读正确字数,医生也可以手动修改正确字数,或者手动停止计时,防止语音识别误判。小程序每一次发送控制句子显示的指令时,只会开关一行句子的显示,以达到逐行显示的效果。若受测者报告完全无法看清屏幕上显示的文字,该次检查结束,程序会分析数据,生成结果图表,并将结果表单及患者信息等发送至后台服务器储存。阅读视力检查仪处于闲置待机状态时,小程序还可以通过背光控制按钮调节背光亮度以节省电量。
图7 小程序总体流程图
4 测试结果与分析
本设计尺寸结构紧凑,长宽高分别为25 cm,20 cm,3.5 cm。小数记录2.0视力对应的中文汉字视标在日本PEAK带刻度15倍放大镜下可以清晰显示,没有锯齿或污点,笔段形变量小与1 μm,位置误差小与5 μm。LED背光源的平均亮度约为300 cd/m2,达到阅读视力表100 cd/m2以上的要求。本设计外观如图8所示,在15倍放大镜下显示效果如图9所示。其中“她们在身后留下坚实的脚印”、“我们都来画一画家乡的景物”、“队员们脱去了厚厚的防寒服”分别对应小数记录视力1.25,1.6,2.0下的视标。小程序部分界面截图如图10所示。其中图10(a)是小程序主界面截图,从上到下依次是别光亮度调节按钮,用户名输入框,阅读视力表类型选择按钮,开始按钮,蓝牙连接按钮,近视力表展示按钮,ABC表展示按钮。图10(b)是进行阅读视力检查过程中的页面截图,由上到下依次是倒计时框,指导语,计时器,手动停止按钮,错误个数选择框,以及提交按钮。图10(c)是结束当前检查后,结果呈现页面的截图。包含检查结果折线图以及完成每个句子时记录的错误个数,阅读时间等数据。
图8 阅读视力检查仪实物图
图10 小程序部分程序界面
图9 十五倍放大镜下最小汉字视标
20名18~25岁视力正常的在校大学生在知情同意的前提下自愿参加了阅读视力检查测试。测试前,先对每位大学生进行了裸眼或矫正视力检查,20名学生裸眼或矫正视力均在4.6~5.0之间,无眼科病史。阅读视力表具有ABC 3种平行测验,每位学生都以随机的顺序进行了测试,以排除练习效应带来的影响。且在前一张视力表测试完,下一张视力表测试开始前会给每位学生2分钟的放松时间,缓解眼部疲劳,以排除疲劳效应对实验结果的影响。受测者的数据以:“编号-年龄-性别-视力-句子编号-对应尺寸-错误个数-阅读时间-阅读个数”的格式进行收集,使用SPSS软件分析结果如下表3所示。
表3 阅读视力检查表ABC的相关性
数据分析结果显示,表A与表B之间的相关系数高0.817,表A与表C之间的系数为0.794,表B与表C之间的相关系数为0.791,三张表格之间的测试结果均为高相关。表明仪器的数据记录稳定可靠,符合检查标准。3个平行测验的一致性信度高。
5 结束语
阅读视力检查仪硬件结构简单,采用极高分辨率的定制段式液晶显示模块,显示效果良好;基于蓝牙通信和手机APP对中文阅读视力表进行控制,具有测试方便、自动分析检查结果等齐全的功能。且产品的适用性强,具有较大的拓展空间,将来可以用于繁体中文、英文以及其他语言版本的阅读视力自动检查。测试结果表明,符合视力检查标准、达到设计开发要求。为普通人和低视力患者的阅读视力检查提 供了准确且方便快捷的途径,具有向医院和普通家庭推广的良好前景。本研究仍有一定的欠缺,将来进一步研究可以聚焦于收集正常视力人群和低视力人群的阅读视力数据常模,在视力疾病早期筛查,视力康复治疗领域的效果比较方面具有良好的推广前景。