基于STM32的温湿度光照强度仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)

基于STM32的温湿度光照强度仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)

仿真图Proteus 8.9

程序编译器:keil 5

编程语言:C语言

设计编号:C0109

**1.**主要功能

本次嵌入式课程设计综合实验的内容为基于STM32单片机的温湿度光照强度采集报警系统。完成LCD1602液晶显示、DHT11温湿度测量、光敏电阻、指示灯、蜂鸣器控制等多项任务。

1、以STM32为最小系统电路进行连接,用LCD1602液晶显示屏显示温度、湿度、温度阈值,湿度阈值和光照阈值。

2、用DHT11温湿度传感器进行温湿度的测量,光敏电阻进行光照强度测量。

3、可以通过按键可以设置温湿度阈值和光照阈值。设置按键进入设置模式/退出设置模式,按键加减调整阈值。

4、当温湿度或者光强超过设置的阈值时有声光报警,对应报警指示灯点亮,蜂鸣器报警。

5、默认温度低阈值20℃,高阈值30℃,湿度低阈值50%,湿度高阈值80%,光照强度300Lux。

STM32单片机 DHT11 LCD1602 按键 光敏电阻

资料下载链接:

通过网盘分享的文件:KEY_C0109

链接: https://pan.baidu.com/s/19UJFDgOolfIqJ0lfRLZH1A

提取码: qe8n

2.仿真设计

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

img

开始仿真后LCD1602液晶第一行显示温度T,湿度H和光照强度L,第二行显示温度正常范围,湿度正常范围和光照强度阈值。

img

调整DHT11温湿度模块湿度为81%,高于阈值,蜂鸣器报警,湿度过高指示灯点亮。

img

3.程序设计

程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序是HAL版本编写的,有stm32cubemx配置文件。有注释可以结合讲解视频理解。

img

img

