一.系统概述
本次式设计的系统是以 STM32 单片机作为核心控制器,可以控制烟雾传感器、火焰传感器对相关数据进行采集,可以通过红外对是否有人进行监测,当监测到火焰会控制短信提醒火灾危险,当红外识别到人且输入密码错误的时候会短信提醒有人闯入。需要有一个密码输入的功能。
二.仿真概述
1.系统内可以检测烟雾浓度、检测是否有火焰、检测是否有人,检测到火灾发生且有人闯入就会通过GSM进行远程提醒。使用矩阵键盘来输入密码的,当检测到人且密码输入不正确就会认为是有人闯入。
2. 调节烟雾传感器的滑动变阻器可以调节烟雾的模拟输出量,烟雾的改变可以在显示端体现。
3. 拨动人体检测的开关即模拟检测到人和检测不到人,在显示屏端也会相应的进行显示。
4. 拨动火焰传感器的开关代表检测到火焰,此时在显示屏端会进行提醒并且会通过GSM发短信进行提醒,这里采用虚拟串口助手模拟短信的接收。
虚拟串口助手的链接:
https://serial.keysking.com/
5. 输入正确的密码12345就会显示yes
输入错就会显示error,并且如果检测到人且输入错就会提醒有人闯入
三.程序设计
#include
#include 'adc2.h'
//
u8 Key;//按键检测
u8 Rxdat;
u8 dat[3];
u8 AIN0;
u8 beepflag;
u8 ack=1;
//
//
void Init_Test(void);
void Display(void);
//
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
OLED_Init(); //PB6 PB7
Key_Init();
Adc2_Init();
// Sim900A_Uart1_Init();
// Sim900A_GSM_Uart1_Send_Message();
Usart1_Init(9600);
PCF8591_Init();
OLED_ShowString(1,1,'Smo:');OLED_ShowString(1,8,'fla:');//OLED_ShowString(1,1,'have');OLED_ShowString(1,8,'not');
OLED_ShowString(4,1,'Enter:');
while(1)
{
KeyXY_Scan(&key,&Password);
if(key!=0)
{
input[inputflag]=Password;
if(inputflag==0){sprintf((char*)disbuf,'%d',input[inputflag]);OLED_ShowString(4,7,disbuf);}
if(inputflag==1){sprintf((char*)disbuf,'%d',input[inputflag]);OLED_ShowString(4,8,disbuf);}
if(inputflag==2){sprintf((char*)disbuf,'%d',input[inputflag]);OLED_ShowString(4,9,disbuf);}
if(inputflag==3){sprintf((char*)disbuf,'%d',input[inputflag]);OLED_ShowString(4,10,disbuf);}
if(inputflag==4){sprintf((char*)disbuf,'%d',input[inputflag]);OLED_ShowString(4,11,disbuf);}
if(inputflag==5){sprintf((char*)disbuf,'%d',input[inputflag]);OLED_ShowString(4,12,disbuf);}
key=0;Password=0;
inputflag++;
if(inputflag==5)
{
for(i=0;i<5;i++)
{
if(input[i] == password[i]) YES++;
}
if(YES==5)
{
OLED_ShowString(3,1,'Yes');
delay_ms(1000);
OLED_ShowString(3,1,' ');
YES=0;
OLED_ShowString(4,7,' ');
}
else if(YES !=6 )//密碼錯誤
{
OLED_ShowString(3,1,' ');
OLED_ShowString(3,1,'Error');
delay_ms(1000);
OLED_ShowString(4,7,' ');
if(ren==0)
{
OLED_ShowString(3,1,' ');
OLED_ShowString(3,1,'Send a message');
delay_ms(1000);
//Sim900A_GSM_Uart1_Send_Message();//
printf('有人闯入');
OLED_ShowString(3,1,' ');
OLED_ShowString(3,1,'Send Ok');
delay_ms(1000);
}
OLED_ShowString(3,1,' ');
YES=0;
}
OLED_ShowString(3,1,' ');
inputflag=0;
}
}