使用STONE串口触摸屏的便携式监护仪,硬件部门决定采用NXP32位微处理器芯片作为整机监测、心电分析、控制中心,由ECG生物电采集放大右腿驱动、导入麻省理工心电数据库做算法,同时也监测SpO2传感器电信号、血压、呼吸电信号放大和滤波处理,通过高速率波特率通讯,驱动STONE串口屏实时显示波形和参数变化,并与参考做比较判断,对人体参数变化进行监督报警。如出现范围偏差,自动发出语音提示。

新改版的STONE串口触摸屏完美支持曲线描绘和显示,通讯协议简单、好记,单片机工程师看一遍使用手册就能用,命令集中有很多驱动实例,直接拷贝了修改名称和参数就能用。串口连接简单,可以使用官方提供的转接板,不管是串口直连、还是USB转串口,都很方便好用。 本监护仪同时显示多组生命参数,特别是3条曲线同时动态绘制、显示非常流畅,应该还能同时绘制更多组的曲线图形,大家可以根据需要尝试。当然,指令集中曲线功能有多条数据同时推送的示例,但是实际使用时目前硬件没有响应,希望官方能尽快优化。也可能通过更新固件来解决。本次新版绘制曲线功能,我首先尝试也是怎么也调不出来,最后得知串口屏有新的固件,刷了新固件才看到“庐山真面目”。看到刷过固件的串口屏走出来的流畅ECG曲线,心情那个畅快,呵呵......

本项目设计图片如图(1)。   界面基于STWI101WT-01串口屏,分辨率1024*600,左边显示2/3显示波形曲线,右边1/3显示数值。

本文将重点记述曲线chart view的制作和描绘。完全按照项目演示的制作过程记述,没有整理分类,或许你觉得凌乱,但确实现实开发的真实过程。

先决定搞定ECG的曲线描绘。

图(1)项目设计预期界面

本演示模拟75bpm心率,相当于800ms一次心跳,即每40ms一个点,每20个点一个周期,基于整个chart  view控件X axis轴分成100等分,每一屏4s波形,屏幕刷新率25Hz,看起来非常流畅。本chart  view控件的line series元素设置smooth = falseECG波形尖锐),下方包络不显示,点标记也不显示。Capacity = 110,这里因为X axis min = 0max =100,如果capacity小于100,将只能显示部分X axis区域。这里见图(4),Y axis min = 0max =140,程序中最大给值到130,幅度就比较满。其他参数请参见图(2--图(7),chart view1及其元素X axis1Yaxis2bar series1line series1的参数设置都有。我们对chart view控件的bg color选择透明rgba0,0,0,0),可以露出底色(黑),其他控件比如view,也是一样的特性。

图(2)chart view1的属性设置                       图(3)chart view1的X axis1属性设置

图(4)chart view1的Y axis1属性设置

图(5)chart view1的bar series1属性设置

图(6)chart view1的line series1属性设置1   图(7)chart view1的line series1属性设置2

按照上述设置,模拟ECG波形(75bpm)编程代码如下:

先定义两个变量,如下。

Int num19_1 = 0;

Int num19_2 = 0;

再一般在主循环main.c中,通过下述代码,实现ECG曲线的描绘。

delay(10);

num19_1 += 1;

if(num19_1 >= 4){  //40ms 画一个点。

num19_1 = 0;

num19_2 += 1;

if(num19_2 == 3){

Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\":10}>ET");

}else  if(num19_2 == 4){

Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\":130}>ET");

}else{

Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\":40}>ET");

}

if(num19_2 >= 20){                //20 data为一个周期

num19_2 = 0;

}

}

接着想搞定CO2曲线,重点是扫描同步。

本项目3条曲线,chart view2 是SpO2血氧传感器的,chart view3是CO2呼吸的。

Chart view2、chart view3的X axis轴都设置 min=0、max=100,与ECG的chart view1相同,曲线扫码保持同步,chart View2的Y axis2的max=100,因此编制程序Y 轴 value最大给到95,算法见下面程序代码:

先定义3个变量,如下。

Int num19_3 = 0;

Int num19_4 = 0;

Int num19_5 = 0;

再一般在主循环main.c中,通过下述代码,实现CO2曲线的描绘。

num19_3 += 1;

if(num19_3 >= 4){  //每40ms一个点

num19_3 = 0;

num19_4 += 1;

if(num19_4 <= 10){

num19_5 = num19_4*9;   //前10个点线性增加

Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\":");

Serial.print(num19_5);

Serial.println("}>ET");

}else  if(num19_4 <= 40){    //后30个点线性减少

num19_5 = 95 - (num19_4 - 10)*3;

Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\":");

