毕设!基于STM32气体监测系统(程序+电路图+手机APP)!!!

前言

本文给大家分享一个有趣的产品:基于STM32气体监测系统,大家可以借鉴学习,不管是用来做课设毕设还是拿来做一些有趣的小玩意都可以噢。需要单片机资料的同学可以拉到文末进行领取哈~

1,器件准备

  1. 使用的是STM32F103C8T6单片机
  2. 使用JW01传感器用于检测二氧化碳浓度
  3. 使用MQ-9传感器检测可燃气体浓度
  4. 使用MQ-135传感器检测有毒气体浓度
  5. 使用BMP180传感器检测气压
  6. OLED模块显示传感器检测到的数据
  7. 可燃性气体、有毒气体浓度超标时蜂鸣器报警,同时打开风扇通风
  8. ESP8266模块实现 WIFI通讯数据传输,wifi通讯需借助一个有网络wifi热点

综上:以上加粗字体即为STM32气体监测系统所使用的器件~

============================================================

实物图展示】:直接展示实物图,这样更为直观~
在这里插入图片描述

2,原理图+PCB

使用的是立创EDA平台画的原理图,这个平台适用于新手入门,而且封装库之类的还挺多的。
在这里插入图片描述

画完原理图之后,便在平台上面直接生成PCB,随后按照自己想要设计的样式,将器件在PCB板进行摆放再连线。

在这里插入图片描述

实物使用图,以下便是实物正常使用的图片了:

在这里插入图片描述

3,硬件代码

由于代码篇幅过长,为影响阅读,这里只粘贴部分代码哈~
1,mian.c主函数部分
int main(void)
 { 		    
	char buf[20]; 
	unsigned short timeCount = 0;	
	unsigned char *dataPtr = NULL;	
	Timer_Init();
	Adc_Init();
	delay_init();	    	   
	Usart2_Init(115200);     
	DHT11_Init();
	LED_Init();
	OLED_Init();
	bmp180_init(); 
	ESP8266_Init();	
	OLED_Clear();
	delay_ms(500);	 
	OLED_ShowCHinese(1,1,10);
	OLED_ShowCHinese(1,3,11);
	OLED_ShowCHinese(1,5,12);
	OLED_ShowCHinese(1,7,13);
	OLED_ShowString(1,9,":----ppm");
	
	OLED_ShowCHinese(2,1,3);
	OLED_ShowCHinese(2,3,4);
	OLED_ShowCHinese(2,5,5);
	OLED_ShowCHinese(2,7,6);
	OLED_ShowString(2,9,":---ppm");
	
	OLED_ShowCHinese(3,1,7);
	OLED_ShowCHinese(3,3,8);
	OLED_ShowCHinese(3,5,5);
	OLED_ShowCHinese(3,7,6);
	OLED_ShowString(3,9,":---ppm");
	
	OLED_ShowCHinese(4,1,5);
	OLED_ShowCHinese(4,3,9);
	OLED_ShowString(4,5,":-------kpa");
	
	while(OneNet_DevLink())			
	delay_ms(500);	
	OneNET_Subscribe();           
	MQ9_limit=MQ135_limit=50;
	while(1)
	{	    	    
		if(++timeCount >= 50)									
		{	
			Uart_Rece_Pares();
			sprintf(buf,"%4d",co2);
			OLED_ShowString(1,10,buf); 
			
			MQ9=(int)MQ9_GetPPM();			
			sprintf(buf,"%3d",MQ9);
			OLED_ShowString(2,10,buf);
		
			MQ135=(int)Get_Adc_Average(ADC_Channel_5,10)*330/4095;
			sprintf(buf,"%3d",MQ135);
			OLED_ShowString(3,10,buf);
			
			bmp180_measure();
			delay_ms(500);
			
			BMP180=bmp180_getPressure();
			sprintf(buf,"%.3f",BMP180);
			OLED_ShowString(4,6,buf);
				
			if(mode==0)				
			{
				if(MQ9>MQ9_limit || MQ135>MQ135_limit)			
				{
					Jd0_Set(GPIO_ON);	
					Beep_Set(GPIO_ON);	
				}else
				{
					Beep_Set(GPIO_OFF);
					Jd0_Set(GPIO_OFF);	
				}
				
			}else					
			{
			}
			OneNet_SendData();									
			timeCount = 0;
			ESP8266_Clear();
		}
		dataPtr = ESP8266_GetIPD(0);
		if(dataPtr != NULL)
		{
			OneNet_RevPro(dataPtr);
		}				
	}
}

主要就是对一些使用的模块的函数做一些初始化操作~

