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

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板及元器件图

五、程序设计

六、实验效果

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1Y64y1P7ti/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末)

二、项目简介

1.功能详解

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

功能如下:

  1. 密码锁:通过1×4键盘输入开机密码
  2. 采集温湿度:系统通过DHT11模块采集温湿度
  3. 煤气泄漏报警:通过MQ-7一氧化碳传感器判断室内危险气体是否超标
  4. 火灾报警:通过火焰传感器判断室内是否着火
  5. 门磁防盗报警:通过门磁开关判断室内是否有人闯入
  6. 远程照明控制:系统可远程控制LED灯开关
  7. 实时时钟显示:实时时间(年月日周时分秒)显示
  8. OLED显示:显示温湿度、时间、日期、报警信息等等
  9. 蜂鸣器报警:危险情况下本地蜂鸣器触发报警
  10. WIFI通信:使用ESP8266等进行WiFi远程通信
  11. APP功能:手机APP包括功能有修改系统时间、显示当前温湿度信息、显示危险情况报警信息、控制照明灯开关

2.主要器件

  • STM32F103C8T6最小系统板
  • DHT11温湿度传感器
  • OLED显示屏(7针SPI协议)
  • WiFi模块(ESP8266-01s)
  • MQ-7一氧化碳传感器
  • 门磁模块
  • 1×4矩阵键盘
  • DS1302时钟模块
  • 火焰传感器
  • 蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

1.PCB图

2.PCB板及元器件图

五、程序设计

cpp 复制代码
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  HAL_Delay(90);
  MX_GPIO_Init();
  MX_USART1_UART_Init();//串口1初始化
  OLED_Init();//oled初始化  
  OLED_Clear(); //清屏
  DHT_Init();
  ds1302_init();//RTC初始化
  DS1302_WriteTime();		
  buzz_init();//蜂鸣器
  ir_init();//火焰
  mq2_init();//煤气
  butt_init();//按键
  fan_init();//风扇
  for(int i=0;i<10;i++)
  {
      LEDON;
      HAL_Delay(100);
      LEDOFF;
      delay_us(1000);
  }
  showbegin();//开机动画
  delay_us(10);
  while (1)
  {
	  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0 || HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == 0 || HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15) == 1)//进入警报模式
	  {
		  if(jingbflag)
		  {
		      jingbao =1;//警报开启
		      if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0)//火灾警报
		      {
			      huo = 22;//火焰状态着火
		          HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
		          OLED_Clear();
		          OLED_ShowCHinese(47,0,10);
		          OLED_ShowCHinese(64,0,11);		  
		          OLED_ShowCHinese(0,2,21);
		          OLED_ShowCHinese(17,2,22);
		          OLED_ShowCHinese(34,2,23);  
		          showhuo();//显示火灾图片
		      }
		      else//火焰状态正常
		      {
			      huo = 11;
		      }
			  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == 0)//煤气报警
		      {
			      mei = 22;
			      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
		          OLED_Clear();
			      OLED_ShowCHinese(24,0,10);//显示文字
			      OLED_ShowCHinese(41,0,11);
		          OLED_ShowCHinese(0,2,49);
			      OLED_ShowCHinese(17,2,50);//
			      OLED_ShowCHinese(34,2,51);//
			      OLED_ShowCHinese(51,2,52);//
			      showmei();//显示泄漏图片
		      }
		      else
		      {
			      mei = 11;
		      }
		      if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15) == 1)//防盗警报
		      {
			      ren =22;
			      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
		  	      OLED_Clear();
			      OLED_ShowCHinese(24,0,10);
			      OLED_ShowCHinese(41,0,11);//显示汉字
			      OLED_ShowCHinese(0,2,12);
			      OLED_ShowCHinese(17,2,13);//
			      OLED_ShowCHinese(34,2,14);//
			      OLED_ShowCHinese(51,2,15);//
		          showman();//显示防盗图片
		      }
		      else
		      {
			      ren =11;
		      }
	      }
	  }
	  else//正常模式
	  {
		  huo = 11;
		  mei = 11;
		  ren = 11;
		  if(jingbao == 1)
		  {
			  OLED_Clear();
			  jingbao = 0;//警报解除
		  }
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
          HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
		  DHT_ReadData();
          OLED_ShowCHinese(0,6,7);//显示温度汉字
		  OLED_ShowCHinese(15,6,8);
		  OLED_ShowChar(28,6,':');
		  OLED_ShowCHinese(68,6,9);//显示湿度汉字
		  OLED_ShowCHinese(83,6,8);
		  OLED_ShowChar(96,6,':');
	  	  OLED_ShowNum(35,6,DHT_data[2],2,16);//显示温度数值
		  OLED_ShowCHinese(50,6,48);
		  OLED_ShowChar(57,6,'C');
		  OLED_ShowNum(104,6,DHT_data[0],2,16);//显示湿度数值
          OLED_ShowChar(121,6,'%');
          showtime(); 
      }
      int num = search(rxdata,18,'Z');
      if(num!=-1)
      {
          rxok = 1;
          int begin = 0;
          for(int i=0;i<18;i++)
          {
              if(num<18)
              {
                  rx_normal_data[i]=rxdata[num++];
              }
              else
              {
                  rx_normal_data[i]=rxdata[begin++];
              }
          }
      }
      sprintf(senddata,"%d-%d-%d-%d-%d",DHT_data[2],DHT_data[0],huo,mei,ren);//将温度数值。湿度数值。火灾状态、煤气、防盗、整合到数组
      AL_UART_Transmit_IT(&huart1,"AT+CIPSEND=0,14\r\n",sizeof("AT+CIPSEND=0,14\r\n"));//发送初始化
      HAL_Delay(300);
      HAL_UART_Transmit_IT(&huart1,senddata,14);//启动发送向手机发送数据
      HAL_Delay(500);
  }

六、实验效果

七、资料内容

项目分享

相关推荐
国科安芯7 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
茯苓gao9 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
梁朝辉12 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者12 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间13 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious14 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng18 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计19 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
kebidaixu19 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片详解
stm32
kebidaixu20 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片调试实录:四个关键问题与解决方案
stm32