STM32项目分享:智能家庭安防系统

目录

 一、前言

 二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 

七、包含内容

  项目分享


 一、前言

项目成品图片:

哔哩哔哩视频链接:

STM32智能家庭安防系统

(资料分享见文末) 

 二、项目简介

1.功能详解

基于STM32的智能家庭安防系统

功能如下:

  1. STM32F103C8T6单片机系统板作为主控单元
  2. DHT11温湿度传感器采集温湿度
  3. MQ-7采集烟雾浓度/一氧化碳
  4. 门磁模块监控闯入报警
  5. DS1302时钟模块显示实时时间
  6. 火焰传感器判断是否有明火
  7. OLED显示屏显示当前时间和环境信息
  8. 按键设置阈值,蜂鸣器报警
  9. 手机APP接收环境数据和控制报警开关

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • DHT11温湿度传感器
  • ESP8266-01S  WiFi模块
  • MQ-7一氧化碳传感器
  • 火焰传感器
  • 门磁模块
  • DS1302时钟模块

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

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();
		}	
    		
    else if(keyflag==1)
		{
		   OLED_ShowCHinese(16,0,9);//温度
			 OLED_ShowCHinese(32,0,10);
			 OLED_ShowCHinese(48,0,24);//阈值
			 OLED_ShowCHinese(64,0,25);
			 OLED_ShowCHinese(80,0,26);//设置
			 OLED_ShowCHinese(96,0,27);
			 OLED_ShowNum(48,4,settemp,3,16);
		}
		else if(keyflag==2)
		{
		   OLED_ShowCHinese(16,0,11);//湿度
			 OLED_ShowCHinese(32,0,10);
			 OLED_ShowCHinese(48,0,24);//阈值
			 OLED_ShowCHinese(64,0,25);
			 OLED_ShowCHinese(80,0,26);//设置
			 OLED_ShowCHinese(96,0,27);
			 OLED_ShowNum(48,4,sethumi,3,16);
		}
		else if(keyflag==3)
		{
		   OLED_ShowCHinese(16,0,19);//烟雾
			 OLED_ShowCHinese(32,0,20);
			 OLED_ShowCHinese(48,0,24);//阈值
			 OLED_ShowCHinese(64,0,25);
			 OLED_ShowCHinese(80,0,26);//设置
			 OLED_ShowCHinese(96,0,27);
			 OLED_ShowNum(48,4,setyw,3,16);
		}
		else if(keyflag==4)
		{
		   OLED_ShowCHinese(16,0,9);//温度
			 OLED_ShowCHinese(32,0,10);
			 OLED_ShowCHinese(48,0,28);//报警
			 OLED_ShowCHinese(64,0,14);
			 OLED_ShowCHinese(80,0,29);//开关
			 OLED_ShowCHinese(96,0,30);
			 if(tempKG==11) {OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29);}
       if(tempKG==22) {OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32);}
		}
		else if(keyflag==5)
		{
		   OLED_ShowCHinese(16,0,11);//温度
			 OLED_ShowCHinese(32,0,10);
			 OLED_ShowCHinese(48,0,28);//报警
			 OLED_ShowCHinese(64,0,14);
			 OLED_ShowCHinese(80,0,29);//开关
			 OLED_ShowCHinese(96,0,30);
			 if(humiKG==11) {OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29);}
       if(humiKG==22) {OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32);}
		}
		else if(keyflag==6)
		{
		   OLED_ShowCHinese(16,0,19);//烟雾
			 OLED_ShowCHinese(32,0,20);
			 OLED_ShowCHinese(48,0,28);//报警
			 OLED_ShowCHinese(64,0,14);
			 OLED_ShowCHinese(80,0,29);//开关
			 OLED_ShowCHinese(96,0,30);
			 if(ywKG==11) {OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29);}
       if(ywKG==22) {OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32);}
		}
		else if(keyflag==7)
		{
		   OLED_ShowCHinese(16,0,22);//火灾
			 OLED_ShowCHinese(32,0,23);
			 OLED_ShowCHinese(48,0,28);//报警
			 OLED_ShowCHinese(64,0,14);
			 OLED_ShowCHinese(80,0,29);//开关
			 OLED_ShowCHinese(96,0,30);
			 if(hyKG==11) {OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29);}
       if(hyKG==22) {OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32);}
		}
		else if(keyflag==8)
		{
		   OLED_ShowCHinese(16,0,33);//防盗
			 OLED_ShowCHinese(32,0,34);
			 OLED_ShowCHinese(48,0,28);//报警
			 OLED_ShowCHinese(64,0,14);
			 OLED_ShowCHinese(80,0,29);//开关
			 OLED_ShowCHinese(96,0,30);
			 if(mcKG==11) {OLED_ShowCHinese(48,4,31); OLED_ShowCHinese(64,4,29);}
       if(mcKG==22) {OLED_ShowCHinese(48,4,30); OLED_ShowCHinese(64,4,32);}
		}
		
			if(sendflag) //串口每1s发送一次数据
		  {
				sendflag = 0;
				tempbai = temp/100;
				tempshi = temp%100/10;
				tempge  = temp%10;
				humibai = humi/100;
				humishi = humi%100/10;
				humige  = humi%10;
				YWADCbai = YWADC/100;
				YWADCshi = YWADC%100/10;
				YWADCge  = YWADC%10;
				u2_printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",tempbai,tempshi,tempge,humibai,humishi,humige,YWADCbai,YWADCshi,YWADCge,WD,SD,YW,HY,MC,tempKG,humiKG,ywKG,hyKG,mcKG);
				u2_printf("AT+CIPSEND=0,29\r\n");
		  }
	
  }
}

