当前位置:   article > 正文

105-基于stm32单片机智能家居温湿度烟雾监测人体红外防盗报警系统Proteus仿真+程序源码_基于stm32红外安保系统

基于stm32红外安保系统

一:功能介绍

1、采用stm32单片机+LCD1602+DHT11温湿度传感器+烟雾传感器+按键开关+蜂鸣器+LED灯,制作一个智能家居温湿度烟雾监测人体红外防盗报警系统;

2、通过按键开关来模拟人体红外检测触发,并且可以通过按键开关来设置正在布防和停止布防状态,布防状态下,当检测到有人闯入,蜂鸣器和LED进行声光报警提醒;

3、通过烟雾传感器检测烟雾浓度,并且显示到LCD1602显示屏上面,当烟雾浓度大于一定值,进行蜂鸣器LED声光报警

4、LCD1602显示温湿度、烟雾浓度、布防检测状态;

二:仿真演示视频+程序简要讲解:(程序有中文注释,新手容易看懂)

105-基于stm32单片机智能家居温湿度烟雾监测人体红外防盗报警系统Proteus仿真+程序源码+讲解视频

三:设计软件介绍

本设计使用C语言编程设计,程序代码采用keil5编写,程序有中文注释,新手容易看懂,仿真采用Proteus软件进行仿真演示视频使用的是Proteus8.9版本;资料包里有相关软件包,可自行下载安装。

四:程序打开方法

特别注意:下载资料包以后一定要先解压!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。

803447e9d90a81b6154c6774e59cd568.png

864c29b0568247dcf45a438f41225b62.png

  1. 程序部分展示,有中文注释,新手容易看懂
  2. /*****************引脚配置********************/
  3. void GPIO_Configuration(void)
  4. {
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  7. //LCD1602 管脚
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
  9. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  11. GPIO_Init(GPIOB, &GPIO_InitStructure);
  12. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_6|GPIO_Pin_5;
  13. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  14. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  15. GPIO_Init(GPIOB, &GPIO_InitStructure);
  16. //DHT11
  17. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  18. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  19. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  20. GPIO_Init(GPIOB, &GPIO_InitStructure);
  21. }
  22. void IO_out( void )
  23. {
  24. GPIO_InitTypeDef GPIO_InitStructure;
  25. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC ,ENABLE);
  26. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  27. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3;
  28. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  29. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;;
  30. GPIO_Init(GPIOC, &GPIO_InitStructure);
  31. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9;
  32. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  33. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  34. GPIO_Init(GPIOC, &GPIO_InitStructure);
  35. }
  36. void anjiansaomiao(void)
  37. {
  38. static char k1,k2,k3,k4;
  39. //按键扫描,获取按键状态
  40. k1 = GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_0);
  41. k2 = GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_1);
  42. k3 = GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_2);
  43. k4 = GPIO_ReadInputDataBit(GPIOC , GPIO_Pin_3);
  44. //表明按下
  45. if(k1==1||k2==1||k3==1||k4==1)
  46. {
  47. buf=1;
  48. }
  49. else buf=0;
  50. }
  51. int main(void)
  52. {
  53. int ADC_num2;
  54. int temp2;
  55. GPIO_Configuration();//初始化
  56. ADC1_GPIO_Config();
  57. ADC_Config();
  58. Init1602();
  59. IO_out();
  60. WrByte1602(0,1,' '); //字符显示
  61. WrByte1602(0,2,'Z');
  62. WrByte1602(0,3,'T');
  63. WrByte1602(0,4,'=');
  64. WrByte1602(1,1,' ');
  65. WrByte1602(1,2,'Y');
  66. WrByte1602(1,3,'W');
  67. WrByte1602(1,4,'=');
  68. WrByte1602(0,9,' ');
  69. WrByte1602(0,10,'W');
  70. WrByte1602(0,11,'D');
  71. WrByte1602(0,12,'=');
  72. WrByte1602(1,9,' ');
  73. WrByte1602(1,10,'S');
  74. WrByte1602(1,11,'D');
  75. WrByte1602(1,12,'=');
  76. delay_ms(500);
  77. while(1)
  78. {
  79. //读取温湿度
  80. DHT11_receive(&shidu,&wendu);
  81. ADC_num2=Get_ADC(ADC_Channel_1);//读取烟雾浓度
  82. temp2=ADC_num2*100/4096;
  83. WrByte1602(1,5,AsciiCode[temp2%1000/100]); //显示烟雾浓度
  84. WrByte1602(1,6,AsciiCode[temp2%100/10]);
  85. WrByte1602(1,7,AsciiCode[temp2%10]);
  86. WrByte1602(0,13,AsciiCode[wendu%1000/100]); //显示温度
  87. WrByte1602(0,14,AsciiCode[wendu%100/10]);
  88. WrByte1602(0,15,AsciiCode[wendu%10]);
  89. WrByte1602(1,13,AsciiCode[shidu%1000/100]); //显示湿度
  90. WrByte1602(1,14,AsciiCode[shidu%100/10]);
  91. WrByte1602(1,15,AsciiCode[shidu%10]);
  92. anjiansaomiao();//按键模拟红外人体检测
  93. if(buf==0)
  94. {
  95. WrByte1602(0,5,'W'); //状态无人
  96. WrByte1602(0,6,'R');
  97. }
  98. else
  99. {
  100. WrByte1602(0,5,'Y'); //状态有人
  101. WrByte1602(0,6,'R');
  102. }

:仿真文件(采用Proteus打开)

7f3f96b17530ca6049261d8c7701cd71.png

042b792188f17ead7267f311487610f0.png

0e9d03003881f4e7f3b9f41e999c52b2.png

六:资料清单展示(文件中包含的相关资料)

22550285bf116d6290115f4ec9613c99.png

百度云盘下载链接​​​​​​​

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/428277
推荐阅读
相关标签
  

闽ICP备14008679号