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

【STM32项目开源】基于STM32的智能家居安防系统

目录

一、设计背景和意义

1.1设计背景

1.2设计意义

二、实物效果展示

2.1实物图片

2.2实物演示视频

三、硬件功能简介

3.1项目功能详解

3.2元器件清单

四、主框图与软件流程图

五、硬件PCB展示

六、软件程序设计

七、项目资料包内容

         资料获取:查看主页介绍“充哥单片机设计”


一、设计背景和意义

1.1设计背景

        随着城市化进程的加快和人们生活水平的不断提升,居民对居住环境的安全性、舒适性和智能化提出了更高的要求。智能家居作为物联网在家庭场景中的具体应用,已逐渐从智能照明、智能家电控制延伸到家庭安防、环境监测等领域。其中,智能安防系统作为智能家居的核心组成部分,直接关系到用户的人身与财产安全,因而越来越受到研究者与市场的高度关注。

        目前,传统的家居安防系统大多以单一功能设备为主,如红外报警器、门磁报警器、烟雾探测器等,这些设备通常无法互联互通,缺乏智能联动和远程监控能力,无法实时响应突发事件。同时,部分高端智能安防系统虽然功能完善,但其高昂的价格、复杂的部署以及用户操作门槛,限制了其在普通家庭中的普及。

1.2设计意义

        该系统设计具有良好的扩展性和移植性,不仅能够满足家庭场景中的基本安防需求,还可灵活应用于出租屋、公寓、仓库、小型办公室等多种场景,推动智能安防的普及化、平民化发展。此外,该课题也具有一定的学术研究与工程实践价值,涵盖嵌入式编程、传感器数据采集与处理、WiFi通信协议、云平台集成、人机交互设计等关键技术,能够有效锻炼学生的综合设计能力与系统集成能力,是高校物联网与智能控制方向学生实践与科研结合的良好项目。

二、实物效果展示

2.1实物图片

2.2实物演示视频

【开源】基于STM32的智能家居安防系统

三、硬件功能简介

3.1项目功能详解

1)传感器:温湿度、烟雾、火焰、门磁
2)密码锁开门:薄膜按键密码开门
3)数据显示:0.96OLED屏幕
4)执行机构:声光报警
5)接入云平台:系统通过ESP8266 WIFI联网后,接入机智云平台
6)App监控:通过App远程监控全部传感器数据并设定阈值、切换模式
7)工作模式:回家模式下,将不再检测门磁状态,不会开启声光报警;离家模式,输入错误密码,将会自动开启声光报警,门磁触发后,将会自动声光报警
8)自动模式:检测数据到超过阈值,火焰,则会自动开启声光报警

3.2元器件清单

  1. 主控STM32F103C8T6
  2. 0.96OLED显示屏幕
  3. DHT11温湿度传感器
  4. MQ-2烟雾传感器
  5. 火焰传感器
  6. 门磁防盗检测模块
  7. 3*4薄膜按键
  8. 蜂鸣器报警模块

四、主框图与软件流程图

主框图

流程图

五、硬件PCB展示

六、软件程序设计

