物联网毕设 - 智能婴儿监护系统(STM32+APP+MQTT+多传感器融合)
1. 智能婴儿监护系统设计概述
作为一个曾经被朋友半夜求助"能不能做个能自动哄娃的设备"的工程师,我深刻理解新手父母对婴儿监护系统的需求。这套基于STM32的智能婴儿监护系统,本质上是一个多传感器融合的物联网终端,它能帮你解决三个核心问题:环境监测、异常预警和远程互动。
硬件部分就像系统的"感官器官":DHT11温湿度传感器相当于皮肤的触觉,实时感知环境变化;声音传感器如同耳朵,捕捉婴儿啼哭;人体红外传感器则像警觉的眼睛,监测是否有人靠近婴儿床。这些传感器数据通过STM32F103C8T6主控芯片(我更喜欢叫它"大脑")进行处理,再通过ESP8266 WiFi模块(系统的"嘴巴")用MQTT协议将信息"说"给手机APP听。
在实际测试中,我发现这套组合有几个意想不到的优点:首先是低功耗,用普通移动电源可以连续工作12小时以上;其次是响应速度快,从婴儿啼哭到APP报警延迟可以控制在1秒内;最重要的是稳定性,经过72小时压力测试没有出现死机情况。
2. 硬件设计与传感器选型
2.1 核心控制器选型
STM32F103C8T6是我的首选,这块蓝色的小板子价格不到20元,但拥有72MHz主频和64KB Flash,跑FreeRTOS完全够用。相比Arduino,它的优势在于可以直接操作寄存器,对于需要精确时序控制的声音传感器特别友好。我在PCB设计时特意保留了SWD调试接口,这对后期排查舵机干扰问题帮了大忙。
2.2 传感器阵列配置
环境监测组:
- DHT11温湿度传感器:虽然精度不如SHT30,但15元的差价对毕设很友好。安装时要远离舵机,我的第一个原型机就因振动导致读数异常。
- 土壤湿度传感器:用来模拟尿床检测,实际测试发现用铝箔胶带包裹电极部分可以防止误触。
行为监测组:
- HC-SR501人体红外:调整延时旋钮至最小,避免漏检。有个小技巧是在传感器前加装菲涅尔透镜,检测角度能从120°提升到180°。
- 声音传感器:采用LM393比较器模块,阈值电位器我一般调到3.2V左右,这个值能有效过滤环境噪音。
执行机构:
- SG90舵机改装的摇床机构:注意要在代码里限制转动角度,我的第一个版本就因角度过大导致连杆脱落。
- WS2812 RGB灯带:PWM频率要设为800kHz,否则会出现颜色失真的问题。
3. 通信架构与MQTT实现
3.1 网络连接方案
ESP8266的AT固件真是个好东西,但要注意VCC必须接3.3V!我曾经因为接错5V烧毁了两个模块。在代码中我实现了三级重连机制:
- 首次连接失败后等待10秒
- 第二次尝试前先复位模块
- 仍然失败则切换备用AP(这个功能让我的毕设答辩加分不少)
3.2 MQTT主题设计
经过三个版本的迭代,我总结出这样的主题结构:
baby_monitor/[deviceID]/sensor // 传感器数据上行
baby_monitor/[deviceID]/control // 控制指令下行
baby_monitor/[deviceID]/alert // 报警信息上行
使用QoS1级别保证关键消息不丢失,但要注意保持心跳间隔在120秒以内,否则有些路由器会主动断开连接。我在消息体里采用了JSON格式,一个典型的数据包长这样:
{
"temp": 26.5,
"humi": 60,
"sound": 0,
"motion": 1,
"timestamp": 1625097600
}
4. APP开发与数据可视化
4.1 安卓端功能实现
用Android Studio开发时遇到最大的坑是MQTT客户端的回调线程问题,解决方法是在onMessageReceived里用Handler抛到主线程。界面布局采用ConstraintLayout,关键控件包括:
- 环境数据卡片:用MPAndroidChart绘制温湿度曲线
- 报警通知:集成FCM推送服务,即使APP在后台也能收到提醒
- 颜色选择器:HSV色彩空间比RGB更符合用户直觉
4.2 数据存储方案
最初我用SQLite本地存储喂食记录,后来发现跨设备同步是个问题。最终方案是结合Room数据库和MQTT消息持久化,关键代码如下:
@Dao
interface FeedRecordDao {
@Insert
suspend fun insert(record: FeedRecord)
@Query("SELECT * FROM feed_records ORDER BY timestamp DESC")
fun getAll(): LiveData<List<FeedRecord>>
}
5. 系统集成与调试技巧
5.1 电源管理优化
调试时发现舵机启动会导致电压骤降,解决方案是:
- 在电源输入端并联4700μF电容
- 给STM32和ESP8266使用独立的LDO稳压
- 在代码中添加软启动逻辑,舵机动作前先短暂关闭WiFi
5.2 抗干扰设计
分享几个血泪教训:
- 所有传感器信号线都要加100nF去耦电容
- I2C总线必须用4.7kΩ上拉电阻
- 避免将WiFi天线布置在舵机附近
- 在ADC采样时短暂关闭PWM输出
6. 功能扩展方向
已经毕业的学弟给我的系统加了两个实用功能:
- 利用STM32的DFU模式实现OTA升级,只需要在APP里长按版本号
- 接入开源语音识别库,父母可以通过语音命令查询婴儿状态
- 增加边缘计算功能,在本地实现哭声模式识别(高兴/饥饿/疼痛)
更多推荐

所有评论(0)