2,JW01传感器模块检测二氧化碳浓度
float tvoc = 0;   // TVOC浓度
float ch2o = 0;   // CH2O浓度
u16 co2 = 0;   // CO2浓度
void Uart_Rece_Pares(void)   // 串口接收内容解析函数
{
	
	if (gReceEndFlag  == 1)   // 如果接收完成
	{
		// 解析接收内容
		if ((u8)(gReceFifo[0] + gReceFifo[1] + gReceFifo[2] + gReceFifo[3] + gReceFifo[4]) == gReceFifo[5])
		{
			// CO2浓度(单位是PPM)
			co2 = (u16)(gReceFifo[1] * 256 + gReceFifo[2]);
		}

		
		// 清空接收数组
		for (gClearCount = 0;gClearCount < gReceCount;gClearCount ++)
		{
			gReceFifo[gClearCount] = ' ';
		}
			
		gReceEndFlag = 0;   // 清除接收完成标志位
		gReceCount = 0;   // 清零接收计数变量
	}
}
3,BMP180传感器模块监测气压
static void bmp180_iic_init(void)
{
		GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(BMP180_SDA_RCC_CLK | BMP180_SCL_RCC_CLK, ENABLE);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    
    /* SDA GPIO初始化设置 */
    GPIO_InitStructure.GPIO_Pin = BMP180_SDA_GPIO_PIN;
    GPIO_Init(BMP180_SDA_GPIO_PORT, &GPIO_InitStructure);
    
    /* SCL GPIO初始化设置 */
    GPIO_InitStructure.GPIO_Pin = BMP180_SCL_GPIO_PIN;
    GPIO_Init(BMP180_SCL_GPIO_PORT, &GPIO_InitStructure);
    
    BMP180_SCL(1); BMP180_SDA(1);
}
 
/*
 * 函数名称: bmp180_sda_inout
 * 函数功能: 配置SDA线为输入/输出模式
 * 参    数: 无
 * 返 回 值: 无
 */
static void bmp180_sda_inout(uint8_t dir)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(BMP180_SDA_RCC_CLK, ENABLE);
 
    if(dir) {
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 推挽输出 */
    } else {
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/* 浮空输入 */
    }
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = BMP180_SDA_GPIO_PIN;
    GPIO_Init(BMP180_SDA_GPIO_PORT, &GPIO_InitStructure);
}
 
/*
 * 函数名称: bmp180_iic_start
 * 函数功能: 产生IIC起始信号
 * 参    数: 无
 * 返 回 值: 无
 */
static void bmp180_iic_start(void)
{
    bmp180_sda_inout(1); /* 配置sda线为输出模式 */
    BMP180_SDA(1);
    BMP180_SCL(1);
    delay_us(4);
    BMP180_SDA(0);   /* 开始信号 CLK高电平时,SDA从高变低 */
    delay_us(4);
    BMP180_SCL(0);   /* 钳住I2C总线,准备发送或接收数据 */
}
 
/*
 * 函数名称: bmp180_iic_stop
 * 函数功能: 产生IIC停止信号
 * 参    数: 无
 * 返 回 值: 无
 */
static void bmp180_iic_stop(void)
{
    bmp180_sda_inout(1);  /* 配置sda线为输出模式 */
    BMP180_SCL(0);
    BMP180_SDA(0);   /* 停止信号 CLK高电平时,SDA从低变高 */
    delay_us(4);
    BMP180_SCL(1);
    BMP180_SDA(1);   /* 发送I2C总线结束信号 */
    delay_us(4);
}
 
/*
 * 函数名称: bmp180_iic_waitAck
 * 函数功能: 等待应答信号到来
 * 参    数: 无
 * 返 回 值: 1-接收应答失败; 0-接收应答成功
 */
static uint8_t bmp180_iic_waitAck(void)
{
    uint8_t ucErrTime = 0;
    bmp180_sda_inout(0); /* SDA设置为输入模式 */
    
    BMP180_SDA(1);
    delay_us(1);
    BMP180_SCL(1);
    delay_us(1);
    while(BMP180_READ_SDA) {
        ucErrTime ++;
        if(ucErrTime>250) {
            bmp180_iic_stop();
            return 1;
        }
    }
    BMP180_SCL(0);
    return 0;
} 

4,软件部分

基于STM32的气体监测系统,是采用了STM32F103C8T6单片机作为核心控制器,结合多种传感器、显示模块、报警装置和通讯模块,实现了一个功能丰富的环境监测系统。

App的设计原理主要围绕以下几个方面展开:

1,数据接收与展示:
App通过WiFi与ESP8266模块通信,接收STM32单片机通过ESP8266模块发送的传感器数据,包括二氧化碳浓度、可燃气体浓度、有毒气体浓度、气压等,并在App界面上实时展示这些数据。

2,控制功能:
App提供用户控制界面,允许用户远程控制风扇、蜂鸣器和LED的状态,如启动/停止风扇通风、触发蜂鸣器报警、点亮/熄灭LED等。

3,阈值设置:
用户可以在App中设置可燃气体和有毒气体的浓度阈值。当监测到的浓度超过这些阈值时,系统自动触发报警和风扇通风,用户也可以根据实际情况调整这些阈值。

4,用户交互:
App设计应注重用户友好性,提供清晰的界面布局和直观的操作方式,方便用户快速了解当前环境状况并进行相应操作。

使用的是onenet平台,进行数据的传输~

APP界面是可以定制,也支持小程序,支持网页等形式。

当然,硬件部分也允许做一些模块的更换修改的,例如CO2不需要,换成CO,或者增加或减少模块,都是支持的~

5,使用场景

该产品的运用场景非常广泛,包括但不限于以下几个方面:

  • 家庭环境:可用于家庭厨房、卧室等区域,监测二氧化碳、可燃气体和有毒气体的浓度,保障家庭成员的健康安全。
  • 工业场所:在化工厂、油库、煤矿等工业场所,用于监测有害气体浓度,及时发现并处理潜在的安全隐患。
  • 公共场所:在商场、学校、医院等公共场所,用于监测空气质量,为公众提供健康舒适的环境。
  • 科研实验:在科研实验中,用于精确测量和记录各种气体的浓度变化,为实验提供可靠的数据支持。

=================================================

资料可以点击链接进行获取免费领取单片机资料

在这里插入图片描述

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值