Serial.print(num19_5);

Serial.println("}>ET");

}else{

num19_4 = 0;

Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\":5}>ET");

}  }

图(8)上面是ECG波形,下面是CO2波形(symbol round radius = 4)

图(9)上面是ECG波形,下面是CO2波形(symbol round radius = 30)

图(8)中下面的CO2波形是上述程序在line series3的属性symbol round radius = 4时的效果。我们尝试修改 symbol round radius = 30,希望曲线过渡更多圆润,测试得到的效果同图(8)没有什么区别,见图(9),说明当点比较密的时候,圆润效果不明显。这时只能通过改变点坐标来实现目的。

图(10)有坐标分隔轴线

我们通过图(10)解词一下图(3)中X axis的几个属性。图(3)中,split lineshow = true时,会显示长竖条(分隔条);lineshow = true时,会显示X轴横线(比如最上面chart view的下部那条横线),tickshow = true时,会显示X轴横线下方一点点的刻度细线,labelshow = true时,会显示X轴横线下方的数字(data中填入的值)。如此而已。

现在就剩SpO2曲线了,决定使用AD转换。

曲线模拟使用ESP32的ADC,它是12位的,满量程4096. chart view2的Y轴max=255,将ADC读入值除20,可以满足曲线显示。满量程SPO2显示100%,因此,ADC读入值除20再除2.55即可数字显示到label2中,程序中因为是整型数运算,算法经过校正,请见实测ok的程序代码。使用arduino中函数analogRead(32),直接读取ESP32的GPIO32(也是ADC-CH4)的AD转换值。测试可通过电位器,也可以简单将ADC-CH4脚接GND、接+3.3V、接+5V、或者悬空看干扰波形,见视频效果(接地时显示在低位、接+3.3V、+5V时是相同的高位满幅、悬空时是杂波曲线),右侧label2控件及时显示ADC的电压变化。代码和算法代码如下:

//--------ADC-------

int adcPin = 32;  // GPIO32, 也是ADC-CH4

int adcValue = 0;

int num19_6 = 0;

delay(10);

adcValue = analogRead(adcPin);    // 读入AD变换的值

adcValue = adcValue/20;

//-----SPO2曲线绘制------

num19_6 += 1;

if(num19_6 >= 4){   // 每40ms 一个点

num19_6 = 0;

Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series2\",\"mode\":\"push\",\"value\":");

Serial.print(adcValue);

Serial.println("}>ET");

adcValue = (adcValue*10)/21;

Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"label\",\"widget\":\"label2\",\"value\":");

Serial.print(adcValue);

Serial.println("}>ET");

}

图(11)实拍完成的3组曲线局部

见图(11)是实拍局部,电脑中设计界面见图(12)。如图(3)中,当chart view2X axis2split lineshow = false时,图(12)中间黄色SPO2区域的分隔条会关闭显示(像实拍的图片那样);视频展示的流畅波形完全可以做一个实时示波器。

图(12)电脑完成的3组曲线

参考点

  1. STONE designer平台chart view控件的结构,如图(13)。在官方提供的《用户手册》之8.1中有详细介绍,包括各属性、参数的解释;《指令集》4.24给出了数据推送的方法,见图(14),程序中用到的指令这里都有示例。

图(13)曲线控件chart view的结构

图(14)曲线控件chart view的使用指令

  1. arduino的analogRead()模拟量AD转换读入函数。在arduino1.8.13版本的菜单“帮助”---》“参考”----》learning-----》Analog  I/O中,可查看analogRead()函数的说明如下:
  2. analogRead()

    Description

    Reads the value from the specified analog pin. The Arduino board contains a 6 channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to digital converter. This means that it will map input voltages between 0 and 5 volts into integer values between 0 and 1023. This yields a resolution between readings of: 5 volts / 1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed usinganalogReference().

    It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second.

    Syntax

    analogRead(pin)

    Parameters

    pin: the number of the analog input pin to read from (0 to 5 on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega)

    Returns

    int (0 to 1023)

    Note

    If the analog input pin is not connected to anything, the value returned by analogRead() will fluctuate based on a number of factors (e.g. the values of the other analog inputs, how close your hand is to the board, etc.).

    不过,请注意这里ESP32的ADC-CH4是12位的,返回值将是0 to 4096. 更详细内容请参见原文相关链接及ESP32手册。

