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

这里写目录标题

  • **1.****主要功能**
  • **2.仿真设计**
  • **3.程序设计**
  • **4.设计报告**
  • **5.下载链接**

基于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;  //选择通道1HAL_ADCEx_Calibration_Start(&hadc1);   //开启adc前校准一下ADCHAL_ADC_ConfigChannel(&hadc1, &sConfig);  //选择ADC1的通道1HAL_ADC_Start(&hadc1);										//启动ADC1HAL_ADC_PollForConversion(&hadc1, 30);		//等待ADC1转换结束,超时设定为10msadcv = 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),超时20msmemset(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSH 服务部署指南

本指南涵盖 OpenSSH 服务端的安装、配置密码/公钥/多因素认证,以及连接测试方法。 适用系统:Ubuntu/Debian、CentOS/RHEL 等主流 Linux 发行版。 1. 安装 SSH 服务端 Ubuntu/Debian # 更新软件包索引 sudo apt update# 安装 OpenSSH 服务端 sudo apt i…

《Python星球日记》 第46天:决策树与随机森林

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、前言二、决策树算法原理1. 决策树简介2. 决策树的分裂准则(1) 信息熵与信息增益(2) 基尼不纯…

Vue2:引入公共JS,通过this调用

tools.js // 图片加上前缀 baseurl 是请求域名 img 是图片路径export function getimgurl(img) {return ${this.$baseurl}${img}}main.js import baseUrl from "/api/baseUrl.js" Vue.prototype.$baseurl baseUrlimport {getimgurl} from /api/tool.js; Vue.protot…

【Hot 100】 146. LRU 缓存

目录 引言LRU 缓存官方解题LRU实现📌 实现步骤分解步骤 1:定义双向链表节点步骤 2:创建伪头尾节点(关键设计)步骤 3:实现链表基础操作操作 1:添加节点到头部操作 2:移除任意节点 步骤…

【Linux】swap交换分区管理

目录 一、Swap 交换分区的功能 二、swap 交换分区的典型大小的设置 2.1 查看交换分区的大小 2.1.1 free 2.1.2 cat /proc/swaps 或 swapon -s 2.1.3 top 三、使用交换分区的整体流程 3.1 案例一 3.2 案例二 一、Swap 交换分区的功能 计算机运行一个程序首先会将外存&am…

【计算机网络】用户从输入网址到网页显示,期间发生了什么?

1.URL解析 浏览器分解URL:https://www.example.com/page 协议:https域名:www.example.com路径:/page 2.DNS查询: 浏览器向DNS服务器发送查询请求,将域名解析为对应的IP地址。 3.CDN检查(如果有)&#…

架空输电线巡检机器人轨迹优化设计

架空输电线巡检机器人轨迹优化 摘要 本论文针对架空输电线巡检机器人的轨迹优化问题展开研究,综合考虑输电线复杂环境、机器人运动特性及巡检任务需求,结合路径规划算法、智能优化算法与机器人动力学约束,构建了多目标轨迹优化模型。通过改进遗传算法与模拟退火算法,有效…

根据窗口大小自动调整页面缩放比例,并保持居中显示

vue 项目 直接上代码 图片u1.png 是个背景图片 图片u2.png 是个遮罩 <template><div id"app"><div class"viewBox"><divclass"screen":style"{ transform: translate(-50%,-50%…

初学Python爬虫

文章目录 前言一、 爬虫的初识1.1 什么是爬虫1.2 爬虫的核心1.3 爬虫的用途1.4 爬虫分类1.5 爬虫带来的风险1.6. 反爬手段1.7 爬虫网络请求1.8 爬虫基本流程 二、urllib库初识2.1 http和https协议2.2 编码解码的使用2.3 urllib的基本使用2.4 一个类型六个方法2.5 下载网页数据2…

oracle 数据库sql 语句处理过程

14.1SQL语句处理过程 在进行SQL语句处理优化前&#xff0c;需要先熟悉和了解SQL语句的处理过程。 每种类型的语句在执行时都需要如下阶段&#xff1a; 第1步: 创建游标。 第2步: 分析语句。 第5步: 绑定变量。 第7步: t运行语句。 第9步: 关闭游标。 如果使用了并行功能&#x…

