基于stm32的婴儿睡眠床监测系统
若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
婴儿猝死综合征(SIDS)和意外窒息是婴儿睡眠中最严重的安全威胁,新手父母常因无法持续监控而焦虑不安。传统的婴儿监护器功能单一,或仅提供音频视频监控,无法对心率、呼吸、体动等关键生理指标进行有效监测和预警。本项目旨在开发一款多参数、智能化的非接触式/轻接触式监护系统,能够实时评估婴儿睡眠安全状态,并在发生心率异常、离开床位、尿床等危险情况时及时报警,对于保障婴儿生命安全、缓解父母焦虑具有重大的社会意义和实用价值。
(二)国内外研究现状
目前市场上高端婴儿监护器多采用摄像头进行行为分析,但存在隐私顾虑且无法监测心率等生理参数。一些穿戴式设备(如智能袜)可监测血氧和心率,但存在舒适度和脱落风险。本设计创新性地采用多传感器非接触/轻接触融合方案,通过分析心率、声音、压力、加速度等多维信息,综合判断婴儿状态,在准确性、安全性和用户体验上找到了最佳平衡点。
二、系统总体设计
(一)系统架构
本系统采用“多模态感知-边缘计算-云端协同”的三层架构。
-
感知层:由分布在床垫和婴儿身上的多种传感器组成,负责采集原始生理与行为信号。
-
边缘计算层:以STM32为核心,进行实时数据融合、特征提取、状态判断和本地报警。
-
云端协同层:通过WiFi将数据与报警信息推送至父母手机APP,实现远程监控。
(二)功能模块划分
-
生理参数监测模块:MAX30102(心率)。
-
行为与状态监测模块:声音传感器(哭声)、薄膜压力传感器(在位判断)、ADXL345(体动)。
-
安全事件监测模块:水滴传感器(尿床)。
-
报警模块:蜂鸣器(本地报警)。
-
通信模块:ESP8266 WiFi模块。
三、硬件设计与实现
(一)系统硬件框架图

1. 主控单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| STM32单片机 | STM32F103C8T6 | - | 作为系统核心,负责所有传感器的数据采集、执行复杂的睡眠分析算法、控制报警器、以及与WiFi模块通信。 |
2. 传感器与输入单元
| 器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
|---|---|---|---|
| 心率传感器 | MAX30102 | I²C | 通过光电法非接触式测量婴儿的心率和血氧饱和度。可安装在床垫下或 wearable 设备中。 |
| 声音传感器 | KY-037 | ADC | 检测婴儿哭声或声响。输出模拟电压信号,声音越大电压越高。 |
| 压力传感器 | 薄膜压力传感器阵列 | ADC | 铺设在床垫下,检测婴儿身体压力分布。通过压力变化判断婴儿是否在原始位置。 |
| 加速度传感器 | MPU6050 | I²C | 佩戴在婴儿衣物或尿布上,检测婴儿身体运动。三轴加速度+陀螺仪,可准确判断婴儿活动状态。 |
| 水滴/尿湿传感器 | 电容式湿度传感器 | ADC/GPIO | 安装在尿布或床单下,检测尿液。检测到液体时输出信号变化。 |
3. 执行器与输出单元
| 器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
|---|---|---|---|
| 有源蜂鸣器 | 5V有源蜂鸣器 | GPIO | 当检测到异常情况(离开位置、尿床)时,发出报警声提醒父母。 |
| 状态指示灯 | RGB LED | PWM | 显示系统状态:绿色(正常)、黄色(注意)、红色(报警)。 |
4. 通信单元
| 器件名称 | 推荐型号 | 接口 | 功能说明 |
|---|---|---|---|
| WiFi模块 | ESP-01S | UART | STM32通过串口以AT指令与ESP8266通信,将婴儿的实时状态数据和报警信息上传至云平台,父母可通过手机APP远程实时监控。 |
5. 电源单元
| 器件名称 | 推荐规格 | 功能说明 |
|---|---|---|
| 锂电池 | 3.7V 18650 | 为整个系统供电,需满足长时间工作的需求。 |
| 电源管理模块 | TP4056 | 负责锂电池的充电管理和升压输出,具有过充、过放、短路保护功能。 |
核心控制逻辑说明
1. 自动喂养模式
-
定时投食:
-
设置每日投食时间(如:08:00, 12:00, 18:00) -
到达设定时间 → 启动步进电机转动(如:2秒)→ 定量投食
-
-
水温监控:
-
if (水温 > 温度上限) { 启动充氧泵加强散热; } -
if (水温 < 温度下限) { 减少充氧时间; }//防止温度过低
-
-
水质管理:
-
if (TDS值 > TDS阈值) { 启动水泵换水; OLED显示"水质差需换水"; } -
定期启动充氧泵:每运行10分钟,休息20分钟
-
2. 手动控制模式
-
本地手动: 通过按键手动控制投食、充氧、换水。
-
远程手动: 通过手机APP远程控制所有设备,实时查看鱼缸状态。
3. 投食控制逻辑
-
投食量控制:
投食时间(秒) = 投食量比例 × 基准时间-
200mg: 2秒
-
300mg: 3秒
-
400mg: 4秒
-
500mg: 5秒
-
4. 数据显示与报警
-
OLED显示内容:
-
第一行:水温:25.5℃ / TDS:150ppm
-
第二行:模式:自动 / 状态:正常
-
第三行:下次投食:08:00 / 充氧:运行中
-
第四行:报警信息
-
四、软件设计与实现
(一)开发环境搭建
-
IDE:STM32CubeIDE。
-
库:使用STM32CubeMX配置HAL库,初始化I2C、ADC、GPIO等外设。
-
驱动与算法:需编写MAX30102(集成心率算法)、ADXL345、ESP8266等驱动程序,并实现数据融合逻辑。
(二)系统软件流程图

