当前位置: 首页 > news >正文

基于STM32的宿舍防火防盗系统设计

引言

本项目设计了一个基于STM32的宿舍防火防盗系统,能够实时监测宿舍内的烟雾、火灾等火情以及非法入侵,具备报警和远程通知功能。系统集成了烟雾传感器、红外传感器、摄像头、蜂鸣器、RFID 读卡器、Wi-Fi 模块等,用于检测火灾、入侵行为,并在紧急情况下发出报警,通知宿舍管理人员进行处理,确保宿舍安全。

环境准备

1. 硬件设备
  • STM32F103C8T6 开发板(或其他 STM32 系列)
  • 烟雾传感器(如 MQ-2,用于检测烟雾和火灾)
  • 红外传感器(用于检测非法入侵或活动)
  • 摄像头模块(如 OV7670,用于拍摄入侵者照片)
  • RFID 读卡器(如 MFRC522,用于宿舍门禁管理)
  • Wi-Fi 模块(如 ESP8266,用于远程通知)
  • 蜂鸣器(用于发出报警声音)
  • OLED 显示屏(用于显示系统状态)
  • USB-TTL 串口调试工具
  • 电阻、杜邦线、面包板等基础电子元件
2. 软件工具
  • STM32CubeMX:用于初始化 STM32 外设。
  • Keil uVision 或 STM32CubeIDE:用于编写和下载代码。
  • ST-Link 驱动程序:用于下载程序到 STM32。

项目实现

1. 硬件连接
  • 烟雾传感器连接:将 MQ-2 烟雾传感器的模拟输出引脚连接到 STM32 的 ADC 输入引脚(如 PA0),用于检测宿舍内的烟雾浓度。
  • 红外传感器连接:将红外传感器的数字输出引脚连接到 STM32 的 GPIO(如 PA1),用于检测宿舍内是否有非法入侵者。
  • 摄像头模块连接:将摄像头的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于拍摄入侵者的照片。
  • RFID 读卡器连接:将 RFID 模块的 SPI 接口连接到 STM32 的 SPI 接口(如 PA4、PA5、PA6 和 PA7),用于宿舍门禁管理。
  • Wi-Fi 模块连接:将 Wi-Fi 模块的 TX/RX 引脚连接到 STM32 的 USART 接口(如 PA9 和 PA10),用于上传火情、入侵等警报信息。
  • 蜂鸣器连接:将蜂鸣器的控制引脚连接到 STM32 的 GPIO(如 PA2),用于报警提示。
  • OLED 显示屏连接:将 OLED 的 SDA 和 SCL 引脚连接到 STM32 的 I2C 接口(如 PB6 和 PB7),用于显示当前的系统状态。
2. STM32CubeMX 配置
  • 打开 STM32CubeMX,选择你的开发板型号。
  • 配置系统时钟为 HSI,确保系统稳定运行。
  • 配置 GPIO 引脚用于控制红外传感器、蜂鸣器和其他外设。
  • 配置 ADC,用于读取烟雾传感器的数据。
  • 配置 I2C,用于与 OLED 显示屏、摄像头通信。
  • 配置 SPI,用于与 RFID 读卡器通信。
  • 配置 USART,用于与 Wi-Fi 模块通信。
  • 生成代码,选择 Keil 或 STM32CubeIDE 作为工具链。
3. 编写主程序

在生成的项目基础上,编写烟雾检测、入侵检测、RFID 门禁管理、远程通知、状态显示和报警提示的代码。以下是宿舍防火防盗系统的基本代码示例:

