1. 项目概述
去年帮朋友改造老房子时,发现传统安防系统存在布线复杂、功能单一的问题。于是我用STM32设计了一套低成本智能安防方案,整合了烟雾报警、门窗磁感应和远程监控功能。这套系统最大的特点是采用模块化设计,可以根据实际需求灵活增减传感器,通过Wi-Fi实现手机端实时告警,整套硬件成本控制在200元以内。
2. 系统架构设计
2.1 核心硬件选型
主控采用STM32F103C8T6最小系统板,这颗Cortex-M3内核的MCU性价比极高(零售价约15元),具有:
- 72MHz主频满足实时处理需求
- 64KB Flash存储程序代码
- 20KB RAM运行多任务
- 37个GPIO接口连接各类传感器
传感器配置方案:
- HC-SR501人体红外模块(门窗入侵检测)
- MQ-2烟雾传感器(厨房安全监控)
- 蜂鸣器报警模块(现场声光报警)
- ESP8266 WiFi模块(数据传输)
2.2 软件架构设计
采用分层架构实现功能解耦:
code复制应用层:报警策略管理、用户交互
业务层:传感器数据处理、网络通信
驱动层:各传感器驱动程序
硬件层:STM32外设控制
关键设计决策:
- 使用FreeRTOS实现多任务调度
- 采用状态机模式处理报警事件
- 数据协议使用精简版MQTT
3. 核心功能实现
3.1 环境监测模块
烟雾传感器电路设计要点:
c复制// 电压分压电路计算
#define RL 10 // 负载电阻(kΩ)
#define R0 9.83 // 传感器洁净电阻
float RS = (5.0-VRL)/VRL * RL; // 实时电阻值
float ratio = RS/R0;
float ppm = 1538.46 * pow(ratio, -1.709); // 烟雾浓度换算
报警阈值设置经验:
- 厨房环境建议设置800ppm触发
- 卧室建议设置500ppm触发
- 需定期用酒精测试传感器灵敏度
3.2 入侵检测模块
人体红外传感器调试技巧:
- 调节电位器改变检测距离(建议2-5米)
- 安装时避免正对窗户防止误报
- 使用遮光罩减少环境光干扰
状态检测代码示例:
c复制void EXTI0_IRQHandler() {
if(EXTI_GetITStatus(EXTI_Line0) != RESET) {
sendAlert("Door opened!");
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
3.3 无线通信模块
ESP8266配置关键步骤:
- 使用AT指令初始化:
code复制AT+CWMODE=3 // 设置STA+AP模式 AT+CWJAP="SSID","password" // 连接WiFi - MQTT协议精简实现:
- 固定报头长度2字节
- 主题名限制在20字符内
- QoS设置为0(最多交付一次)
4. 电源管理系统
4.1 电路设计
采用双电源方案:
- 主电路:220V转5V/2A模块供电
- 备用电源:18650锂电池组(7.4V)
- 使用TP4056充电管理芯片
关键参数计算:
code复制总功耗 = MCU(80mA) + WiFi(70mA) + 传感器(50mA) ≈ 200mA
电池容量 = 2000mAh → 理论续航10小时
4.2 低功耗优化
实测待机电流从58mA降至12mA的技巧:
- 关闭未用外设时钟:
c复制
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, DISABLE); - 使用停机模式:
c复制
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); - 传感器轮询间隔从1s改为5s
5. 外壳与安装规范
5.1 3D打印设计
使用FDM打印机注意事项:
- 壁厚≥2mm保证结构强度
- 开孔直径比传感器大0.5mm
- 推荐PLA+材料(耐温60℃)
我的主机外壳参数:
- 尺寸:100×80×40mm
- 安装孔距:75×60mm
- 散热孔直径:3mm(间距10mm)
5.2 现场安装指南
传感器布置原则:
- 门窗磁铁间距≤15mm
- 烟雾传感器距天花板30-50cm
- 避免将主机靠近金属物体
典型问题处理:
- WiFi信号弱:添加铝箔反射板
- 误报频繁:调整传感器灵敏度
- 电池耗电快:检查休眠模式配置
6. 移动端应用开发
使用MIT App Inventor快速搭建控制界面,关键功能块:
- 报警消息显示列表
- 手动布防/撤防按钮
- 传感器状态指示灯
- 历史记录查询
数据格式示例:
json复制{
"devID": "ST32_A001",
"alertType": "smoke",
"value": 875,
"timestamp": "2023-08-20T14:30:22"
}
7. 实测性能数据
连续72小时压力测试结果:
| 项目 | 指标 | 备注 |
|---|---|---|
| 报警响应时间 | ≤1.2s | 从触发到手机收到推送 |
| 误报率 | 2.3% | 主要来自宠物触发 |
| 网络断连恢复 | 8s | 自动重连机制 |
| 备用电源续航 | 9.5h | 持续报警状态 |
8. 常见问题解决方案
-
ESP8266频繁掉线
- 检查电源纹波(建议加100μF电容)
- 修改AT指令:AT+CIPRECONNCFG=1,60,10
-
STM32程序跑飞
- 启用看门狗:
c复制IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_256); IWDG_SetReload(0xFFF); IWDG_ReloadCounter();
- 启用看门狗:
-
传感器读数异常
- MQ-2需要预热3分钟
- 人体红外模块避免阳光直射
- 定期用棉签清洁传感器表面
这套系统经过三个月的实际运行验证,成功预警了两次厨房忘关火事件。最让我意外的是,通过优化电源管理,原本预计需要每周充电的备用电池,实际使用中可以坚持两周以上。下一步计划加入温湿度传感器实现更全面的环境监控。