功能介绍
本设计选用MQ-2烟雾传感器、温度传感器以及STM32F103单片机作为核心器件并与其他电子技术相结合,通过STM32F103单片机控制传感器对检测地点的烟雾进行实时检测,并把检测结果进行数据信息处理,可以实现浓度显示、报警及排气等功能。
系统框图
原理图
系统主程序设计及流程图
源代码
//C库
#include
//单片机头文件
#include "sys.h"
//硬件驱动
#include "delay.h"
#include "usart.h"
#include "mq2.h"
#include "timer.h"
#include "gui.h"
#include "LCD.h"
#include "key.h"
#include "beep.h"
#include "exti.h"
#include "led.h"
#include "adc.h"
float value_mq2 = 0.0; //烟雾浓度变量
float value_max = 50; //阈值
//硬件初始化
void Hardware_Init(void)
{
u8 i = 10;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
LCD_Init(); //液晶屏初始化
LCD_Clear(GRAY0); //清屏
Gui_DrawFont_GBK16(3,10,BLUE,GRAY0,(u8 *)"系统正在初始化");
EXTIX_Init(); //外部中断初始化
Usart1_Init(115200); //串口1初始化为115200
LED_Init(); //LED灯初始化
KEY_Init(); //按键初始化
BEEP_Init(); //蜂鸣器初始化
ADCx_Init(); // ADC 初始化
//MQ2加热时间
while(i --)
{
delay_ms(20000);
delay_ms(20000);
}
Gui_DrawFont_GBK16(4,30,RED,GRAY0,(u8*)"设备初始化完成");
}
int main(void)
{
char str[] = "";
Hardware_Init(); //初始化外围硬件
GENERAL_TIM_Init(); //1MS系统定时
LCD_Clear(BLACK); //清屏
GUI_DrawRectangle(1, 1, 128-2, 128-2, WHITE); //边框
Gui_DrawFont_GBK16(25,4,BLACK,GRAY0,(u8 *)" 系统监控 ");
Gui_DrawFont_GBK16(4,50,RED,BLACK,(u8 *)"阈值:50 ppm ");
while(1)
{
/*MQ2传感器获取烟雾数据*/
value_mq2 = MQ2_GetPPM();
memset(str, 0, sizeof(str));
sprintf(str, "烟雾:%.2fppm ",value_mq2);
Gui_DrawFont_GBK16(4,30,BLUE,BLACK,(u8 *)str);//显示
if(value_mq2 >= value_max)//判断是否超过阈值
{
BEEP = 0; //超过阈值,蜂鸣器响叫
}
else
{
BEEP = 1; //正常范围,蜂鸣器关闭
}
LED1 = !LED1; //程序运行指示灯
delay_ms(1000);
}
}