#include "stm32f1xx_hal.h"
#include "smoke_sensor.h"
#include "rfid.h"
#include "infrared.h"
#include "wifi.h"
#include "oled.h"
#include "gpio.h"// 定义报警阈值
#define SMOKE_THRESHOLD 300    // 烟雾浓度报警阈值
#define MOTION_DETECTED 1      // 检测到入侵标志// 函数声明
void System_Init(void);
void Detect_Smoke(void);
void Detect_Motion(void);
void Identify_User(void);
void Remote_Notify(void);
void Display_Status(void);
void Trigger_Alarm(void);// 全局变量
uint16_t smoke_level = 0;      // 烟雾传感器检测的烟雾浓度
uint8_t motion_detected = 0;   // 红外传感器检测的非法入侵标志
uint8_t rfid_valid = 0;        // RFID 门禁卡是否合法
uint8_t alarm_triggered = 0;   // 报警标志void System_Init(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();MX_I2C1_Init();MX_USART1_UART_Init();MX_SPI1_Init();OLED_Init();SmokeSensor_Init();RFID_Init();Infrared_Init();WiFi_Init();OLED_ShowString(0, 0, "Dorm Guard Ready");
}// 烟雾检测
void Detect_Smoke(void)
{smoke_level = SmokeSensor_Read();  // 读取烟雾传感器数据if (smoke_level > SMOKE_THRESHOLD){Trigger_Alarm();  // 触发报警Remote_Notify();  // 远程通知OLED_ShowString(0, 2, "Fire Detected");}else{OLED_ShowString(0, 2, "No Fire");}
}// 入侵检测
void Detect_Motion(void)
{motion_detected = Infrared_Detect();  // 通过红外传感器检测是否有非法入侵if (motion_detected == MOTION_DETECTED){Trigger_Alarm();  // 触发报警Remote_Notify();  // 远程通知OLED_ShowString(0, 3, "Intruder Alert");}else{OLED_ShowString(0, 3, "No Intruder");}
}// RFID 门禁验证
void Identify_User(void)
{rfid_valid = RFID_Read();  // 读取 RFID 卡片,判断是否为合法用户if (rfid_valid){OLED_ShowString(0, 4, "Access Granted");}else{OLED_ShowString(0, 4, "Access Denied");}
}// 远程通知
void Remote_Notify(void)
{WiFi_SendData(smoke_level, motion_detected);  // 通过 Wi-Fi 发送报警数据
}// 显示系统状态
void Display_Status(void)
{OLED_Clear();OLED_ShowString(0, 0, "Smoke: ");OLED_ShowNumber(64, 0, smoke_level, 4);if (alarm_triggered){OLED_ShowString(0, 1, "ALARM TRIGGERED");}else{OLED_ShowString(0, 1, "System Normal");}
}// 触发报警
void Trigger_Alarm(void)
{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);  // 蜂鸣器报警HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);  // 关闭蜂鸣器alarm_triggered = 1;
}int main(void)
{System_Init();while (1){Detect_Smoke();        // 检测烟雾Detect_Motion();       // 检测入侵Identify_User();       // RFID 门禁验证Display_Status();      // 显示系统状态HAL_Delay(1000);       // 每秒更新一次状态}
}
4. 各模块代码
烟雾检测

通过烟雾传感器检测宿舍内的空气质量,判断是否有火灾或烟雾浓度超标情况:

#include "smoke_sensor.h"// 初始化烟雾传感器
void SmokeSensor_Init(void)
{// 配置 ADC 接口,初始化烟雾传感器
}// 读取烟雾浓度
uint16_t SmokeSensor_Read(void)
{// 读取烟雾传感器的数据return 150;  // 假设烟雾浓度为150
}
红外传感器入侵检测

通过红外传感器检测宿舍内是否有非法入侵或异常活动:

#include "infrared.h"// 初始化红外传感器
void Infrared_Init(void)
{// 配置 GPIO 接口,初始化红外传感器
}// 检测是否有入侵
uint8_t Infrared_Detect(void)
{// 检测红外传感器的输出,判断是否有非法入侵return 0;  // 假设没有检测到入侵
}
RFID 门禁管理

通过 RFID 读卡器验证进入宿舍的人员是否具有合法权限:

#include "rfid.h"// 初始化 RFID 模块
void RFID_Init(void)
{// 配置 SPI 接口,初始化 RFID 模块
}// 读取 RFID 卡片
uint8_t RFID_Read(void)
{// 读取 RFID 卡片数据,返回是否为合法用户return 1;  // 假设读取到合法用户卡
}
Wi-Fi 远程通知

通过 Wi-Fi 模块将检测到的火灾和入侵等报警信息上传到远程服务器或发送给管理员:

#include "wifi.h"// 初始化 Wi-Fi 模块
void WiFi_Init(void)
{// 配置 USART 接口,初始化 Wi-Fi 模块
}// 发送报警数据
void WiFi_SendData(uint16_t smoke_level, uint8_t motion_detected)
{// 通过 Wi-Fi 将烟雾浓度和入侵状态数据上传
}
OLED 显示

OLED 显示屏用于显示当前的系统状态,包括烟雾浓度、门禁验证结果和入侵报警状态:

#include "oled.h"// 初始化 OLED 显示屏
void OLED_Init(void)
{// OLED 初始化代码
}// 显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, const char *str)
{// 在 OLED 显示屏上显示字符串
}// 显示整数
void OLED_ShowNumber(uint8_t x, uint8_t y, uint32_t num, uint8_t len)
{// 显示整数
}// 清屏
void OLED_Clear(void)
{// 清除 OLED 显示内容
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

系统工作原理

  • 烟雾检测:系统通过烟雾传感器检测宿舍内的空气质量,当检测到烟雾浓度超过设定阈值时,触发报警并通过Wi-Fi发送警报信息给管理员,提醒宿舍可能发生火灾。

  • 非法入侵检测:通过红外传感器检测宿舍内是否有人进入,特别是在无人情况下的非法入侵。如果检测到异常人员活动,系统会触发报警,并拍摄照片通过Wi-Fi上传至远程服务器。

  • RFID门禁验证:通过RFID模块,系统能够识别进入宿舍的人员是否合法。未授权人员试图进入时,系统会拒绝访问,并可能触发报警。

  • 远程通知和监控:系统通过Wi-Fi模块将所有警报信息和监控数据上传到远程服务器,宿舍管理员可以远程监控宿舍的安全状态。

  • 报警提示:一旦检测到火灾或入侵,系统会立即通过蜂鸣器发出声音警报,提醒宿舍内的人员注意。

常见问题与解决方法

1. 烟雾传感器误报
  • 问题原因:烟雾传感器灵敏度过高或受到其他物质干扰。
  • 解决方法:调整传感器的灵敏度或使用多传感器融合技术减少误报。
2. 红外传感器无法检测
  • 问题原因:红外传感器位置安装不当或灵敏度不足。
  • 解决方法:调整传感器的安装角度,并确保灵敏度设置合适。
3. RFID读取失败
  • 问题原因:RFID模块与卡片的距离过远或通信失败。
  • 解决方法:检查RFID模块的天线位置,并确保卡片距离足够近。
4. Wi-Fi连接不稳定
  • 问题原因:Wi-Fi信号弱或网络配置错误。
  • 解决方法:确保Wi-Fi模块信号强度足够,并正确配置网络连接参数。

扩展功能

  • 视频监控:增加视频监控模块,实现对宿舍内的实时视频监控,确保安全。

  • 温度检测:可以增加温度传感器,配合烟雾传感器,在检测火灾时更准确地判断危险情况。

  • 手机APP控制:开发手机APP,让宿舍管理员或学生可以通过APP查看宿舍的安全状态,或远程控制门禁系统。

结论

通过本项目,我们设计了一个基于STM32的宿舍防火防盗系统,能够实时监控宿舍内的火灾、烟雾和非法入侵情况,并具备远程报警功能。系统集成了烟雾检测、门禁管理、报警提示和远程监控等功能,有效提高了宿舍的安全性和管理效率。未来可以通过增加视频监控、手机APP等功能,进一步提升系统的智能化和便捷性。


http://www.mrgr.cn/news/55311.html

相关文章:

  • CRC-校验
  • VTK的学习方法-第一类型应用
  • ScrollView 真机微信小程序无法隐藏滚动条
  • filebeat接入nginx和mysql获取日志
  • Unity3D 游戏框架设计二进制序列化器详解
  • PostgreSQL的学习心得和知识总结(一百五十五)|[performance]优化期间将 WHERE 子句中的 IN VALUES 替换为 ANY
  • 双十一购物节有哪些好物值得入手?2024双十一好物清单合集分享
  • ‌‌现货白银价格怎么算出来的?
  • AI Weekly2:过去一周重要的AI资讯汇总
  • MySql数据库left join中添加子查询
  • JVM参数
  • 终于把Vision Transformer(ViT)搞懂了!
  • 估值与周期风险评估(2024/09/29)
  • Android面试之5个性能优化相关的深度面试题
  • Shell学习——shell中的变量
  • 1.深入理解MySQL索引底层数据结构与算法
  • FuLID-Flux在ComfyUI下报错的问题解决办法
  • 贪心day6
  • 2024年双11买什么最划算?双十一购物清单,双十一囤货清单排名
  • 高速缓冲存储器Cache是如何工作的、主要功能、高速缓冲存储器Cache和主存有哪些区别
  • 如何通过ChatGPT快速编写代码、解决bug、优化代码、推荐技术解决方案(完整教程)
  • 【AscendC】配置ModelArts的算子开发环境
  • Transformer(Vit+注意力机制)
  • JDBC——(3)
  • 如何修改Ubuntu系统的共享内存shm大小
  • 在西班牙买可乐喝时常用的句子,柯桥西班牙语培训