若该文为原创文章,转载请注明原文出处。

一、引言

(一)研究背景及意义

婴儿猝死综合征(SIDS)和意外窒息是婴儿睡眠中最严重的安全威胁,新手父母常因无法持续监控而焦虑不安。传统的婴儿监护器功能单一,或仅提供音频视频监控,无法对心率、呼吸、体动等关键生理指标进行有效监测和预警。本项目旨在开发一款多参数、智能化的非接触式/轻接触式监护系统,能够实时评估婴儿睡眠安全状态,并在发生心率异常、离开床位、尿床等危险情况时及时报警,对于保障婴儿生命安全、缓解父母焦虑具有重大的社会意义和实用价值。

(二)国内外研究现状

目前市场上高端婴儿监护器多采用摄像头进行行为分析,但存在隐私顾虑且无法监测心率等生理参数。一些穿戴式设备(如智能袜)可监测血氧和心率,但存在舒适度和脱落风险。本设计创新性地采用多传感器非接触/轻接触融合方案,通过分析心率、声音、压力、加速度等多维信息,综合判断婴儿状态,在准确性、安全性和用户体验上找到了最佳平衡点。

二、系统总体设计

(一)系统架构

本系统采用“多模态感知-边缘计算-云端协同”的三层架构。

  1. 感知层:由分布在床垫和婴儿身上的多种传感器组成,负责采集原始生理与行为信号。

  2. 边缘计算层:以STM32为核心,进行实时数据融合、特征提取、状态判断和本地报警。

  3. 云端协同层:通过WiFi将数据与报警信息推送至父母手机APP,实现远程监控。

(二)功能模块划分

  1. 生理参数监测模块:MAX30102(心率)。

  2. 行为与状态监测模块:声音传感器(哭声)、薄膜压力传感器(在位判断)、ADXL345(体动)。

  3. 安全事件监测模块:水滴传感器(尿床)。

  4. 报警模块:蜂鸣器(本地报警)。

  5. 通信模块: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 / 充氧:运行中

    • 第四行:报警信息

四、软件设计与实现

(一)开发环境搭建

  1. IDE:STM32CubeIDE。

  2. :使用STM32CubeMX配置HAL库,初始化I2C、ADC、GPIO等外设。

  3. 驱动与算法:需编写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);
}

五、系统测试与优化

(一)测试方案

  1. 安全性测试

    • 离床报警:将婴儿玩偶从压力传感器上拿起,测试报警是否立即触发。

    • 尿床报警:滴少量水在水滴传感器上,测试报警触发。

    • 心率异常报警:模拟心率过高或过低的数据,测试报警逻辑。

  2. 功能测试

    • 睡眠状态判断:模拟安静环境(无声音、无体动)5分钟,测试系统是否判断为睡眠并开始计时。然后制造声音,测试是否退出睡眠状态。

    • 心率准确性:与专业指夹式血氧仪进行对比测量,校准MAX30102的读数。

    • 网络可靠性:测试WiFi断开后重连、数据重发机制是否有效。

  3. 用户体验测试:让目标用户(父母)使用APP,评估信息显示是否清晰,报警是否及时明确。

(二)优化方向

  1. 软件优化

    • 高级滤波算法:对心率数据采用更先进的滤波算法(如带通滤波+移动平均),极大提高在体动干扰下的测量准确性。

    • 机器学习分类:收集大量声音和加速度数据,使用轻量级机器学习算法(如TinyML)来更准确地分类哭声、咳嗽声与其他噪音,以及不同状态的体动模式。

    • 低功耗设计:优化代码,利用STM32的休眠模式,在婴儿长时间睡眠时降低系统功耗。

  2. 硬件优化

    • 穿戴设备优化:将加速度传感器集成在一个柔软的硅胶带中,提高婴儿佩戴的舒适度和安全性。

    • 电源安全:采用电池备用电源,防止主电源断电导致监护中断。

六、结论与关键设计

(一)结论

本项目成功设计并实现了一个全方位、多参数的智能婴儿睡眠监护系统。系统通过多传感器数据融合,实现了对婴儿心率、在位状态、尿床事件和睡眠状态的精准监测,并建立了本地与远程的双重报警机制。经过测试,系统功能完整,工作稳定,报警及时,为婴儿睡眠安全提供了强有力的技术保障,具有极高的实用价值和市场前景。

(二)关键设计

  1. 安全性与可靠性

    • 医疗级精度: 心率监测应达到医疗设备级别的准确性和可靠性。

    • 误报防止: 采用多传感器数据融合算法,避免单一传感器误触发。

    • 低功耗设计: 系统需24小时连续工作,应采用低功耗模式和休眠策略。

  2. 传感器安装与舒适性

    • 非接触设计: 尽量采用非接触式传感器(如床垫下的压力阵列),避免影响婴儿舒适度。

    • 可穿戴设备: 加速度传感器应集成到柔软的 wearable 设备中,避免硬物接触婴儿皮肤。

    • 防水处理: 所有电子部件做好防水处理,防止意外液体损坏。

  3. 算法优化

    • 自适应阈值: 根据每个婴儿的正常模式自适应调整各项阈值。

    • 模式学习: 系统能够学习婴儿的正常睡眠模式,提高异常检测准确性。

    • 趋势分析: 提供睡眠质量趋势分析,帮助父母了解婴儿的睡眠规律。

  4. 父母体验

    • 分级报警: 区分紧急报警(如离开床位)和一般通知(如尿湿)。

    • 远程查看: 父母可通过APP实时查看婴儿状态,无需进入房间打扰。

    • 历史记录: 提供详细的睡眠历史记录和统计报告。

  5. 隐私与安全

    • 数据加密: 所有传输数据加密处理,保护家庭隐私。

    • 本地处理: 敏感数据尽量在本地处理,减少云端传输。

如有侵权,或需要完整代码,请及时联系博主。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