一.硬件方案
主要由STM32F103C8T6单片机最小系统板+LCD1602显示屏模块+MQ-2烟雾传感器+火焰检测模块+温度传感器+水泵电路+按键电路+蜂鸣器报警电路+蓝牙电路+电源开关构成;

仿真图如下:

二.设计功能
- 具有温度采集、烟雾采集、火焰信号采集功能;
- 显示屏显示当前系统信息,按键设置温度、烟雾监测阈值,当超过阈值时或有火焰信号时会发生声光报警,自动或者手动开启灭火(水泵);
- 按键功能:按键1:模式切换;按键2:设置键;按键3:自加一;按键4:自减一/开关水泵;
- 蓝牙通信连接上位机APP,远程显示信息,接收报警,远程控制灭火;
三.软件设计
主程序源码
int main(void)
{
vu8 key=0;
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
BEEP_Init(); //初始化蜂鸣器端口
FAN_Init();
KEY_Init(); //初始化与按键连接的硬件接口
RELAY_Init();
uart_init(9600); //初始化串口1
TIM2_Int_Init(999,7199);//10Khz的计数频率
Adc_Init();
Lcd_GPIO_init(); //初始化lcd引脚
Lcd_Init(); //初始化lcd屏幕
Lcd_Puts(0,0,(unsigned char *)init_lcd1); //显示
Lcd_Puts(0,1,(unsigned char *)init_lcd2); //显示
BEEP=1;
RELAY=0;
while(1)
{
key=KEY_Scan(1); //得到键值
KEY_Handle(key); //按键处理函数
APP_Handle(revData); //APP指令处理函数
revData=0;
if(FIRE==0) //火焰检测
{
fire_flag=6;
}
if(T_100ms>=10)
{
T_100ms = 0;
if(refresh==1)
APP_refresh();
if(fire_flag>0)
fire_flag--;
//采集烟雾浓度值
ALValue = (u16)(Get_Adc(9)/3);
if(ALValue>999)
ALValue = 999;
if (ALValue > K_ZERO)
ALValue = ALValue - K_ZERO; //首先减去零点漂移,一般是130mV
else
ALValue = 0;
temperature=DS18B20_Get_Temp(); //获取温度
temp=((u16)temperature);
if(ALValue>WARNING) //报警阈值判断
{
smoke_flag =1;
printf("当前烟雾浓度超标!!\r\n");
}
else if(temp>T_WARNING)
{
smoke_flag =2;
printf("当前温度超标!!\r\n");
}
else if(fire_flag>0)
{
smoke_flag =3;
printf("当前有火焰!!\r\n");
}
else
{
smoke_flag =0;
}
if(mode==AUTO) //自动模式下,自动开关水泵
{
if(smoke_flag>0)
{
RELAY=1; //开启水泵
}
else
{
RELAY=0; //关闭水泵
}
}
if(smoke_flag>0) //蜂鸣器报警判断
{
if(BEEP_state==0)
BEEP=1;
else
BEEP=0;
}
else
BEEP=1;
if(set==0) //set为0,说明现在不是设置状态
Display_1602(); //显示AD数值和报警值
}
}
}
链接:https://pan.baidu.com/s/1OXviDxr7wY28B81c2WVTWQ 提取码: s37p