(三)关键软件模块实现
1. 睡眠状态判断逻辑(核心)
// 状态标志位
typedef enum {
STATE_AWAKE = 0,
STATE_SLEEPING,
STATE_ALERT
} BabyState_t;
BabyState_t Current_State = STATE_AWAKE;
uint32_t sleepStartTime = 0;
uint32_t quietStaticStartTime = 0; // 用于记录开始持续安静不动的时间点
void Determine_Baby_State(void) {
static uint32_t lastCheckTime = 0;
if (HAL_GetTick() - lastCheckTime < 1000) return; // 每秒判断一次
lastCheckTime = HAL_GetTick();
// 1. 检查是否触发紧急报警(最高优先级)
if (isWet || isAbsent || heartRate < 80 || heartRate > 180) {
Current_State = STATE_ALERT;
Trigger_Alarm();
return;
}
// 2. 判断清醒/睡眠过渡
if (soundLevel < SOUND_THRESHOLD && motionLevel < MOTION_THRESHOLD) {
// 处于安静不动状态
if (quietStaticStartTime == 0) {
quietStaticStartTime = HAL_GetTick(); // 开始记录此状态的起始时间
} else {
// 如果此状态持续超过5秒,则认为进入睡眠
if (HAL_GetTick() - quietStaticStartTime >= 5000) {
if (Current_State != STATE_SLEEPING) {
Current_State = STATE_SLEEPING;
sleepStartTime = HAL_GetTick(); // 开始睡眠计时
}
}
}
} else {
// 检测到哭声或体动,一定是清醒状态
quietStaticStartTime = 0; // 重置安静计时器
Current_State = STATE_AWAKE;
}
}
// 计算总睡眠时长
uint32_t Get_Total_Sleep_Duration(void) {
if (Current_State == STATE_SLEEPING) {
return (HAL_GetTick() - sleepStartTime) / 1000; // 返回秒数
} else {
return 0;
}
}
2. 云平台数据上报(JSON格式)
void Publish_Baby_Data(void) {
cJSON *root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "heart_rate", heartRate);
cJSON_AddStringToObject(root, "state", (Current_State == STATE_SLEEPING) ? "Sleeping" : "Awake");
cJSON_AddStringToObject(root, "in_position", isAbsent ? "No" : "Yes");
cJSON_AddStringToObject(root, "bed_wet", isWet ? "Yes" : "No");
cJSON_AddNumberToObject(root, "sleep_duration", Get_Total_Sleep_Duration());
char *json_data = cJSON_Print(root);
ESP8266_MQTT_Publish("baby/monitor/data", json_data);
cJSON_Delete(root);
free(json_data);
}
五、系统测试与优化
(一)测试方案
-
安全性测试:
-
离床报警:将婴儿玩偶从压力传感器上拿起,测试报警是否立即触发。
-
尿床报警:滴少量水在水滴传感器上,测试报警触发。
-
心率异常报警:模拟心率过高或过低的数据,测试报警逻辑。
-
-
功能测试:
-
睡眠状态判断:模拟安静环境(无声音、无体动)5分钟,测试系统是否判断为睡眠并开始计时。然后制造声音,测试是否退出睡眠状态。
-
心率准确性:与专业指夹式血氧仪进行对比测量,校准MAX30102的读数。
-
网络可靠性:测试WiFi断开后重连、数据重发机制是否有效。
-
-
用户体验测试:让目标用户(父母)使用APP,评估信息显示是否清晰,报警是否及时明确。
(二)优化方向
-
软件优化:
-
高级滤波算法:对心率数据采用更先进的滤波算法(如带通滤波+移动平均),极大提高在体动干扰下的测量准确性。
-
机器学习分类:收集大量声音和加速度数据,使用轻量级机器学习算法(如TinyML)来更准确地分类哭声、咳嗽声与其他噪音,以及不同状态的体动模式。
-
低功耗设计:优化代码,利用STM32的休眠模式,在婴儿长时间睡眠时降低系统功耗。
-
-
硬件优化:
-
穿戴设备优化:将加速度传感器集成在一个柔软的硅胶带中,提高婴儿佩戴的舒适度和安全性。
-
电源安全:采用电池备用电源,防止主电源断电导致监护中断。
-
六、结论与关键设计
(一)结论
本项目成功设计并实现了一个全方位、多参数的智能婴儿睡眠监护系统。系统通过多传感器数据融合,实现了对婴儿心率、在位状态、尿床事件和睡眠状态的精准监测,并建立了本地与远程的双重报警机制。经过测试,系统功能完整,工作稳定,报警及时,为婴儿睡眠安全提供了强有力的技术保障,具有极高的实用价值和市场前景。
(二)关键设计
-
安全性与可靠性:
-
医疗级精度: 心率监测应达到医疗设备级别的准确性和可靠性。
-
误报防止: 采用多传感器数据融合算法,避免单一传感器误触发。
-
低功耗设计: 系统需24小时连续工作,应采用低功耗模式和休眠策略。
-
-
传感器安装与舒适性:
-
非接触设计: 尽量采用非接触式传感器(如床垫下的压力阵列),避免影响婴儿舒适度。
-
可穿戴设备: 加速度传感器应集成到柔软的 wearable 设备中,避免硬物接触婴儿皮肤。
-
防水处理: 所有电子部件做好防水处理,防止意外液体损坏。
-
-
算法优化:
-
自适应阈值: 根据每个婴儿的正常模式自适应调整各项阈值。
-
模式学习: 系统能够学习婴儿的正常睡眠模式,提高异常检测准确性。
-
趋势分析: 提供睡眠质量趋势分析,帮助父母了解婴儿的睡眠规律。
-
-
父母体验:
-
分级报警: 区分紧急报警(如离开床位)和一般通知(如尿湿)。
-
远程查看: 父母可通过APP实时查看婴儿状态,无需进入房间打扰。
-
历史记录: 提供详细的睡眠历史记录和统计报告。
-
-
隐私与安全:
-
数据加密: 所有传输数据加密处理,保护家庭隐私。
-
本地处理: 敏感数据尽量在本地处理,减少云端传输。
-
如有侵权,或需要完整代码,请及时联系博主。
更多推荐

所有评论(0)