news 2026/3/8 1:57:44

基于?STM32大棚DHT11温湿度监测protues仿真设计 资料包含:程序+仿真+原理图+...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于?STM32大棚DHT11温湿度监测protues仿真设计 资料包含:程序+仿真+原理图+...

基于?STM32大棚DHT11温湿度监测protues仿真设计 资料包含:程序+仿真+原理图+PCB(具体看下文资料清单) 主要功能: 1.液晶实时显示DHT11温度和湿度值; 2.具有温湿度超上限阈值报警功能; 3.温湿度上限值阈值可通过按键调节。

老铁们今天带大家玩点实在的——用STM32搞个能报警的温湿度监控系统。直接上干货,这个系统最骚的地方在于能用按键随时调报警阈值,液晶屏实时显示数据,温湿度超标直接亮灯+哔哔叫,特别适合大棚种植这类需要精准监控的场景。

先看硬件配置(Proteus仿真截图示意):STM32F103C8T6当大脑,DHT11传感器负责温湿度采集,1602液晶做显示,三个按键用来设置阈值,蜂鸣器配LED组成报警双保险。重点说下DHT11的数据脚接在PA0,这货的时序要求贼严格,代码里必须把延时搞精准。

核心代码先从数据读取开刀。DHT11的启动信号需要单片机先拉低18ms然后拉高20-40us,这个操作必须用微秒级延时实现:

void DHT11_Start(void){ GPIO_InitTypeDef gpio; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); gpio.GPIO_Pin = GPIO_Pin_0; gpio.GPIO_Mode = GPIO_Mode_Out_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpio); GPIO_ResetBits(GPIOA, GPIO_Pin_0); //拉低18ms Delay_ms(18); GPIO_SetBits(GPIOA, GPIO_Pin_0); Delay_us(30); //主机拉高20-40us //切换输入模式等待响应 gpio.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &gpio); }

这段代码的关键在于模式切换——输出模式发完启动信号后要立即切回上拉输入模式等DHT11回应。很多新手容易在这里翻车,忘记改模式导致数据读不到。

数据解析部分要注意的是每个bit都以50us低电平开始,高电平持续时间决定数据是0还是1。这里必须用精准的while循环检测:

for(i=0; i<5; i++){ for(j=0; j<8; j++){ while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)); //等待高电平 Delay_us(40); //关键延时!超过30us算1 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) data[i] |= (1<<(7-j)); //高位在前 else data[i] &= ~(1<<(7-j)); while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)); //等待低电平 } }

校验位计算也不能马虎,前四个字节的和必须等于第五个字节,否则数据无效。建议加上重试机制,连续三次读取失败要报传感器故障。

阈值设置功能主要靠按键扫描实现。这里用状态机方式处理长按加速,代码比普通扫描复杂但用户体验更爽:

if(HAL_GPIO_ReadPin(SET_GPIO_Port, SET_Pin) == GPIO_PIN_RESET){ delay_ms(10); //消抖 if(HAL_GPIO_ReadPin(SET_GPIO_Port, SET_Pin) == GPIO_PIN_RESET){ set_mode = !set_mode; //进入/退出设置模式 while(!HAL_GPIO_ReadPin(SET_GPIO_Port, SET_Pin)); //等待松开 } } //在设置模式下处理加减 if(set_mode){ handle_inc_dec_keys(&temp_threshold, &humid_threshold); //参数保存到EEPROM EE_WriteVariable(VirtAddVarTab[0], temp_threshold); EE_WriteVariable(VirtAddVarTab[1], humid_threshold); }

报警逻辑简单粗暴,直接在主循环里对比当前值和阈值。双阈值分开设定更灵活,比如温度设35℃湿度设80%:

if(current_temp > temp_threshold || current_humid > humid_threshold){ HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); }else{ HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); }

实测发现DHT11在高温高湿环境下响应会变慢,建议在代码里加入超时判断。当传感器无响应超过2秒时,在液晶屏显示"Sensor Error"并闪烁报警灯,防止系统死机。

最后说下仿真中的坑:Proteus里的DHT11模块对时序要求比实物更严格,建议把代码中的微秒级延时适当调小10%-15%。按键防抖处理也不能省,不然设置值时容易跳变。整个系统跑起来后,阈值修改能实时保存到EEPROM,断电重启后依然生效,这才算真正达到实用级别。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/24 11:46:35

License服务器搭建:企业级授权管理体系设计

License服务器搭建&#xff1a;企业级授权管理体系设计 在大型AI平台的实际运维中&#xff0c;一个常被低估但极具破坏力的问题正在浮现&#xff1a;明明采购了20个TensorRT企业版License&#xff0c;却总有团队反馈“授权不足”&#xff0c;而另一些节点上的License却整日闲置…

作者头像 李华
网站建设 2026/3/6 9:07:01

孩子近视防控,哪些方法最容易坚持?

在儿童青少年近视高发的当下&#xff0c;防控工作的关键不仅在于方法的有效性&#xff0c;更在于能否长期坚持。很多家长尝试过多种防控手段&#xff0c;却因操作复杂、占用时间过多等问题难以持续。结合孩子的学习生活节奏&#xff0c;找到简单易行、可融入日常的防控方法&…

作者头像 李华
网站建设 2026/3/7 14:36:28

世界人工智能大会亮相:站在全球舞台讲述中国故事

世界人工智能大会亮相&#xff1a;站在全球舞台讲述中国故事 在2024年世界人工智能大会的展厅里&#xff0c;一个不起眼的边缘计算盒子正实时处理着来自城市交通摄像头的视频流——每秒分析超过60帧画面&#xff0c;识别车辆、行人与异常行为&#xff0c;端到端延迟却不到8毫秒…

作者头像 李华
网站建设 2026/2/26 1:51:41

Java计算机毕设之基于springboot的社区诊所在线挂号与排队应用系统在线挂号 - 医生排班 - 智能排队 - 诊疗追溯(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/4 18:18:18

轻量级服务架构设计:TensorRT + REST API 实战

轻量级服务架构设计&#xff1a;TensorRT REST API 实战 在AI模型从实验室走向生产环境的过程中&#xff0c;一个常见的困境是&#xff1a;训练好的模型明明在测试集上表现优异&#xff0c;但一旦部署上线&#xff0c;就出现响应缓慢、资源占用高、并发能力差等问题。尤其是在…

作者头像 李华