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

目录

一、设计背景和意义

1.1设计背景

1.2设计意义

二、实物效果展示

2.1实物图片

2.2实物演示视频

三、硬件功能简介

3.1项目功能详解

3.2元器件清单

四、主框图与软件流程图

五、硬件PCB展示

六、软件程序设计

七、项目资料包内容

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


一、设计背景和意义

1.1设计背景

随着科技水平的不断提升,物联网(IoT)技术在家庭生活中的应用逐渐普及,智能家居已从概念阶段走向实际部署阶段。人们在追求居住舒适性的同时,对居家安全提出了更高要求。特别是在城市化加速发展的背景下,家庭火灾、非法入侵等安全隐患频发,传统的安防手段如简单的门锁、机械报警器已难以满足现代家庭在实时监控、远程控制、数据追踪等方面的综合性安全需求。

目前市面上存在一些较为成熟的商用家庭安防产品,但多数价格较高,功能冗杂或封闭,无法根据用户个性化需求进行灵活定制。同时,这些系统往往依赖厂商的专属平台,扩展性和开发性差,导致二次开发成本高、维护不便,且对普通消费者与开发者不够友好。

1.2设计意义

在信息化与智能化高速发展的背景下,智能家居系统作为新兴技术的重要应用方向,已经逐渐从概念走向市场落地。特别是在国家推动"智慧城市""数字家庭"建设的政策导向下,家庭场景中的智能控制、远程监测、安全防护等功能逐步受到人们广泛关注。智能安防作为智能家居的重要子系统,其核心任务是通过多种信息感知技术,对可能出现的火灾、盗窃、非法入侵等安全风险进行自动识别与及时响应,从而保障家庭成员的生命财产安全,提升居住的安全性与便利性。

从现实角度来看,传统家庭安防手段存在诸多不足,例如反应滞后、手段单一、依赖人工介入,甚至在紧急情况下无法第一时间做出有效应对。而现有的高端智能安防产品虽然功能齐全,但价格昂贵、系统封闭、二次开发困难,对于普通家庭和中小型开发者而言门槛较高。因此,设计一套低成本、可定制、易扩展且功能完备的智能家庭安防系统,具有非常重要的现实意义和市场价值。

二、实物效果展示

2.1实物图片

2.2实物演示视频

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

三、硬件功能简介

3.1项目功能详解

  1. 传感器:烟雾浓度、火情、温湿度、人体红外、门磁
  2. 数据显示:0.96OLED屏幕
  3. 接入云平台:通过ESP8266 WIFI联网后,接入机智云平台
  4. App监控:App远程监控全部传感器数据
  5. 阈值、模式设定:按键或APP设定阈值、切换工作模式
  6. 防盗模式:门磁检测人闯入,人体红外检测人体存在,声光报警
  7. 回家模式:门磁和人体红外将不再检测,不因此报警
  8. 自动模式:检测到烟雾浓度超过阈值声光报警;检测火焰后声光报警,并且开水泵灭火

3.2元器件清单

  1. 主控采用STM32F103C8T6
  2. ESP8266-ESP01S实现联网功能
  3. 0.96OLED显示屏幕
  4. MQ-2烟雾传感器
  5. DHT11温湿度传感器
  6. 火焰传感器
  7. 蜂鸣器神光报警
  8. 门磁防盗检测
  9. 人体红外检测
  10. 继电器+水泵

四、主框图与软件流程图

主框图

流程图

五、硬件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();
		}
  }
}

七、项目资料包内容

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

相关推荐
日更嵌入式的打工仔3 小时前
ENET_INIT卡死在DMA_MODE判断
单片机·嵌入式硬件
电鱼智能的电小鱼4 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造
szxinmai主板定制专家5 小时前
基于ARM+FPGA的无人机数据采集卡,6通道24bit采集
arm开发·嵌入式硬件·fpga开发·无人机·能源
点灯小铭10 小时前
基于单片机的智能水箱温度液位控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
沐欣工作室_lvyiyi14 小时前
基于物联网的体温心率监测系统设计(论文+源码)
单片机·物联网·毕业设计·体温心率检测
小莞尔17 小时前
【51单片机】【protues仿真】基于51单片机火灾报警系统
单片机·嵌入式硬件
qiuiuiu41318 小时前
正点原子RK3568学习日志-编译第一个驱动程序helloworld
linux·c语言·开发语言·单片机
易享电子18 小时前
基于单片机智能台灯(调光,时钟)系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
hazy1k19 小时前
51单片机基础-动态数码管显示
stm32·单片机·嵌入式硬件·51单片机