找回密码
 注册

QQ登录

只需一步,快速开始

搜索

基于STM32F103单片机智能门禁热释人体感应报警程序设计

[复制链接]
路漫漫 发表于 2020-5-24 22:38:18 | 显示全部楼层 |阅读模式
本设计由STM32F103C8T6单片机核心电路+拨动开关电路+按键电路+高亮LED灯电路+LCD1602液晶电路+蜂鸣器报警电路+GSM短信模块SIM800A电路+光敏电阻检测光照强度电路+热释红外感应模块E18电路+电源电路组成。
1、通过热释红外传感器检测是否有人,如果有人靠近门时,液晶屏提示亮并显示欢迎词:Welcome to home!,夜间探测到有人时开灯,灯用9个高亮LED灯设计,无人时,关灯。
2、主人可设定门禁系统工作状态,家里有人和无人两种状态。通过一个拨动开关设置,拨上去,液晶显示有人:Somebody!,拨下来液晶显示没人:Nobody!有人时,客人按下门铃,蜂鸣器鸣叫提示,无人时,客人按下门铃,无任何反应。
3、门外人员逗留时间超过一定时间则发出报警信息。
4、检测到有人或者没有人,有状态指示灯指示。
源程序(C语言含详细备注).zip (354.86 KB, 售价: 5 E币)
PDF格式的PCB图.zip (72.58 KB, 售价: 2 E币)
实物图(高清).zip (4.2 MB, 售价: 2 E币)
原理图(sch源文件 PDF版 照片版).zip (263.6 KB, 售价: 2 E币)
部分代码:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "key.h"
  5. #include "led.h"
  6. #include "lcd1602.h"

  7. u8 lighFlag=0;                //光照 标志
  8. u8 doorFlag=0;                //门检测 标志
  9. u8 manFlag=0;                        //人检测 标志
  10. u8 menlingFlag=0;        //门铃检测 标志
  11. u8 baojFlag=0;                //报警 标志

  12. int main(void)
  13. {
  14.         u32 time10ms=0;
  15.          
  16.         delay_init();                     //延时函数初始化         

  17.         KEY_Init();                  //初始化 按键
  18.         LED_Init();                  //初始化电机引脚 作为输出 类似led
  19.         delay_ms(1);
  20.         
  21.         Lcd_GPIO_init();  //初始化lcd引脚        
  22.         Lcd_Init();                  //初始化lcd屏幕
  23.         delay_ms(20);
  24.         
  25.   Lcd_Puts(0,0,"Waitting for you");        //初始化显示
  26.         Lcd_Puts(0,1,"Nobody!         ");         
  27.          
  28.         buzzer=1;                        //打开 上电开关一下 方便检测
  29.         ligh=1;
  30.         led_hot = 0;
  31.         delay_ms(200);
  32.         led_hot = 1;//关闭 用于测试
  33.         buzzer=0;                        
  34.         ligh=0;
  35.         
  36.         while(1)
  37.         {
  38.                 delay_ms(10);
  39.                 if(manFlag==1)
  40.                 {
  41.                           Lcd_Puts(0,0,"Welcome to home!");        //显示有人
  42.                         if(lighFlag==1)        //有人情况查看是否需要开灯
  43.                         {
  44.                                 ligh=1;//打开 灯
  45.                         }
  46.                         else
  47.                         {ligh=0;}//关闭
  48.                         time10ms++;
  49.                         if(time10ms>=3000)           //有人超过30s 报警
  50.                         {
  51.                                  buzzer=1;  //打开蜂鸣器
  52.                                 baojFlag=1;//报警
  53.                         }
  54.                 }
  55.                 else
  56.                 {
  57.                          Lcd_Puts(0,0,"Waitting for you");   //没有人情况 显示等待
  58.                         ligh=0;                                                                  //没有人关闭led
  59.                         time10ms=0;                                                 //清零紧急报警
  60.                         baojFlag=0;     
  61.         }

  62.                 if(doorFlag==1)
  63.                 {
  64.                   Lcd_Puts(0,1,"Somebody!       ");        //家中有人
  65.                         if(baojFlag==0)                                        //非紧急情况
  66.                         {
  67.                                 if(menlingFlag==1)                //门铃
  68.                                 {
  69.                                          buzzer=1;//打开蜂鸣器
  70.                                 }
  71.                                 else
  72.                                 {buzzer=0;}                //关闭蜂鸣器        
  73.                         }
  74.                 }
  75.                 else
  76.                 {
  77.                         Lcd_Puts(0,1,"Nobody!         ");                //家中无人
  78.                         if(baojFlag==0)                                          //非紧急情况
  79.                         {        buzzer=0;}
  80.                 }
  81.                
  82.                 if(key_menling==0)   //检测
  83.                 {
  84.                         menlingFlag=1;
  85.                 }
  86.                 else
  87.                 {menlingFlag=0;}  //否则复位标志

  88.                 if(key_redhot==1)   //检测人体
  89.                 {
  90.                                 manFlag=1;led_hot = 0;//标志               
  91.                 }
  92.                 else
  93.                 {manFlag=0;led_hot = 1;}  //否则复位标志

  94.                 if(key_door==1)   //检测 门状态
  95.                 {
  96.                         doorFlag=1;
  97.                 }
  98.                 else
  99.                 {doorFlag=0;}  //否则复位标志

  100.                 if(key_ligh==1)   //检测光度
  101.                 {
  102.                                 lighFlag=1;
  103.                 }
  104.                 else
  105.                 {lighFlag=0;}  //否则复位标志
  106.         }                 
  107. }
复制代码




您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-12-23 11:05

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表