功能介绍:采用stm32单片机作为主控CPU,采用MQ2传感器采集烟雾浓度,采用OLED显示相关数据,采用HC-05蓝牙模块上传数据到手机APP,当检测到烟雾浓度超过上限值(在程序里面可以进行调节);蜂鸣器产生报警,文末有资料分享:
25-基于stm32单片机MQ2烟雾检测报警蓝牙上传数据(程序+原理图+元件清单全套资料)
程序部分展示,有中文注释,新手容易看懂
void Hardware_Init(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
Usart1_Init(9600); //串口1初始化为115200
// Usart2_Init(115200); //串口2,驱动ESP8266用
// LED_Init(); //LED初始化
}
int main(void)
{
unsigned char *dataPtr = NULL;
unsigned short timeCount = 30; //发送间隔变量
uint8_t status;
long int cardnum=0;
u16 adcx;
int temp;
Hardware_Init(); //初始化外围硬件
OLED_Init();
OLED_ColorTurn(0);
OLED_DisplayTurn(0);
OLED_ShowString(50,0,"MQ2=",24); OLED_ShowString(70,32,"PPM",24);
OLED_Refresh();
KEY_Init();
Adc_Init(); LED_Init();
LED=1;
printf("MQ2:%dppm\r\n",temp);
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_0,10);//获取烟雾浓度
temp=(float)adcx/4096*330; //计算浓度
if(temp<80) temp=0;
OLED_ShowNum(30,32,temp,3,24); //显示浓度
printf("MQ2:%dppm\r\n",temp); //蓝牙上传数据
if(temp>100) //浓度过高 报警
{
LED=0;
OLED_ShowString(0,0,"Fire",16);
printf("Fire\r\n");
}
else //否则不报警
{
LED=1;
OLED_ShowString(0,0," ",16);
}
OLED_Refresh(); //更新显示
}
}
下面是原理图文件展示: