目录
一、设计背景和意义
1.1设计背景
随着科技水平的不断提升,物联网(IoT)技术在家庭生活中的应用逐渐普及,智能家居已从概念阶段走向实际部署阶段。人们在追求居住舒适性的同时,对居家安全提出了更高要求。特别是在城市化加速发展的背景下,家庭火灾、非法入侵等安全隐患频发,传统的安防手段如简单的门锁、机械报警器已难以满足现代家庭在实时监控、远程控制、数据追踪等方面的综合性安全需求。
目前市面上存在一些较为成熟的商用家庭安防产品,但多数价格较高,功能冗杂或封闭,无法根据用户个性化需求进行灵活定制。同时,这些系统往往依赖厂商的专属平台,扩展性和开发性差,导致二次开发成本高、维护不便,且对普通消费者与开发者不够友好。
1.2设计意义
在信息化与智能化高速发展的背景下,智能家居系统作为新兴技术的重要应用方向,已经逐渐从概念走向市场落地。特别是在国家推动"智慧城市""数字家庭"建设的政策导向下,家庭场景中的智能控制、远程监测、安全防护等功能逐步受到人们广泛关注。智能安防作为智能家居的重要子系统,其核心任务是通过多种信息感知技术,对可能出现的火灾、盗窃、非法入侵等安全风险进行自动识别与及时响应,从而保障家庭成员的生命财产安全,提升居住的安全性与便利性。
从现实角度来看,传统家庭安防手段存在诸多不足,例如反应滞后、手段单一、依赖人工介入,甚至在紧急情况下无法第一时间做出有效应对。而现有的高端智能安防产品虽然功能齐全,但价格昂贵、系统封闭、二次开发困难,对于普通家庭和中小型开发者而言门槛较高。因此,设计一套低成本、可定制、易扩展且功能完备的智能家庭安防系统,具有非常重要的现实意义和市场价值。
二、实物效果展示
2.1实物图片

2.2实物演示视频
【开源】基于STM32的智能家庭安防系统
三、硬件功能简介
3.1项目功能详解
- 传感器:烟雾浓度、火情、温湿度、人体红外、门磁
- 数据显示:0.96OLED屏幕
- 接入云平台:通过ESP8266 WIFI联网后,接入机智云平台
- App监控:App远程监控全部传感器数据
- 阈值、模式设定:按键或APP设定阈值、切换工作模式
- 防盗模式:门磁检测人闯入,人体红外检测人体存在,声光报警
- 回家模式:门磁和人体红外将不再检测,不因此报警
- 自动模式:检测到烟雾浓度超过阈值声光报警;检测火焰后声光报警,并且开水泵灭火
3.2元器件清单
- 主控采用STM32F103C8T6
- ESP8266-ESP01S实现联网功能
- 0.96OLED显示屏幕
- MQ-2烟雾传感器
- DHT11温湿度传感器
- 火焰传感器
- 蜂鸣器神光报警
- 门磁防盗检测
- 人体红外检测
- 继电器+水泵
四、主框图与软件流程图
主框图

流程图

五、硬件PCB展示


