【毕业设计】_基于STM32单片机的温湿度有害气体环境检测(原理图+源码)

一. 系统概况

系统采用STM32单片机作为主控制单元,能够监测环境中的温湿度、烟雾浓度、PM2.5粉尘浓度以及有害气体浓度。监测数据会在显示屏上进行实时展示,并通过蓝牙模块上传到上位机进行进一步显示。

在这里插入图片描述

二. 仿真概况

  1. 系统默认处于手动模式,用户可以通过按键1和按键2对温湿度进行调整。按下按键1会切换温度控制模式:一次是降温,再次则是加热;按下按键2则会切换湿度控制模式:一次是加湿,再次则是除湿。在自动模式下,系统会根据设定的阈值自动调节温湿度,当温度低于阈值时会加热,高于阈值时则会降温;湿度大于阈值时会启动除湿,小于阈值时则启动加湿。如果烟雾、PM2.5或有害气体浓度超出设定阈值,系统会发出警报。

在这里插入图片描述

  1. 当烟雾、PM2.5和有害气体浓度保持在正常范围时,系统会向上位机发送“正常”信号。上位机通过虚拟串口进行模拟连接,可以使用以下网页版串口助手进行监控:

在这里插入图片描述

  1. 如果检测到烟雾、PM2.5或有害气体浓度超出正常范围,系统会向上位机发送“超标”信号,并提供具体的检测数据。

在这里插入图片描述

三.程序设计

#include <main.h>
//
u8 Key;//按键检测
u8 t,h,AIN1,AIN2,AIN0,AIN3;//
u8 tl=25,th=30,hl=33,hh=35,sh=3,ph=4,qh=5;
u8 m=0;//模式
u8 sdt=0,sdh=0;
//


//
void Init_Test(void);
void Test(void);
void Display(void);
//


int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//2:2
	Init_Test();
	
	while(1)
	{
		Key_Scan(&Key);
		DHT11_Read_Data(&t,&h);
		AIN0=PCF8591_ADC_Input(0x90,0);
		AIN1=PCF8591_ADC_Input(0x90,1);
		AIN2=PCF8591_ADC_Input(0x90,2);	

		OLED_ShowString(1,1,"t:");OLED_ShowNum(1,3,t,2);
		OLED_ShowString(1,6,"h:");OLED_ShowNum(1,8,h,2);
		OLED_ShowString(2,1,"s:");OLED_ShowNum(2,3,AIN1,2);//AIN0
		OLED_ShowString(3,1,"p:");OLED_ShowNum(3,3,AIN2,2);//AIN1
		OLED_ShowString(4,1,"q:");OLED_ShowNum(4,3,AIN0,2);//AIN2
		
		OLED_ShowNum(1,11,tl,2);
		OLED_ShowNum(1,14,hl,2);//
		OLED_ShowNum(2,11,th,2);
		OLED_ShowNum(2,14,hh,2);//
		OLED_ShowNum(2,6,sh,2);//
		OLED_ShowNum(3,6,ph,2);//
		OLED_ShowNum(4,6,qh,2);//
		
		
		if(Key==4) 
		{
			m=~m; 
			Key=0;
			LedA2_0;LedA1_0;LedA3_0;LedA4_0;sdt=0;sdh=0;
		}
		
		if(m)
		{
			LedC1_0;//自动
			
			if(t>th) { LedA1_1;}			
			else if(t<tl) { LedA2_1;}
			else if(tl<t<th) { LedA1_0;LedA2_0; }
			if(h>hh) { LedA4_1;}			
			else if(h<hl) { LedA3_1;}
			else if(hl<h<hh) { LedA3_0;LedA4_0; }
			
			if(AIN1>sh|AIN2>ph|AIN0>qh)
			{
				printf("烟雾:%d\r\n",AIN1);
				printf("PM2.5:%d\r\n",AIN2);
				printf("有害气体:%d\r\n",AIN0);
				delay_ms(1000);
			}
			
		}else
		{
			LedC1_1;//手动
			
			if(Key==1&&m==0){ Key=0; sdt++; if(sdt>2) sdt=0;}
			if(Key==2&&m==0){ Key=0; sdh++; if(sdh>2) sdh=0;}
			
			if(sdt==0) { LedA2_0;  LedA1_0;}
			else if(sdt==1) { LedA2_0;  LedA1_1;}
			else if(sdt==2) { LedA1_0;  LedA2_1;}
			
			if(sdh==0) { LedA3_0;  LedA4_0;}
			else if(sdh==1) { LedA4_0;  LedA3_1;}
			else if(sdh==2) { LedA3_0;  LedA4_1;}
		}
		
	}
}

24-32f-41

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值