基于单片机矿工生理状态监测系统的设计与实现
摘要
我国是一个煤矿资源储备大国,许多行业都需要直接或间接地使用煤矿资源。然而,煤矿开采仍然需要相关专业人员亲自作业,因此如何保障矿工的生命安全成为一个重要的研究课题。传统作业设备存在诸多不足,如不易携带、功能单一、无法及时响应危险信息等。为此,本文设计了一款基于单片机的矿工生理状态监测系统,能够实时监测矿工的体温、心率、血氧值,并检测人员是否意外跌落,通过无线网络将相关信息及时传输给管理人员。
🚀完整项目源码下载链接👉:https://download.youkuaiyun.com/download/DeepLearning_/89900215
1. 研究背景及意义
近年来,我国科技取得了飞速发展,但科技的进步离不开资源的消耗,煤矿资源是其中重要的一部分。截至2021年底,我国煤炭储量达2078.85亿吨,主要分布在山西、陕西、新疆、内蒙古、贵州等地。为了满足煤矿资源的需求,必须重视煤矿开采人员的生命安全,提高开采效率。随着矿井深度的增加,开采难度也随之增大,需要使用更高效的技术和设备,确保安全生产。现有的辅助器械装置虽然提高了安全性,但仍缺乏对矿工生理状态的实时监测。本研究旨在设计一套能够监测矿工生命体征的辅助设备,以更好地保护矿工的生命安全。
2. 系统需求分析
为了确保系统的有效性和实用性,本系统的需求主要分为数据采集、数据处理、数据显示和数据传输四个方面:
- 数据采集:通过温度传感器、心率血氧传感器和加速度传感器采集矿工的体温、心率、血氧值和物理角度。
- 数据处理:对采集到的原始数据进行滤波处理,提高数据的准确性。
- 数据显示:通过OLED屏幕显示矿工的生理状态,以便矿工及时了解自身状况。
- 数据传输:通过WiFi模块将数据实时上传到云平台,便于管理人员监控。
3. 系统硬件设计
3.1 系统整体硬件方案设计
本系统的硬件设计基于STM32F103C8T6单片机,主要模块包括温度传感器(DS18B20)、心率血氧传感器(MAX30102)、加速度传感器(MPU6050)、WiFi模块(ESP8266)和OLED显示屏。系统框图如下所示:
3.2 各部分硬件设计
3.2.1 供电部分的硬件设计
系统采用USB外部供电,输入5V电压,通过AMS1117线性稳压芯片将电压稳压至3.3V。电路原理图如下:
3.2.2 数据采集部分的硬件设计
- 温度传感器(DS18B20):通过单总线接口连接到单片机,用于测量矿工的体温。
- 心率血氧传感器(MAX30102):通过I2C接口连接到单片机,用于测量矿工的心率和血氧值。
- 加速度传感器(MPU6050):通过I2C接口连接到单片机,用于检测矿工的物理角度。
3.2.3 数据处理部分的硬件设计
STM32F103C8T6单片机负责数据的采集、处理和传输。其主要特点包括:
- ARM Cortex-M3内核,最高主频72MHz
- 64KB闪存和20KB SRAM
- 多种通信接口,包括I2C、SPI、USART、CAN
- 12位模数转换器(ADC)
- 多种定时器、PWM输出和捕获功能
- 低功耗模式和内置时钟管理单元
3.2.4 数据传输部分的硬件设计
ESP8266 WiFi模块负责将数据传输到云平台。其主要特点包括:
- 高度集成,内置处理器、WiFi模块和外围接口
- 主频80MHz,支持多种接口
- 支持STA/AP/STA+AP三种工作模式
- 低功耗,支持深度睡眠模式
- 高稳定性,支持多种加密算法
3.2.5 数据显示部分的硬件设计
OLED显示屏通过I2C接口连接到单片机,用于显示矿工的生理状态。OLED显示屏具有低功耗、高对比度和快速响应时间的特点。
4. 系统软件设计
4.1 系统整体软件方案设计
系统采用轮询的方式不断采集数据、处理数据、显示数据和传输数据。软件系统流程图如下:
4.2 各部分软件设计
4.2.1 数据采集和处理部分的软件设计
- 温度传感器(DS18B20):通过单总线接口读取温度数据,无需滤波处理。
- 心率血氧传感器(MAX30102):通过I2C接口读取红光和红外光数据,计算心率和血氧值。
- 加速度传感器(MPU6050):通过I2C接口读取加速度和角速度数据,通过DMP进行姿态解算。
4.2.2 数据传输部分的软件设计
ESP8266 WiFi模块通过串口发送AT指令初始化,并使用MQTT协议将数据传输到云平台。关键代码如下:
uint8_t ESP8266_Send_Cmd(uint8_t* cmd, const char* ret) {
uint16_t timeout = 50;
while (timeout--) {
USART_Send_str(ESP8266_USARTX, cmd);
delay_ms(20);
if (strstr((const char*)DMA_RCV_Buffer, ret) != NULL) {
ESP8266_RCV_Clear();
return 0;
}
}
return 1;
}
4.2.3 数据显示部分的软件设计
OLED显示屏通过I2C接口显示数据。优化后的代码如下:
uint8_t level[8][3] = {
{0xb0, 0x02, 0x10},
{0xb1, 0x02, 0x10},
{0xb2, 0x02, 0x10},
{0xb3, 0x02, 0x10},
{0xb4, 0x02, 0x10},
{0xb5, 0x02, 0x10},
{0xb6, 0x02, 0x10},
{0xb7, 0x02, 0x10},
};
void OLED_Display(void) {
uint8_t i;
for (i = 0; i < PAGE_SIZE; i++) {
OLED_WR_Bytes(&level[i][0], OLED_CMD, 3);
OLED_WR_Bytes(OLED_buffer[i], OLED_DATA, WIDTH);
}
}
5. 系统功能的实现
5.1 系统硬件功能的实现
系统PCB板通过拖焊和点焊的方式完成焊接。实物图如下:
5.2 系统软件功能的实现
5.2.1 体温检测功能逻辑的实现
通过单总线接口读取DS18B20模块的温度数据。关键代码如下:
void read_temperature() {
// 初始化DS18B20
DS18B20_Init();
// 发送温度转换命令
DS18B20_StartConvert();
// 等待转换完成
delay_ms(750);
// 读取温度数据
temperature = DS18B20_ReadTemp();
}
5.2.2 陀螺仪检测功能的实现
通过I2C接口读取MPU6050模块的加速度和角速度数据,并通过DMP进行姿态解算。关键代码如下:
void read_gyro_data() {
// 初始化MPU6050
MPU6050_Init();
// 读取加速度和角速度数据
MPU6050_ReadSensorData(&accel_x, &accel_y, &accel_z, &gyro_x, &gyro_y, &gyro_z);
// 通过DMP进行姿态解算
MPU6050_GetDMPData(&pitch, &roll, &yaw);
}
5.2.3 心率血氧检测功能的实现
通过I2C接口读取MAX30102模块的红光和红外光数据,计算心率和血氧值。关键代码如下:
void read_hr_spo2_data() {
// 初始化MAX30102
MAX30102_Init();
// 读取红光和红外光数据
MAX30102_ReadSensorData(&red_value, &ir_value);
// 计算心率和血氧值
MAX30102_CalculateHR_SPO2(&heart_rate, &blood_oxygen);
}
5.2.4 WiFi功能的实现
通过串口发送AT指令初始化ESP8266模块,并使用MQTT协议将数据传输到云平台。关键代码如下:
void initialize_wifi() {
// 复位ESP8266
ESP8266_Send_Cmd("AT+RST", "OK");
// 设置工作模式
ESP8266_Send_Cmd("AT+CWMODE=3", "OK");
// 连接WiFi
ESP8266_Send_Cmd("AT+CWJAP=\"SSID\",\"PASSWORD\"", "OK");
// 连接MQTT服务器
ESP8266_Send_Cmd("AT+MQTTCONN=0,\"mqtt.example.com\"", "OK");
}
5.3 整体功能的实现
系统在设计各模块的执行方式时,采用有限状态机的方式不断轮询执行每一个任务,并在执行完任务后切换当前状态。关键代码如下:
enum State {
STATE_TEMP,
STATE_GYRO,
STATE_HR_SPO2,
STATE_WIFI,
STATE_DISPLAY
};
void main() {
enum State current_state = STATE_TEMP;
while (1) {
switch (current_state) {
case STATE_TEMP:
read_temperature();
current_state = STATE_GYRO;
break;
case STATE_GYRO:
read_gyro_data();
current_state = STATE_HR_SPO2;
break;
case STATE_HR_SPO2:
read_hr_spo2_data();
current_state = STATE_WIFI;
break;
case STATE_WIFI:
send_data_to_cloud();
current_state = STATE_DISPLAY;
break;
case STATE_DISPLAY:
display_data_on_oled();
current_state = STATE_TEMP;
break;
}
}
}
6. 系统功能的测试
6.1 系统各项功能测试
6.1.1 体温检测功能测试
通过掌心紧贴温度传感器一段时间后读取温度数据,测试结果如下:
6.1.2 心率血氧检测功能测试
通过手指放置在心率血氧传感器上读取数据,测试结果如下:
6.1.3 加速度检测功能测试
通过平放加速度传感器读取数据,测试结果如下:
6.2 系统整体功能测试
系统上电初始化成功后,人为触发异常情况,测试警报是否响应,并时刻关注云平台的数据。测试结果如下:
🚀完整项目源码下载链接👉:https://download.youkuaiyun.com/download/DeepLearning_/89900215
7. 总结与展望
本文通过查阅国内外相关资料,设计并实现了一套基于单片机的矿工生理状态监测系统。该系统能够实时监测矿工的体温、心率、血氧值和物理角度,并通过WiFi模块将数据传输到云平台,有效提高了矿工的工作安全性和健康水平。
未来的研究可以从以下几个方面进行深入探讨:
- 硬件优化:提高传感器的灵敏度和准确性,增强数据采集和传输的稳定性和可靠性。
- 软件优化:开发更加高效、准确和实用的算法,提高数据处理和分析的精度和效率。
- 应用拓展:探索生理状态监测系统的应用领域和未来发展方向,将其技术应用到其他行业和领域中,为人们的生产生活提供更加安全、健康和高效的保障。