使用STWI101WT-01串口屏便携式监护仪相关推荐

  1. 【毕业设计】基于stm3 的病人监护系统/健康监护仪

    提示:记录毕设 文章目录 前言 一.任务书 1.1设计(研究)目标: 1.2设计(研究)内容: 1.3设计方案: 二.硬件结构 2.1 主控单元处理器的选择. 2.2 心电模块设计 2.3 心率模块设 ...

  2. 串口屏应用案例_大彩串口屏在高拍仪上的应用方案

    一.概况 高拍仪也有人称为速拍仪,或有的教育机构称之为备课王.一般来说,我们称之为高拍仪.是最新研发出来的一款超便携低碳办公用品,也是一款办公领域革新性产品,它具有折叠式的超便捷设计,能完成一秒钟高速 ...

  3. 启明智显分享|4.3寸串口屏在户外便携式电源智能化应用方案

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  4. 基于MSP30单片机的便携式智能健康监护仪设计

    目 录 引言 1 1 国内外的研究现状 3 1.1国内的研究和开发现状 3 1.2国外的研究和开发现状 3 1.3本文的主要工作和研究内容 4 2智能健康监护仪的总体设计方案 5 2.1功能描述 5 ...

  5. 使用STWI056WT-01串口屏的激光美容仪

    皮秒激光可以分解皮下色素,达到去除色素效果,多功能激光美容仪可以实现洗眉.洗纹身.祛斑(雀斑.咖啡斑.老年斑.色素沉着).去除眼线.太田痣等美容功能.本项目规划一款简易便携式美容仪,成本低.性能稳定. ...

  6. 基于单片机的智能健康监护仪的设计(心电、心音、体温、脉搏、血压采集)

    文末下载完整资料 简介   本智能健康监护仪可对多项人体生理参数(体温.血压.脉搏.心电.心音)进行采集和分析,从中得到关于用户健康状况的信息.同时,本系统还可通过多种接口将信息传送至PC,并可以通过 ...

  7. 轻松让你了解朗锐慧康医疗仪器主板在监护仪的应用

    随着人工智能.物联网等新兴技术的发展,各行各业都已开启智能化之路,在医疗行业也不例外,目前大部分医疗仪器设备都是采用工业主板来控制,尤其是一些中大型医疗设备.其中可以分为:生命信息与支持类.临床检测类 ...

  8. 【i.MX6UL试用体验】医疗监护仪制作(三)硬件

    在上两篇文章中,我们做好了天嵌科技-TQi.MX6UL开发板做医疗监护仪的软件部分,软件篇:软件.代码 今天,我们来完成天嵌科技-TQi.MX6UL开发板做医疗监护仪的硬件部分,硬件部分分为产品内部的 ...

  9. 全球及中国病人多参数监护仪行业动态研究与运营风险评估报告2022版

    全球及中国病人多参数监护仪行业动态研究与运营风险评估报告2022版 --------------------------------------- [修订日期]:2021年12月 [搜索鸿晟信合研究院 ...

最新文章

  1. 0基础学python-零基础直接学习Python入门IT合适吗?
  2. 【渗透测试】初探进程伪装
  3. resource.arsc二进制内容解析 之 RES_TABLE_TYPE_TYPE (Config List)
  4. [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup
  5. 手机端适应_手机网站开发制作和电脑pc端有哪些区别
  6. DNS解析域名的过程
  7. jstl core and jstl fn
  8. 区域转换为二值图像_零基础一文读懂AI深度学习图像识别
  9. 修改linux默认语言
  10. Gadget,又见Gadget - 浅尝Windows Live Contacts Gadget
  11. 微信小程序获取unionid
  12. 设置cookie存活时间_js中如何设置cookie的保存时间呢?
  13. 图像处理MATLAB(图像分割)
  14. 电力拖动自动控制系统复习(四)
  15. 在html中函数无效,无法在按钮点击HTML中调用JavaScript函数
  16. UI基本控件(一):UIScrollView
  17. iOS开发——扫二维码下载APP
  18. [Android开发] Xposed 插件开发之三: 编写广告去除插件
  19. 第6章第23节:文字视觉化:使用图片来诠释文字的涵义 [PowerPoint精美幻灯片实战教程]
  20. Glossary - 术语对照表 5

热门文章

  1. cmi计算机管理教学全称,计算机管理教学(CMI)的设计和进展.pdf
  2. 查询没有雇员的部门信息
  3. 线性回归预测--家庭用电功率与时间的关系功率与电流的关系
  4. QGIS加载天地图图层
  5. 机器人制作入门--初学者
  6. 快速入门linux基本操作大全
  7. Large-Scale Volumetric Scene Reconstruction using LiDAR
  8. kaggle 欺诈信用卡预测——Smote+LR
  9. 戴尔外星人m16r1国行中文原厂Windows11系统自带Support Assist OS Recovery恢复出厂设置
  10. KMSpico软件下载:激活Windows系统和Office工具