int main(void)
{
  /* USER CODE BEGIN 1 */

	char data_str1[20]; 
//	char data_str2[20]; 
	char data_str2[]="L:000C   H:000C ";
	char str[20];  //温度值转换为字符串的存放数组	

	ADC_ChannelConfTypeDef sConfig = {0};  //建立sConfig结构体
	char adc_str[20];  //AD值转换为字符串的存放数组
	uint32_t adcv;  //存放ADC转换结果


	
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_TIM2_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
//  printf("DS18B20测温实验\n\r");
	HAL_UART_Transmit(&huart1, (uint8_t *)&"DHT11\r\n", 7, 10);						//串口1发送字符串,数组长度为10,
	
	LCD_Init();																																//LCD1602初始化

	temp_L=20;temp_H=40;																											//默认温度阈值20-40
//	DS18B20_Get_Temp();
	HAL_TIM_Base_Start_IT(&htim2);  //初始化定时器
	LED1=LED2=LED3=LED4=LED_ON;
	HAL_Delay(100);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(20);
		
		sConfig.Channel = ADC_CHANNEL_1;  //选择通道1
		HAL_ADCEx_Calibration_Start(&hadc1);   //开启adc前校准一下ADC
		HAL_ADC_ConfigChannel(&hadc1, &sConfig);  //选择ADC1的通道1
		HAL_ADC_Start(&hadc1);										//启动ADC1
		HAL_ADC_PollForConversion(&hadc1, 30);		//等待ADC1转换结束,超时设定为10ms
		adcv = HAL_ADC_GetValue(&hadc1);					//读取ADC1的转换结果
//		sprintf(adc_str,"adc_value=%d\r\n",adcv);
//		HAL_UART_Transmit(&huart1, (uint8_t *)adc_str, strlen(adc_str), 20);//串口1发送字符串,数组长度为strlen(str),超时20ms
//		memset(adc_str,0,strlen(adc_str));

		light_temp=light_intensity(adcv);	
//		sprintf(adc_str,"lvalue=%d\r\n",temp);
		sprintf(adc_str,"%4.0fLx\r\n",light_temp);
		HAL_UART_Transmit(&huart1, (uint8_t *)adc_str, strlen(adc_str), 20);//串口1发送字符串,数组长度为strlen(str),超时20ms
		memset(adc_str,0,strlen(adc_str));
//		temp=(float)adcv*(3.3/4095);

		
	    if(DHT11_Get_TempHumi(&hum_dat, &temp_dat)){//读取失败
	    HAL_UART_Transmit(&huart1, (uint8_t *)&"DHT11 read failed\r\n", 20, 10);						//串口1发送字符串,数组长度为3,超时10ms	
	    } else{//读取正常
  	  		sprintf(str,"TUM=%dC\r\n",temp_dat);
			HAL_UART_Transmit(&huart1, (uint8_t *)str, 20, 10);//串口1发送字符串,数组长度为6,超时10ms	
			sprintf(str,"HUM=%d%%\r\n",hum_dat);
			HAL_UART_Transmit(&huart1, (uint8_t *)str, 20, 10);//串口1发送字符串,数组长度为6,超时10ms 
	    }	
				//液晶显示:T温度  H湿度,
		sprintf(data_str1,"T:%d H:%d L:%4.0f  ",temp_dat,hum_dat,light_temp);//转换温度,湿度

		LCD_ShowString(0,0,data_str1);	//LCD1602显示第一行
		if(setnum==0)
		{
			sprintf(data_str2,"%d-%d %d-%d %d ",set_temp_dat_l,set_temp_dat,set_hum_dat,set_hum_dat_h,set_light_dat);///转换设置温度,设置湿度
			LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行
		}
		if(setnum	== 1)
		{
			sprintf(data_str2,"%d^%d %d-%d %d ",set_temp_dat_l,set_temp_dat,set_hum_dat,set_hum_dat_h,set_light_dat);///转换设置温度,设置湿度
			LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行
		}
		if(setnum	== 2)
		{
			sprintf(data_str2,"%d-%d^ %d-%d %d ",set_temp_dat_l,set_temp_dat,set_hum_dat,set_hum_dat_h,set_light_dat);///转换设置温度,设置湿度
			LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行
		}
		if(setnum	== 3)
		{
			sprintf(data_str2,"%d-%d %d^%d %d ",set_temp_dat_l,set_temp_dat,set_hum_dat,set_hum_dat_h,set_light_dat);///转换设置温度,设置湿度
			LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行
		}
		if(setnum	== 4)
		{
			sprintf(data_str2,"%d-%d %d-%d^ %d",set_temp_dat_l,set_temp_dat,set_hum_dat,set_hum_dat_h,set_light_dat);///转换设置温度,设置湿度
			LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行
		}
		if(setnum	== 5)
		{
			sprintf(data_str2,"%d-%d %d-%d %d^",set_temp_dat_l,set_temp_dat,set_hum_dat,set_hum_dat_h,set_light_dat);///转换设置温度,设置湿度
			LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行
		}
//		LCD_ShowString(0,0,data_str1);	//LCD1602显示第一行
//		LCD_ShowString(1,0,data_str2);	//LCD1602显示第二行
//		memset(str,0,strlen(data_str1)); 
		



  }
  /* USER CODE END 3 */
}

程序流程图

img

4.设计报告

12111字设计报告,内容包括设计目标、硬件设计、软件设计、结论等。

img

在当今这个信息技术日新月异的时代,物联网(IoT)技术以前所未有的速度重塑着我们的生活和工作方式,其影响力渗透到了社会经济的各个角落。其中,温湿度光照监控系统作为物联网技术应用的重要组成部分,在现代农业管理中起到了关键作用,它能帮助农民精准调控作物生长环境,提高农作物的产量和质量;在智能家居领域,通过智能调控室内温湿度,为居民创造更加舒适健康的生活空间;而在仓储物流行业,准确的温湿度监控则是保证货物品质、减少损耗的重要手段,尤其对于食品、药品等对环境条件敏感的商品来说至关重要。

鉴于此,本项目致力于开发一套高效、可靠的温湿度光照采集报警系统,以STM32系列单片机为核心控制器,不仅因为其高性能、低功耗的特性,还因其丰富的外设资源和广泛的社区支持,非常适合于构建复杂的嵌入式系统。我们选择采用Proteus仿真平台进行设计验证,该平台以其高度逼真的系统模拟能力著称,能够在开发初期有效规避硬件搭建中的潜在问题,极大提升开发效率和设计的准确性。

5.下载链接

img

0、常见使用问题及解决方法–必读!!!!

1、程序代码

2、Proteus仿真

3、功能要求

4、开题报告

5、设计报告

6、框图

7、讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

资料下载链接:

通过网盘分享的文件:KEY_C0109

链接: https://pan.baidu.com/s/19UJFDgOolfIqJ0lfRLZH1A

提取码: qe8n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BT-BOX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值