#include "delay.h"
#include "sys.h"
#include "bmp.h"
#include "usart.h"
#include "dht11.h"
#include "control.h"
#include "adc.h"
#include "IoData.h"
#include "key.h"
#include "timer.h"
#include "oled.h"/****  数据变量  ****/
char pass_init[6] = {1,2,3,4,5,6};        //初始解锁密码
char pass_word[6] = {0,0,0,0,0,0};
int Pass_flag = 1;                //门锁状态  1锁    0开
int pass_num = 0;int temp_door = 40;
int humi_door = 90;
int smoke_door = 2000;	//烟雾浓度阈值int home_mode = 0;	//安防状态	0回家模式	1安防模式
int auto_mode = 0;	//自动模式	0手动模式	1自动模式uint8_t water_flag = 0;/****  菜单变量  ****/
uint8_t keu_num = 0;
uint8_t page_num = 1;
uint8_t option = 0;/****  功能函数声明  ****/
void get_all_sensor_data();		//传感器数据采集
void Sensor_Data_Handle();		//不同模式下控制效果
void Key_event_handle(void);	//按键功能函数void OLED_Show_FirstPage();		//第一屏显示内容
void OLED_Show_SecondPage();	//第二屏显示内容
void OLED_Show_ThirdPage();		//第三屏显示内容
void OLED_Show_OpenPage();		//第四屏显示内容void PassWord_Open(void);		//密码解锁函数int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//改变指定管脚的映射,JTAG-DP 禁用 + SW-DP 使能	delay_init();		//系统延时函数初始化OLED_Init();		//屏幕初始化uart3_init(115200);	//串口3初始化,波特率115200uart1_init(115200);	//串口1初始化,波特率115200uart2_init(9600);	//串口2初始化,波特率9600Control_Init();		//蜂鸣器初始化Adc_Init();			//烟雾浓度、火情检测初始化KEY_Init();			//按键初始化DHT11_Init();		//DHT11温湿度初始化Beep =0;TIME_Config();		//定时器初始化while(1)	{PassWord_Open();		//密码解锁    Key_event_handle();		//按键监测Sensor_Data_Handle();	//数据处理get_all_sensor_data();	//传感器数据采集if(page_num == 1){		//屏幕更新OLED_Show_FirstPage();}else if(page_num == 2){OLED_Show_SecondPage();}else if(page_num == 3){OLED_Show_ThirdPage();}}
}void PassWord_Open(void)
{while(Pass_flag){OLED_Clear();while(1){		//输入6位数密码,大于0pass_word[pass_num] = KeyScan(0);if(pass_word[pass_num]==10){		//按*号键重新输入密码pass_num=0;memset(pass_word,0,6*sizeof(char));Beep=1;delay_ms(10);Beep=0;			}if(pass_word[pass_num]>0){			//pass_num++;}OLED_Show_OpenPage();if(pass_num>5)break;				//输入6位密码后跳出循环进行判断}//密码正确if(pass_word[0]==pass_init[0]&&pass_word[1]==pass_init[1]&&pass_word[2]==pass_init[2]&&pass_word[3]==pass_init[3]&&pass_word[4]==pass_init[4]&&pass_word[5]==pass_init[5]){Pass_flag = 0;pass_num=0;OLED_Clear();memset(pass_word,0,6*sizeof(char));delay_ms(1000);home_mode=0;}else {    //密码错误Beep=1;pass_num=0;memset(pass_word,0,6*sizeof(char));delay_ms(1000);Beep=0;}}
}void Key_event_handle(void)
{keu_num = KEY_Scan(0);		//按键扫描赋值switch(keu_num){case 1: 		//按键1按下/* ------------- 页面切换 -------------- */if(page_num == 1){if(home_mode==1){Pass_flag=1;}else{page_num = 2;OLED_Clear();OLED_Show_SecondPage();}}else if(page_num == 2){option++;if(option>3){option=0;page_num = 1;OLED_Clear();OLED_Show_FirstPage();}else OLED_Show_SecondPage();}break;case 2:		//按键2按下if(page_num==1){auto_mode=!auto_mode;}else if(page_num==2){if(option==1)smoke_door+=15;else if(option==2)temp_door++;else if(option==3)humi_door++;}break;case 3:		//按键3按下if(page_num==1){home_mode=!home_mode;}else if(page_num==2){if(option==1)smoke_door-=15;else if(option==2)temp_door--;else if(option==3)humi_door--;}break;case 4:		//按键4按下break;}
}void get_all_sensor_data()
{DHT11_Read_Data(&temp,&hum);    //获取温湿度数据Get_MQ_Value(&MQ_Value);  		//获取烟雾数据Get_Fire_Value(&Fire_status);	//获取火焰数据Get_door1();					//门磁开关检测
}void Sensor_Data_Handle()
{/*离家模式下 且 检测到门磁开关为开安放模式下 检测到有火情 或烟雾浓度超过阈值 或温度超过阈值 或湿度超过阈值打开蜂鸣器报警*/if((home_mode==1&&door1_status==0)||(auto_mode==1&&(Fire_status==1||MQ_Value>smoke_door||temp>temp_door||hum>humi_door))){Beep = 1;}else Beep = 0;
}

七、项目资料包内容

         资料获取:查看主页介绍“充哥单片机设计”

http://www.dtcms.com/a/464774.html

相关文章:

  • 网络营销方式思维导图aso优化榜单
  • HKM9000视频处理卡
  • 机器视觉的平板显示屏加强膜贴合应用
  • 安卓玩机工具----手机秒变电脑麦克风
  • Win10系统笔记本电脑设置合上盖子自动锁屏
  • LLaMA: Open and Efficient Foundation Language Models 论文阅读
  • LeetCode——Hot 100【全排列】
  • 云南大理拍婚纱照价格表建网站优化
  • 双目测距实战1-环境配置
  • 2025人工智能在无人机数据处理中的应用
  • 阿里开源Qwen3-Omni-30B-A3B三剑客——Instruct、Thinking 和 Captioner
  • 长春建站程序湖南网络科技有限公司
  • xtuoj Can you raed it croretcly?
  • 异构动作空间
  • 【Nginx开荒攻略】Nginx虚拟主机配置:从域名、端口到IP的完整指南
  • 小杰深度学习(nine)——CUDA与CuDNN安装
  • 鸿蒙NEXT USB Host模式开发完全指南
  • MinerU2.5 windows 本地部署
  • UIkit中使用新版UICollectionViewCompositionalLayout进行复杂布局(二)
  • 网站建设的技术问题苏州吴江建设局招标网站
  • 河南省村镇建设处网站网站配色与布局 教材
  • Prometheus运维之路(ES监控接入)
  • OpenAMP专题(一):一文了解OpenAMP全貌
  • C++ 中 rfind 方法详解
  • SpringBoot 教程(十四) SpringBoot之集成 Redis(优化版)
  • 【Linux】线程同步与互斥(上)
  • 图观 模型编辑器
  • Win11 输入延迟与鼠标卡顿:系统化排查与优化指南
  • 【开题答辩全过程】以 爱运动健身小程序的设计与实现为例,包含答辩的问题和答案
  • Linux 内核IIO sensor驱动