一. 系统概述
本系统基于 STM32 单片机作为核心控制单元,旨在监测烟雾浓度和火焰情况。它还具备通过红外传感器检测是否有人存在的功能。当系统检测到火焰时,会自动发送短信警报以提示火灾危险;如果红外传感器检测到人并且密码输入错误,系统同样会通过短信发出警报,提示可能存在入侵行为。同时,系统包括一个密码输入功能。
二. 仿真概述
- 系统能够实时检测烟雾浓度、火焰状态和是否有人存在。当系统检测到火灾或有人闯入时,会通过 GSM 模块进行远程短信提醒。密码输入功能通过矩阵键盘实现,当检测到有人且密码错误时,系统会将其视为入侵,并发送警报。
- 可以通过调节烟雾传感器上的滑动变阻器来改变模拟输出量,从而在显示屏上反映出烟雾浓度的变化。
- 通过拨动人体检测开关,模拟系统对人的检测功能。在显示屏上会实时显示检测结果,无论是检测到人还是未检测到人。
- 拨动火焰传感器开关以模拟检测到火焰时,显示屏将显示火焰警报,同时系统会通过 GSM 模块发送短信提醒。此处使用虚拟串口助手模拟短信接收过程。
虚拟串口助手的链接:
5. 输入正确密码“12345”时,显示屏将显示“yes”。
如果密码输入错误,显示屏将显示“error”。同时,当系统检测到有人且密码输入错误时,会触发入侵警报。
三.程序设计
#include <main.h>
#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;
}
}
24-32f-08