pm2 list查询服务时如何通过name或者namespace进行区分

在 PM2 中&#xff0c;如果 pm2 list 显示的所有服务名称&#xff08;name&#xff09;相同&#xff0c;就无法直观地区分不同的进程。这时可以通过 --namespace&#xff08;命名空间&#xff09; 或 自定义 name 来区分服务。以下是解决方案&#xff1a; 方法 1&#xff1a;启…

[python] 函数基础

二 函数参数 2.1 必备参数(位置参数) 含义: 传递和定义参数的顺序及个数必须一致 格式: def func(a,b) def func_1(id,passwd):print("id ",id)print("passwd ",passwd) func_1(10086,123456) 2.2 默认参数 函数: 为函数的参数提供一个默认值,如果调…

超大规模SoC后仿真流程与优化

在超大规模SoC设计中,是否需要进行全芯片后仿真(Full-Chip Post-layout Simulation)取决于多个因素,包括设计复杂度、项目风险、资源限制以及验证目标。以下是针对这一问题的系统性分析: 1. 全芯片后仿真的必要性 需要全芯片后仿真的场景 系统级交互验证: 跨模块信号交互…

深入理解 Docker 网络原理:构建高效、灵活的容器网络

在现代软件开发中&#xff0c;Docker 已经成为了容器化技术的代名词&#xff0c;广泛应用于开发、测试和生产环境。Docker 使得开发者能够将应用及其依赖打包成一个轻量级的容器&#xff0c;并通过 Docker 容器化技术来实现高效的部署与管理。 然而&#xff0c;在日常使用 Dock…

leetcode 242. Valid Anagram

题目描述 因为s和t仅仅包含小写字母&#xff0c;所以可以开一个26个元素的数组用来做哈希表。不过如果是unicode字符&#xff0c;那就用编程语言自带的哈希表。 class Solution { public:bool isAnagram(string s, string t) {int n s.size();if(s.size() ! t.size())return …

4、反应釜压力监控系统 - /自动化与控制组件/reaction-vessel-monitor

76个工业组件库示例汇总 反应釜压力监控组件 这是一个用于反应釜压力监控的自定义组件&#xff0c;专为化工厂反应釜压力监控设计。采用苹果工业风格界面&#xff0c;简洁优雅&#xff0c;功能实用&#xff0c;易于使用。 功能特点 实时压力可视化&#xff1a;直观展示反应…

系统思考助力富维东阳

刚刚完成了长春一家汽车零配件公司关于系统思考的项目&#xff01; 在开班仪式上&#xff0c;公司总经理深刻阐述了项目的背后意义&#xff0c;强调了系统思考与公司战略的紧密联系。这不仅是一次培训&#xff0c;更是一次关于“如何全方位看待问题”的深度对话。 在这个过程中…

Linux下的c/c++开发之操作Sqlite3数据库

libsqlite3-dev 介绍&#xff08;Linux 下的 SQLite3 C/C 开发包&#xff09; libsqlite3-dev 是一个开发包&#xff0c;在 Linux 环境下为使用 SQLite3 C API 进行开发的 C/C 程序员提供头文件&#xff08;如 sqlite3.h&#xff09;和静态库/动态库的链接信息&#xff08;如 …

【Prompt工程—文生图】案例大全

目录 一、人物绘图 二、卡通头像 三、风景图 四、logo设计图 五、动物形象图 六、室内设计图 七、动漫风格 八、二次元图 九、日常场景图 十、古风神化图 十一、游戏场景图 十二、电影大片质感 本文主要介绍了12种不同类型的文生图技巧&#xff0c;通过加入不同的图像…

GMRES算法处理多个右端项的Block与PseudoBlock变体

GMRES算法处理多个右端项的Block与PseudoBlock变体 Block与PseudoBlock GMRES简介 在处理多个右端项的线性方程组时&#xff0c;Block GMRES和PseudoBlock GMRES是两种常用的变体算法&#xff1a; Block GMRES&#xff1a;同时处理所有右端项&#xff0c;构建一个大的Krylov…