【毕业设计】_基于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、付费专栏及课程。

余额充值