基于MATLAB GUI的环境温湿度检测界面设计

一、题目要求

  温度,湿度,CO2作为农业生产中中非常重要的参数,需要准确的采样。该系统完成对于上述参数的精确采样,通过LCD显示在面板上,并将测量值发送到上位机进行显示。

(1)测量对应的温度、湿度、CO2的值。
(2)用OLED显示实际的温度值和湿度值
(3)实现对温度,湿度,CO2的实时采集。
(4)如果温湿度低于或者高于设定值,采取对应措施升降温和升降湿度值。
(5)在上位机上设计监测界面,实时显示各个测量值。


源码
链接:https://pan.baidu.com/s/1PWT5x9oD2lo6c3Wlz6RVfg
提取码:6666

二、系统总体设计

1、用到的器件和软件

控制器:stm32f407vet6核心板
显示屏:0.96寸OLED (SPI接口)
温湿度传感器:DHT11
CO2浓度传感器:SGP30 (I2C接口)

stm32编程软件:CUBEMX,keil5
上位机软件设计工具:MATLAB APP Designer

2、整体思路

  通过DHT11采集温湿度和SGP30采集二氧化碳并通过OLED实时显示,1s刷新一次,通过串口将采集到的数据上传到用MATLAB做的界面中。



三、效果图

在这里插入图片描述
在这里插入图片描述

四、嵌入式硬件部分

1.原理图

请添加图片描述
请添加图片描述

五、嵌入式软件部分

1.主函数

//包含显示、初始化、和传感器读数程序
int main(void)
{
   
uint32_t CO2Data,TVOCData;//定义CO2浓度变量与TVOC浓度变量
  uint16_t temperature;
  uint16_t humidity;
unsigned long sgp30_dat;
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  MX_TIM6_Init();
  MX_SPI2_Init();
HAL_UART_Receive_DMA(&huart1,aRxBuffer,1);  //串口DMA初始化
OLED_Init();    //OLED初始化
Show_Str(0, 2,"Initializing...", 16, 0);  //显示初始化中...

//DHT11初始化
  while(DHT11_Init()){
   
	HAL_Delay(500);
  }

  //初始化SGP30
  SGP30_Init();  
HAL_Delay(100);
SGP30_Write(0x20,0x08);
sgp30_dat = SGP30_Read();//读取SGP30的值
CO2Data = (sgp30_dat & 0xffff0000) >> 16;
TVOCData = sgp30_dat & 0x0000ffff;	
//SGP30模块开机需要一定时间初始化,在初始化阶段读取的CO2浓度为400ppm,TVOC为0ppd且恒定不变,因此上电后每隔500ms读取一次
//SGP30模块的值,如果CO2浓度为400ppm,TVOC为0ppd,则屏幕闪烁显示“正在检测中...”,直到SGP30模块初始化完成。
while(CO2Data == 400 && TVOCData == 0)
{
   
	 SGP30_Write(0x20,0x08);
	 sgp30_dat = SGP30_Read();//读取SGP30的值
	 CO2Data = (sgp30_dat & 0xffff0000) >> 16;//取出CO2浓度值
	 TVOCData = sgp30_dat & 0x0000ffff;			 //取出TVOC值
	 HAL_Delay(500);
}
OLED_Clear();    //清屏
  while (1)
  {
   
	DHT11_Read_Data(&temperature,&humidity);   //读取温度湿度值
     SGP30_Write(0x20,0x08);
	sgp30_dat = SGP30_Read();//读取SGP30的值
	CO2Data = (sgp30_dat & 0xffff0000) >> 16;//取出CO2浓度值
	printf("%02d%1d",temperature>>8,temperature&0xff);
	printf("%02d%1d",humidity>>8,humidity&0xff);
	printf("%03d",CO2Data);
	HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
	
//OLED显示
//温度显示
	Show_Str(4, 1,"temp:", 16, 0);
	OLED_ShowNum(40,1
  • 4
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值