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");
		  }
	
  }
}

六、实验效果 

七、包含内容

  项目分享

猜你喜欢

转载自blog.csdn.net/qq_44016222/article/details/145368383
今日推荐