STM32项目分享:家庭环境监测系统

 目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片: 

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1oi42117dp/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32的家庭环境监测系统。功能如下:

  1. 温湿度采集:使用DHT11温湿度传感器采集环境温湿度
  2. 烟雾浓度采集:通过MQ-2烟雾传感器采集环境烟雾浓度
  3. PM2.5浓度采集:通过粉尘传感器采集环境PM2.5浓度
  4. 二氧化碳浓度采集:通过CO2气敏传感器检测二氧化碳浓度
  5. 风扇控制:可自动模式下根据环境温度触发或手动模式下APP开闭
  6. 加湿器控制:可自动模式下根据环境湿度触发或手动模式下APP开闭
  7. 窗户:可自动模式下根据PM2.5浓度触发或手动模式下APP开闭
  8. OLED显示:将检测到的环境数据显示在oled屏幕上。
  9. 蜂鸣器报警:异常情况下本地蜂鸣器触发报警
  10. APP功能:使用机智云APP,包括功能有自动模式和手动模式切换,控制并显示风扇、加湿器和窗户状态,查看蜂鸣器报警状态,显示当前环境温湿度、烟雾浓度和PM2,5浓度信息

2.主要器件

  • STM32F103C8T6最小系统板
  • DHT11温湿度传感器
  • OLED显示屏(4针I2C协议)
  • WiFi模块(ESP8266-01s)
  • MQ-2烟雾浓度传感器
  • PM2.5模块
  • 28BYJ51步进电机
  • 5V风扇模块
  • 加湿器模块及驱动板
  • 继电器
  • 蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	OLED_Init();
	ADCX_Init();
	GP2Y_Init();
	MQ2_Init();
	DHT11_UserConfig();
	MOTOR_UserConfig();
	Key_Init();
	Relay_Init();
	Buzzer_Init();
	Timer2_Init(9,14398);
	uart2_init(9600);
	uart1_init(115200);
	GENERAL_TIM_Init();
	userInit();		//完成机智云初始赋值
	gizwitsInit();	//开辟一个环形缓冲区
	Delay_ms(500);
	gizwitsSetMode(WIFI_AIRLINK_MODE);
	IWDG_Init();	//初始化看门狗
	while (1)
	{
		IWDG_ReloadCounter(); //重新加载计数值 喂狗		
		switch(Menu)
		{
			case 1:	
				Menu1();
				//判断步进电机是否需要进行旋转
				if(Window_Flag_ON == 1)
				{
					MOTOR_Direction_Angle(1,0,90,1);	//顺时针旋转90度
					MOTOR_STOP();
					Window_Flag_ON = 0;
				}
				if(Window_Flag_OFF == 1)
				{
					MOTOR_Direction_Angle(0,0,90,1);	//逆时针旋转90度
					MOTOR_STOP();
					Window_Flag_OFF = 0;
				}
				break;
			case 2: 
					OLED_Clear();
					Menu2();
					Menu = 3;
					//用于判断阈值数据有没有被更改
					old_Temp_value = Temp_value;
					old_Humi_value = Humi_value;
					old_Smog_value = Smog_value;
					old_PM25_value = PM25_value;
					break;
			case 3: 
				//显示传感器阈值
				OLED_ShowNum(1,13,Temp_value,2);
				OLED_ShowNum(2,13,Humi_value,2);
				OLED_ShowNum(3,13,Smog_value,4);
				OLED_ShowNum(4,13,PM25_value,4);
				//进行阈值选择
				if(KeyNum == 1)
				{
					KeyNum = 0;
					value_Option_Num++;
					if(value_Option_Num > 4)
					{
					value_Option_Num = 1;
					}
				}
				//显示选择标识符“>”
				OLED_Option(value_Option_Num);
				//检测阈值数值的调节
				switch(value_Option_Num)
				{
					case 1: 
						if(KeyNum == 3)
						{
							KeyNum = 0;
							Temp_value++;
							if(Temp_value >= 100)
							{
								Temp_value = 1;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							Temp_value--;
							if(Temp_value >= 100)
							{
								Temp_value = 99;
							}
						}
						break;
					case 2: 
						if(KeyNum == 3)
						{
							KeyNum = 0;
							Humi_value++;
							if(Humi_value >= 100)
							{
								Humi_value = 1;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							Humi_value--;
							if(Humi_value >= 100)
							{
								Humi_value = 99;
							}
						}
						break;
					case 3: 
						if(KeyNum == 3)
						{
							KeyNum = 0;
							Smog_value++;
							if(Smog_value >= 501)
							{
								Smog_value = 1;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							Smog_value--;
							if(Smog_value >= 5001)
							{
								Smog_value = 500;
							}
						}
						break;
					case 4: 
						if(KeyNum == 3)
						{
							KeyNum = 0;
							PM25_value++;
							if(PM25_value >= 501)
							{
								PM25_value = 1;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							PM25_value--;
							if(PM25_value >= 501)
							{
								PM25_value = 500;
							}									
						}
						break;
				}
				//退出阈值设置界面
				if(KeyNum == 2)
				{
					KeyNum = 0;
					//当阈值数据被更改后,才会写入FLASH中
					if((old_Temp_value != Temp_value) || (old_Humi_value != Humi_value) || (old_Smog_value != Smog_value) || (old_PM25_value != PM25_value))
					{
						//写入传感器阈值数据
                       FLASH_W(FLASH_START_ADDR,Temp_value,Humi_value,Smog_value,PM25_value);				
					}
					Menu = 1;	//回到主菜单
					OLED_Clear();	//清屏
				}
				break;			
		}
		userHandle();	//更新机智云数据点变量存储的值
		gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云					
	}
}

六、实验效果 

七、资料内容

项目分享

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值