六、实验效果 

七、包含内容

  项目分享

一、智能安防系统 1.要求如下: .运行UCOS3实时操作系统[可选] .火焰传感器、温湿度传感器、可燃气体传感器正常工作 .RFID读写卡正常工作 .蓝牙4.0正常工作 .红外接收头正常工作 2.实现过程 手机蓝牙操作 .能够修改开发板的RTC时间 .发送特定的命令,能够查询当前安防状态(是否有火焰、可燃气体是否超标、温湿度状态) .发送特定的命令,能够修改安防系统默认card id,并将card id信息保存到flash当中 当RFID进行识别的时候 .安防系统默认有card id,如果当前识别的卡为陌生卡,则进行蜂鸣器长鸣报警,并熄灭所有Led;识别成功,则响一声,并点亮LED。 .能够将当前的RFID的卡号与识别时间保存到FLASH当中,保存记录为100条,格式(年月日 时分秒 卡ID 合法/非法)如下: 2017-9-21 15:52:50 AABBCCDD 1 //合法 2017-9-21 15:52:50 AFBFCFDF 0 //非法 当红外接收头接收到有效数据的时候,能够实现对家里灯光的操作,也就是对LED进行亮与灭 二、项目进阶 1.连接ESP8266 WiFi,通过使用本地网络或阿里云实现手机蓝牙操作的功能与家庭灯光的控制。 2.超声波模块实现防盗报警,熟练使用IO时序模拟、时间计算 3.OLED屏显示操作信息,熟练使用I2C协议 三、项目高阶 1、NRF24L01无线发射接收模块,熟练使用SPI协议,实现两套开发板数据收发,相互控制 2、移植LWIP,能够使用本地网络或阿里云实现手机蓝牙操作的功能与家庭灯光的控制。
抱歉,我无法提供完整的代码,因为这是一个复杂的系统设计,需要详细的硬件和软件规划。但是,我可以给你一些基本的思路和步骤,以帮助你开始设计你的智能安防系统。 硬件设计: 1. STM32微控制器 - 选择一款适合你的项目STM32芯片来实现系统控制和通信。 2. 传感器 - 选择适当的传感器来监测环境,如红外线传感器、烟雾传感器、温度传感器、声音传感器等。 3. 摄像头 - 安装摄像头以捕捉视频流,并将其传输到处理器进行分析和处理。 4. 无线模块 - 使用无线模块实现远程数据传输和控制,如Wi-Fi、蓝牙、ZigBee等。 5. 电源模块 - 选择适当的电源模块来提供系统所需的电力。 软件设计: 1. 系统初始化 - 程序开始时,需要对系统进行初始化,包括配置GPIO、中断、定时器、串口和其他外设。 2. 数据采集 - 读取传感器数据并将其保存到内存中,以便后续分析和处理。 3. 数据处理 - 对采集的数据进行处理,包括数据滤波、计算、分析等。 4. 系统控制 - 根据传感器数据和数据处理结果,控制执行器执行相应的操作。 5. 数据存储 - 将数据保存到外部存储器中,以便后续分析和使用。 6. 远程通信 - 使用无线模块实现远程数据传输和控制。 以上是一个基本的智能安防系统设计的步骤和思路。但是,具体实现需要根据具体的项目需求和硬件资源来进行规划和设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值