【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展示

六、软件程序设计

cpp 复制代码
#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初始化,波特率115200
	uart1_init(115200);	//串口1初始化,波特率115200
	uart2_init(9600);	//串口2初始化,波特率9600
	Control_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位数密码,大于0
			pass_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;
}

七、项目资料包内容

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

相关推荐
点灯小铭3 小时前
基于单片机的N型热电偶PID锅炉温度控制系统
单片机·嵌入式硬件·毕业设计·课程设计
GilgameshJSS3 小时前
STM32H743-ARM例程15-RTC
c语言·arm开发·stm32·实时音视频
机器视觉知识推荐、就业指导5 小时前
STM32 外设驱动模块【含代码】:SG90 舵机模块
stm32·单片机·嵌入式硬件·学习
北京迅为5 小时前
【北京迅为】iTOP-4412精英版使用手册-第三十五章 WEB控制LED
linux·嵌入式硬件·嵌入式·4412
future141210 小时前
单片机学习日记
单片机·嵌入式硬件·学习
hazy1k12 小时前
K230基础-获取触摸坐标
图像处理·stm32·单片机·嵌入式硬件·k230
知南x12 小时前
STM32MP157目标检测环境搭建 (3) NCNN环境安装
stm32·嵌入式硬件·目标检测
日更嵌入式的打工仔14 小时前
InitLWIP() 初始化
笔记·嵌入式硬件·学习
学生董格15 小时前
[嵌入式embed]Keil5-STM32F103C8T6(江协科技)+移植RT-Thread v3.15模版
stm32·嵌入式硬件·rt-thread·keil5·江协科技