功能:
0.本系统采用STM32F103C8T6作为单片机
1.可通过一个拨动开关设防和撤防,当拨到无人时开始设防,若此时检测到有人则报警
2.当拨到有人时,光强传感器会根据环境光的强度大小而决定开灯,若无人情况,无论如何都不开灯。
3.人体感应模块采用的是HC-SR501模块,显示液晶LCD1602实时显示工作状态
4.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:
PCB :
主程序:
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "led.h"
#include "bsp_lcd1602.h"
u8 baojFlag = 0; // 报警 标志
u16 manDelay = 0; //有人计时
int main(void)
{
u32 time10ms = 0;
delay_init(); // 延时函数初始化
KEY_Init(); // 初始化 按键
LED_Init(); // 初始化电机引脚 作为输出 类似led
delay_ms(1);
LCD_GPIO_Init(); // 初始化lcd引脚
LCD_Init(); // 初始化lcd屏幕
delay_ms(20);
LCD_DispStr(0, 0, "Waitting for you"); // 初始化显示
LCD_DispStr(0, 1, "Nobody! ");
BUZZER = 1; // 打开 上电开关一下 方便检测
LIGHT = 1;
LED_STATUS = 0;
delay_ms(200);
LED_STATUS = 1; // 关闭 用于测试
BUZZER = 0;
LIGHT = 0;
while (1)
{
delay_ms(10);
if (IR_PIN == 0) // 检测到有人
{
manDelay = 500; //设定计时
LED_STATUS = 0; // 标志
}
else
{
if (manDelay>0)
{
manDelay--; //倒计时
}
LED_STATUS = 1;
} // 否则复位标志
if (manDelay > 0) //持续有人
{
LCD_DispStr(0, 0, "Welcome to home!"); // 显示有人
if (LIGHT_IN == 1) // 有人情况查看是否需要开灯
{
LIGHT = 1; // 打开 灯
}
else
{
LIGHT = 0;
} // 关闭
time10ms++;
if (time10ms >= 3000) // 有人超过30s 报警
{
BUZZER = 1; // 打开蜂鸣器
baojFlag = 1; // 报警
}
}
else //持续一段时间未检测到人
{
LCD_DispStr(0, 0, "Waitting for you"); // 没有人情况 显示等待
LIGHT = 0; // 没有人关闭led
time10ms = 0; // 清零紧急报警
baojFlag = 0;
}
if (STATUS_PIN == 1) //家中有人
{
LCD_DispStr(0, 1, "Somebody! "); // 家中有人
if (baojFlag == 0) // 非紧急情况
{
if (DOORBELL_PIN == 0) // 门铃键按下
{
BUZZER = 1; // 打开蜂鸣器
}
else
{
BUZZER = 0;
} // 关闭蜂鸣器
}
}
else
{
LCD_DispStr(0, 1, "Nobody! "); // 家中无人
if (baojFlag == 0) // 非紧急情况
{
BUZZER = 0;
}
}
}
}
实物演示视频: