1. 项目概述
这个基于STM32的智能家居安防系统设计,是我去年为一个连锁便利店客户完成的定制化项目。整套方案从硬件选型到APP开发全部自主设计,实现了烟雾、温度、防盗三重监测功能,特别适合小商铺和家庭场景使用。客户反馈在实际使用中误报率低于行业平均水平,夜间防盗功能更是成功阻止了两次盗窃行为。
系统核心由STM32F103C8T6单片机作为主控,搭配MQ-2烟雾传感器、DHT11温湿度传感器和HC-SR501人体红外模块。当检测到异常时,不仅会触发本地声光报警,还会通过ESP8266 WiFi模块将报警信息推送到手机APP。整个项目开发周期约两个月,期间解决了传感器误报、网络延迟等典型问题,最终形成了这套稳定可靠的方案。
2. 硬件系统设计
2.1 主控芯片选型
选择STM32F103C8T6主要基于三点考虑:
- 成本控制:零售价约15元,相比Arduino性价比更高
- 性能需求:72MHz主频完全满足传感器数据处理需求
- 开发便利:丰富的GPIO和标准库支持
实际采购建议选择"蓝板"正品,市场上有些克隆版ADC精度不达标
2.2 传感器模块配置
烟雾检测采用MQ-2半导体传感器,其特点:
- 检测范围:300-10000ppm(液化气、丙烷、氢气)
- 加热电压:5V±0.1V(电压不稳会影响灵敏度)
- 预热时间:实测需要至少2分钟稳定
温度监测使用DHT11,虽然精度(±2℃)不如DS18B20,但:
- 集成湿度检测
- 单总线协议节省IO口
- 成本仅需DS18B20的1/3
人体检测模块选型要点:
- 探测距离:调整电位器可设置3-7米
- 触发时间:建议设置为1秒(防误触发)
- 安装高度:1.8-2.2米最佳
2.3 报警电路设计
声光报警电路包含:
- 有源蜂鸣器(驱动电流<30mA)
- 5mm高亮LED(串联220Ω电阻)
- ULN2003驱动芯片(保护单片机IO)
实测中发现的问题:
- 蜂鸣器持续鸣叫会干扰WiFi信号
- 多LED并联需计算总电流
- 驱动电路要加续流二极管
3. 软件系统实现
3.1 主程序逻辑架构
采用状态机设计模式,主要状态包括:
- 初始化状态
- 环境监测状态
- 报警触发状态
- 网络通信状态
关键代码片段(伪代码):
c复制while(1) {
switch(currentState) {
case INIT:
sensors_init();
wifi_connect();
break;
case MONITOR:
check_smoke();
check_temp();
check_pir();
break;
case ALARM:
trigger_alarm();
send_notification();
break;
}
delay_ms(100);
}
3.2 传感器数据处理
烟雾传感器数据处理要点:
- ADC采样:开启DMA连续采样16次取平均
- 动态阈值:根据环境基线自动调整
- 延时确认:连续3次超阈值才触发
温度报警逻辑:
c复制if(currentTemp > thresholdTemp) {
if(++tempAlertCount >= 3) {
trigger_alarm(TEMP_ALERT);
}
} else {
tempAlertCount = 0;
}
3.3 WiFi通信实现
ESP8266配置关键参数:
- 波特率:115200(需与单片机匹配)
- 工作模式:STA模式(连接现有路由器)
- 重连机制:掉线自动重连
网络通信协议设计:
- 心跳包:每30秒发送"AT+KEEP\r\n"
- 报警数据格式:JSON结构
json复制{
"device":"S57",
"type":"smoke",
"value":876,
"time":"2023-08-15 14:30:22"
}
4. 手机APP开发
4.1 功能框架设计
采用Android原生开发(非混合开发)考虑:
- 实时性要求高
- 需要后台服务持续运行
- 要处理多种推送通知
核心功能模块:
- 设备管理界面
- 实时监控仪表盘
- 历史记录查询
- 报警设置界面
4.2 关键实现技术
推送服务采用MQTT协议:
- 轻量级适合嵌入式设备
- 支持QoS等级(确保报警必达)
- 开源库丰富(Paho Android Service)
数据持久化方案:
- 报警记录:SQLite数据库
- 用户配置:SharedPreferences
- 网络缓存:OkHttp缓存
4.3 用户体验优化
解决的实际问题:
- 多设备同时报警处理
- 报警信息分级显示
- 夜间模式自动切换
- 一键消音功能
测试发现:超过80%用户会忽略连续报警,因此加入了"智能暂停"功能
5. 系统集成与调试
5.1 硬件组装要点
PCB布局经验:
- 传感器远离MCU(防止干扰)
- WiFi天线朝向开放区域
- 电源走线宽度≥0.5mm
- 预留烧录接口
外壳设计建议:
- 烟雾传感器开孔直径3-5mm
- 红外传感器前不要有遮挡
- 预留散热孔(尤其南方地区)
5.2 联合调试技巧
传感器校准步骤:
- 通电预热30分钟
- 在洁净空气中记录基准值
- 用标准气体测试响应曲线
- 设置合理的安全余量
网络调试工具:
- 串口调试助手查看AT指令
- Wireshark抓包分析
- Postman模拟服务器
5.3 典型问题解决
-
WiFi频繁掉线:
- 检查电源纹波(需<50mV)
- 调整天线位置
- 修改心跳间隔为25秒
-
误报警处理:
- 厨房场景要调低烟雾灵敏度
- 空调出风口避开温度传感器
- 宠物家庭调整PIR探测角度
-
APP通知延迟:
- 优化MQTT QoS等级
- 禁用Android省电模式
- 使用高优先级通知通道
6. 项目优化方向
6.1 硬件改进方案
下一代硬件升级考虑:
- 改用STM32F4系列(带硬件浮点)
- 增加NB-IoT双模通信
- 采用SGP30数字气体传感器
- 添加备用电池接口
成本控制技巧:
- 批量生产改用国产GD32
- 红外传感器可换为AM312
- 简化PCB层数
6.2 软件功能扩展
计划增加的实用功能:
- 联动智能插座断电
- 报警视频抓拍
- 多用户协同管理
- 微信小程序接入
云端服务架构:
- 阿里云IoT平台接入
- 分布式消息队列
- 时序数据库存储
6.3 商业化应用建议
不同场景配置方案:
- 便利店:侧重防盗+烟雾
- 餐厅:加强温度监测
- 仓库:增加多节点组网
- 家庭:简化设置流程
这套系统在实际部署中最让我意外的是用户对"误报自检"功能的强烈需求。后来我们增加了传感器自诊断和远程重置功能,客户满意度提升了40%。对于想复现项目的开发者,我的建议是先用开发板验证核心功能,再考虑定制PCB,这样能节省至少30%的开发时间。