基于STM32单片机的烟雾测量系统设计
2024-08-09 来源:elecfans
功能介绍
本设计选用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);
}
}