六、软件程序设计
cpp
#include "stm32f10x.h"
#include "main.h"
#include "delay.h"
#include "usart1.h"
#include "timer2.h"
#include "dhtll.h"
#include "oled.h"
#include "rtc.h"
#include "adc.h"
#include "key.h"
void wifiset(void);
void setzhi(void)
{
u8 t=0;
t=KEY_Scan(0); //得到键值
switch(t)
{
case KEY0_PRES:
keyflag++;
if(keyflag>8) keyflag=0;
OLED_Clear();
break;
case KEY1_PRES:
if(keyflag==1) {settemp++;if(settemp>=100)settemp=100;}
if(keyflag==2) {sethumi++;if(sethumi>=100)sethumi=100;}
if(keyflag==3) {setyw++;if(setyw>=100)setyw=100;}
if(keyflag==4) {if(tempKG==22){tempKG=11;}
else tempKG=22;
}
if(keyflag==5) {if(humiKG==22){humiKG=11;}
else humiKG=22;
}
if(keyflag==6) {if(ywKG==22){ywKG=11;}
else ywKG=22;
}
if(keyflag==7){if(hyKG==22){hyKG=11;}
else hyKG=22;
}
if(keyflag==8){if(mcKG==22){mcKG=11;}
else mcKG=22;
}
break;
case KEY2_PRES:
if(keyflag==1) {settemp--;if(settemp<=1)settemp=1;}
if(keyflag==2) {sethumi--;if(sethumi<=1)sethumi=1;}
if(keyflag==3) {setyw--;if(setyw<=1)setyw=1;}
if(keyflag==4) {if(tempKG==22){tempKG=11;}
else tempKG=22;
}
if(keyflag==5){if(humiKG==22){humiKG=11;}
else humiKG=22;
}
if(keyflag==6){if(ywKG==22){ywKG=11;}
else ywKG=22;
}
if(keyflag==7){if(hyKG==22){hyKG=11;}
else hyKG=22;
}
if(keyflag==8){if(mcKG==22){mcKG=11;}
else mcKG=22;
}
break;
default:
Delay_Ms(10);
}
}
int main(void)
{
SystemInit(); //将主频调整到72M
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init(); //延时功能初始化
Delay_Ms(500);
OLED_Init();//oled初始化
OLED_Clear();
while(DHT11_Init()) {Delay_Ms(500);}//检测DS18B20是否纯在
ds1302_init();
buzz_init();
ir_init();
mq2_init();
butt_init();
Adc_Init();
KEY_Init();
Usart2_Init(115200); //串口1功能初始化,波特率9600
TIM2_Init();
Isr_Init();
wifiinit();
showbegin();
ds1302_write_time();
ds1302_read_time();
while(1) //主循环
{
setzhi(); //设置报警值
if(keyflag==0){
DHT11_Read_Data(&temp,&humi);
YWADC = (Get_Adc_Average(9,10)); //获取计算后的带小数的实际电压值
YWADC = (YWADC -600) ;
if(YWADC<6) YWADC = 0;
YWADC = YWADC /25 ;
if(tempKG==11) {if(temp>settemp){WD=11;GPIO_SetBits(GPIOA, GPIO_Pin_7);}}
if(humiKG==11) {if(humi>sethumi){SD=11;GPIO_SetBits(GPIOA, GPIO_Pin_7);}}
if(temp<=settemp||(tempKG==22)){WD=22;}
if(humi<=sethumi||(humiKG==22)){SD=22;}
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) != 0 && GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0 && YWADC<=setyw && temp<=settemp&&humi<=sethumi) {GPIO_ResetBits(GPIOA, GPIO_Pin_7);}
if(((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)&&(hyKG==11)) || ((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) != 0)&&(mcKG==11)) ||((YWADC>setyw)&&(ywKG==11)) ){
jingbao =1;
GPIO_SetBits(GPIOA, GPIO_Pin_7);
if((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)&&(hyKG==11))//火灾
{
HY=11;
OLED_Clear();OLED_ShowCHinese(80,4,14);OLED_ShowCHinese(96,4,15);
OLED_ShowCHinese(80,2,22);OLED_ShowCHinese(96,2,23);
showhuo(); //显示火灾图片
}
if((YWADC>setyw)&&(ywKG==11))//烟雾报警
{
YW=11;
OLED_Clear();OLED_ShowCHinese(80,4,14);OLED_ShowCHinese(96,4,15);
OLED_ShowCHinese(80,2,17);OLED_ShowCHinese(96,2,18);//
showmei();
}
if((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) != 0)&&(mcKG==11))//防盗
{
MC=11;
OLED_Clear();OLED_ShowCHinese(80,4,14);OLED_ShowCHinese(96,4,15);
OLED_ShowCHinese(80,2,3);OLED_ShowCHinese(96,2,21);//
showman();
}
}else{
MC=22;YW=22;HY=22;
if(jingbao == 1){
OLED_Clear();
jingbao = 0;
}
OLED_ShowCHinese(0,2,9);OLED_ShowCHinese(16,2,10);//温度
OLED_ShowChar(32,2,':');OLED_ShowNum(40,2,temp,2,16);
OLED_ShowChar(56,2,'C');
OLED_ShowCHinese(0,4,11);OLED_ShowCHinese(16,4,10);//湿度
OLED_ShowChar(32,4,':');OLED_ShowNum(40,4,humi,2,16);
OLED_ShowChar(56,4,'%');
OLED_ShowCHinese(0,6,12);OLED_ShowCHinese(16,6,13);//烟雾
OLED_ShowChar(32,6,':');OLED_ShowChar(56,6,'%');
OLED_ShowNum(40,6,YWADC,2,16);
showtime();
}
wifiset();
}
}
}
七、项目资料包内容
