毕业设计:基于STM32的火灾报警系统设计与实现——物联网与单片机的完美结合

文章目录

  • 1 简介
  • 2 设计方案
  • 3 实现效果
  • 4 外围器件
  • 4.1 DS18B20
  • 4.2 MQ-2传感器
  • 5 部分实现代码
  • 6 最后

  • 1 简介

    Hi,大家好,今天向大家介绍一个学长做的单片机项目

    大家可用于 课程设计 或 毕业设计

    2 设计方案

    1、MCU采用stm32;

    2、使用MQ2传感器采集烟雾等有害气体,当检测到有害气体时发声报警,并可以邮件通知用户;

    3、使用DS18B20传感器检测环境温度和火焰;

    4、采用OLED12864显示屏进行数据显示;

    5、可设置传感器阈值,修改检测灵敏度;

    3 实现效果

    正常状态加不触发报警

    当检测烟雾和明火时触发报警

    4 外围器件

    4.1 DS18B20


    单片机采集到的数据

    4.2 MQ-2传感器

    MQ-2传感器对可燃气、烟雾等气体灵敏度高,基于MQ-2的烟雾传感器模块通过电路设计,提供了两种输出方式:

    数字量输出:通过板载电位器设定浓度阈值,当检测到环境气体浓度超过阈值时,通过数字引脚DO输出低电平。
    模拟量输出:浓度越高,AO引脚输出的电压值越高,通过ADC采集的模拟值越高。

    5 部分实现代码

    #include "stm32f10x_adc.h"
    #include "stdlib.h"
    #include "delay.h"
    #include "sys.h"
    #include "oled.h"
    #include "bmp.h"
    #include "usart.h"
    #include "LED.h"
    #include "KEY.h"
    #include "ADC.h"
    #include "timer.h"
    #include "HUO.h"
    
    
    extern u16 k1,k2;
    extern u8 an;
    int main(void)
    {
    	u8 i = 0,t = 0,key_value = 0,fasong = 0,zhuangtai = 0;
    	u16 adcx = 0;
    	u16 adcx_index = 300;
    	u8 huo = 1;
    	u8 huo_flag = 0;
    	u8 string[10] = {0};
    	NVIC_Configuration();
    	delay_init();
    	uart_init(115200);	 	//���ڳ�ʼ��Ϊ115200
    	
    	LED_Init();
    	KEY_Init();
    	HUO_Init();
    	Adc_Init();
    	OLED_Init();
    	OLED_Clear();
    	OLED_ColorTurn(0);//0������ʾ��1 ��ɫ��ʾ
    	OLED_DisplayTurn(0);//0������ʾ 1 ��Ļ��ת��ʾ
    	
    	for(i = 0;i<8;i++)
    	OLED_ShowChinese(i*16,16,i,16);//���ܻ��ֱ���ϵͳ
    	OLED_Refresh();//������ʾ��OLED	
    	delay_ms(999);delay_ms(999);	
    	
    	OLED_Clear();	
    //0
    	for(i = 0;i<6;i++)//����ɼ�ֵ��
    	OLED_ShowChinese(i*16,0,i+18,16);
    //16
    	for(i = 0;i<2;i++)//����
    	OLED_ShowChinese(i*16,16,i+18,16);
    	OLED_ShowChinese(16*2,16,26,16);//��
    	for(i = 0;i<2;i++)//ֵ��
    	OLED_ShowChinese(i*16+16*3,16,i+22,16);
    	sprintf((char *)string,"%4d",adcx_index);//0300
    	OLED_ShowString(88,16,string,16);
    //32
    	for(i = 0;i<2;i++)//����
    	OLED_ShowChinese(i*16,32,i+24,16);
    	for(i = 0;i<2;i++)//ֵ��
    	OLED_ShowChinese(i*16+16+16,32,i+22,16);
    	for(i = 0;i<2;i++)//����
    	OLED_ShowChinese(i*16+16*4+8,32,i+27,16);
    	OLED_ShowChinese(16*6+8,32,23,16);//��
    	OLED_ShowChinese(16*7,32,30,16);//��
    //48
    	for(i = 0;i<2;i++)//��ȫ
    	OLED_ShowChinese(i*16+16*3,48,i+33,16);
    
    	OLED_Refresh();//������ʾ��OLED	
    	
    	//TIM3_Int_Init(99,7199);//10Khz�ļ���Ƶ�ʣ�������100Ϊ10ms  
    	
    	while(1)
    	{
    		key_value = KEY_Scan(0);
    		switch (key_value)
    		{
    			case KEY0_PRES:
    				if(adcx_index>100)adcx_index-=200;else adcx_index=500;
    				sprintf((char *)string,"%4d",adcx_index);
    				OLED_ShowString(88,16,string,16);
    				break;
    			case KEY1_PRES:
    				huo_flag =! huo_flag;
    				OLED_ShowChinese(16*7,32,huo_flag?29:30,16);//��/��
    				break;
    			case KEY2_PRES:
    				fasong = !fasong;
    				if(fasong == 1){LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
    				else {LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(200);LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
    				break;
    			default:
    				break;
    		}
    		
    		t++;
    		if(t==10)
    		{
    			adcx=Get_Adc_Average(ADC_Channel_1,10);
    			sprintf((char *)string,"%4d",adcx);
    			OLED_ShowString(88,0,string,16);
    			huo = HUO_Scan();
    			OLED_ShowNum(56,32,huo,1,16);
    			
    			if(huo_flag == 0)
    			{
    				if(adcx <= adcx_index)
    				{
    					LED0 = 0;
    					for(i = 0;i<2;i++)//����
    					OLED_ShowChinese(i*16+16*3,48,i+31,16);
    					zhuangtai = 1;
    				}
    				else
    				{
    					LED0 = 1;
    					for(i = 0;i<2;i++)//��ȫ
    					OLED_ShowChinese(i*16+16*3,48,i+33,16);
    					zhuangtai = 0;
    				}
    			}
    			else
    			{
    				if((adcx <= adcx_index)&&huo==1)
    				{
    					LED0 = 0;
    					for(i = 0;i<2;i++)//����
    					OLED_ShowChinese(i*16+16*3,48,i+31,16);
    					zhuangtai = 1;
    				}
    				else
    				{
    					LED0 = 1;
    					for(i = 0;i<2;i++)//��ȫ
    					OLED_ShowChinese(i*16+16*3,48,i+33,16);
    					zhuangtai = 0;
    				}
    			}
    			if(fasong == 1)zhuangtai?printf("1"):printf("0");//printf("����\r\n"):printf("��ȫ\r\n");
    			OLED_Refresh();
    			t=0;
    		}
    		delay_ms(20);	
    		
    	}
    }
    
    
    
    
    

    6 最后

    物联沃分享整理
    物联沃-IOTWORD物联网 » 毕业设计:基于STM32的火灾报警系统设计与实现——物联网与单片机的完美结合

    发表评论