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

余额充值