赞
踩
随着社会经济的发展和城市化的加速发展,物联网技术已经逐步进入各个领域,在许多方面都有着重要的作用。而近些年来,物联网技术也逐渐的进入了医疗领域。其中智慧病房作为智慧医疗的细分领域,以辅助医疗供给为目标,通过打造院内物联网,让患者与医护人员的互动,通过物联医疗设备紧密联系。这同时也是医院信息化程度提升的一个标志。通过病房的实体设施在线化与医疗信息系统数字化联动,医护人员不用守在病患身边,也能提供实时服务。为医护人员减负,利用物联网提升医疗服务质量,改善医患关系。
因此,设计基于嵌入式物联网技术的智慧病房,能很好的为医生和患者提供帮助。
设计一个基于物联网技术的智慧病房管理系统。假设医院住院部的一层病房(走廊两边病房平行分布),病房数量最多60间,每间病房3个床位,编号从1~180号。每间病房可采用的设备如下:STM32F103开发板1块,房间温湿度采集模块1套(I2C接口,AHT20模块),房间自动灯光开关控制器(以PWM方式控制,每天早上7点渐亮,晚上22点渐灭),病人脉搏&血氧检测仪3套(UART接口输出脉搏+血氧的数字值),床头紧急呼叫按键开关3个(按下呼叫)。
每间病房的STM32F103开发板通过UART转485接口,以mobus组网方式(mobus协议不熟悉的话,可以直接视之为一个自定义数据包格式的串口通信)连接到护士监控室的PC电脑上(上位机)。PC电脑上可接收每间病房的温湿度数据(周期为5分钟)、床头紧急呼叫信号、病人脉搏血氧数据(正常状态下30分钟一次采集;当脉搏超过120或血氧值低于90时切换到危重状态下,实时采集),显示在屏幕上并且保存到MySQL数据库里。
智慧病房的设计的硬件主要由以下五部分构成,即单片机控制模块、AHT20模块、心率脉搏采集模块、通信模块和上位机。单片机控制模块负责对整体数据进行处理,并且根据指令对系统消息进行处理;AHT20模块负责接收收集温湿度信息;MOBUS通信模块负责将信息发给PC机;MAX30102模块负责采集病人的信息。
系统框图
系统单片机采用了STM32F103。 STM32F103具有功耗低,性能高的优点。STM32F1系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。芯片集成定时器Timer,CAN,ADC,SPI,I2C,USB,UART等多种外设功能。存储器有从16K到512K字节的闪存程序存储器。而且内部有着睡眠、停机和待机模式。满足了防丟失器对读写速度和功耗的要求。
AHT20是国内奥松生成的I2C接口的MEMS温湿度传感器,ADC位数为20Bit,具有体积小、精度高、成本低等优点。AHT20 配有一个全新设计的 ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器,经过改进使其在恶劣环境下的性能更稳定。
AHT20原理图
MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块(芯片)。它集成了一个660nm红光LED、880nm红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。可通过软件关断模块,待机电流为零,实现电源始终维持供电状态,可运用于低功耗产品中。
MAX30102采用一个1.8V电源和一个独立的3.3V用于内部LED的电源,标准的I2C兼容的通信接口。市面很多都将MAX30102芯片集成在一个PCB模块上,内部增加一个1.8V和3.3V LDO稳压电路,可对模块单独供5.0V电源,方便开发者进行开发。
引脚图
芯片内部有3.3V-5.0V的LED电源和1.8V的逻辑电源,所以模块带有两路稳压电路,将5V电源分别转化为3.3V和1.8V;由于LED驱动电源的供电范围为3.3V-5.0V,3.3V稳压电路可省去。
由于MAX30102的逻辑电路的IIC通信电平为1.8V,这与我们常用的51单片机和STM32单片机的引脚电平不匹配。
这里有个解决方法,因为MAX30102的SDA、SCL、INT引脚为开漏,可以将模块上的R1、R2、R3电阻去掉,对于51单片机来说,在SDA、SCL、INT引脚上分别加一个4.7-10k电阻上拉至5V;对于STM32单片机,只需要将相应的控制引脚配置为上拉模式即可。
模块只需要接上5V电源,SDA、SCL、INT引脚与单片机连接即可;IRD、RD一般不接,以STM32单片机接线为例(单片机采用模拟IIC的控制方式)
max485是美信(maxim)推出的一款常用rs485转换器。其中5脚和8脚是引脚,6脚和7脚就是485通信中的a和b两个引脚,而1脚和4脚分别接到我们单片机的rxd和txd引脚上,直接使用单片机uart进行数据接收和发送。而2脚和3脚就是方向引脚了,其中2脚是低电平使能接收器,3脚是高电平使能输出驱动器。我们把这两个引脚连到一起,平时不发送数据的时候,保持这两个引脚是低电平,让max485处于接收状态,当需要发送数据的时候,把这个引脚拉高,发送数据,发送完毕后再拉低这个引脚就可以了。为了提高rs485的抗干扰性能,需要在靠近max485的a和b引脚之间并接一个电阻,这个电阻阻值从100欧到1k都可以。
根据分析我们需要使用如下几种功能:
1.使用 I2C 读取 AHT20 模块
2.TIM 定时器与 PWM 呼吸灯
3.按键信息接收与消抖
4.UART 转 485 接口与 modbus 通信
5.MAX30102 模块心率与血氧测量
RCC 配置
SYS 配置
USART1 与 DMA 配置
I2C 配置
TIM3 配置
DMA 配置
TIM2 与 PWM 配置
NVIC 配置
GPIO 配置
时钟配置
引脚配置
RTOS 配置
这里选择引入 RT-Thread 轻量便捷 :
外部按钮配置
首先我们需要引入温湿度驱动头文件:
#include "AHT20.h"
然后我们需要在进程中对温湿度传感器进行初始化,这里在初始化之后,不能立即获取温湿度,需要等待 2 秒或以上,确保数据正确性:
MX_GPIO_Init();
MX_I2C1_Init();
MX_USART1_UART_Init();
uint32_t CT_data[2]={
0,0}; // 用于获取温湿度数据
volatile int c1,t1;
rt_thread_delay(50);
AHT20_Init();
rt_thread_delay(2500);
然后我们需要获取经过 CRC 验证的温湿度数据,这里直接调用驱动函数即可:
while(1) { AHT20_Read_CTdata_crc(CT_data); //经过CRC校验,读取AHT20的温度和湿度数据 推荐每隔大于1S读一次 c1 = CT_data[0]*1000/1024/1024; //计算得到湿度值c1(放大了10倍) t1 = CT_data[1]*2000/1024/1024-500;//计算得到温度值t1(放大了10倍) printf("正在检测"); rt_thread_delay(100); printf("."); rt_thread_delay(100); printf("."); rt_thread_delay(100); printf("."); rt_thread_delay(100); printf("."); rt_thread_delay(100); printf("."); rt_thread_delay(100); printf(".")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。