当前位置: 首页 > news >正文

探索STM32单片机仿真温湿度采集控制系统

stm32单片机仿真温湿度采集控制系统 有报告 演示视频 proteus仿真 keil 代码 以stm32为最小系统电路进行连接,用液晶显示屏显示温度、湿度数据。 通过按键可以设置阈值。 当温度达到报警的阈值时散热继电器开始工作,带动发动机进行转动,由此来达到散热的目的。 当湿度达到一定的阈值时,洒水继电器开始工作,这里以LED灯亮代表工作。

最近捣鼓了一个挺有意思的项目——STM32单片机仿真温湿度采集控制系统,跟大家分享分享其中的乐趣与门道。

系统构成与工具

这个系统基于STM32最小系统电路搭建,配合Proteus进行电路仿真,用Keil来编写代码,最后还有报告和演示视频记录整个过程。

硬件连接与功能实现

数据显示

用液晶显示屏来实时显示采集到的温度和湿度数据。硬件连接上,将STM32与液晶显示屏对应的引脚相连,比如数据引脚、控制引脚等,这样STM32就能把采集到的数据传递给显示屏进行展示。

阈值设置

通过按键可以灵活设置温度和湿度的阈值。在硬件连接中,按键一端接地,另一端连接到STM32的GPIO口。当按键按下,GPIO口电平发生变化,STM32就能检测到这个信号,进而进入设置阈值的程序流程。

报警与控制

当温度达到报警阈值时,散热继电器开始工作,带动发动机转动实现散热。湿度达到阈值时,洒水继电器工作,这里用LED灯亮来模拟。对于继电器和LED灯,一端连接电源,另一端连接到STM32的GPIO口,通过控制GPIO口的电平高低来控制继电器和LED灯的通断。

代码实现(部分关键代码展示)

// 初始化按键的GPIO口 void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 假设按键连接在PA0和PA1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入 GPIO_Init(GPIOA, &GPIO_InitStructure); } // 读取按键状态 u8 KEY_Scan(u8 mode) { static u8 key_up = 1; // 按键松开标志 if (mode) key_up = 1; // 支持连按 if (key_up && (KEY0 == 0 || KEY1 == 0)) { delay_ms(10); // 消抖 key_up = 0; if (KEY0 == 0) return KEY0_PRES; else if (KEY1 == 0) return KEY1_PRES; } else if (KEY0 == 1 && KEY1 == 1) key_up = 1; return 0; // 无按键按下 } // 初始化液晶显示屏的GPIO口 void LCD_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE); // 配置数据端口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); // 配置控制端口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; GPIO_Init(GPIOD, &GPIO_InitStructure); LCD_WriteCom(0x38); // 8位模式,2行显示,5x7字体 delay_ms(5); // 其他初始化指令 } // 主函数 int main(void) { float temperature, humidity; u16 temp_threshold = 30, humi_threshold = 60; // 默认阈值 KEY_Init(); LCD_Init(); while (1) { u8 key_value = KEY_Scan(0); if (key_value == KEY0_PRES) { // 进入设置温度阈值流程 // 代码略 } else if (key_value == KEY1_PRES) { // 进入设置湿度阈值流程 // 代码略 } // 读取温湿度传感器数据(假设这里有一个函数Read_DHT11来读取数据) Read_DHT11(&temperature, &humidity); // 在液晶显示屏上显示温度和湿度 LCD_ShowNum(3, 0, temperature, 4, 16); LCD_ShowNum(3, 6, humidity, 4, 16); if (temperature >= temp_threshold) { GPIO_SetBits(GPIOA, GPIO_Pin_2); // 假设散热继电器连接在PA2 } else { GPIO_ResetBits(GPIOA, GPIO_Pin_2); } if (humidity >= humi_threshold) { GPIO_SetBits(GPIOA, GPIO_Pin_3); // 假设洒水继电器(LED灯)连接在PA3 } else { GPIO_ResetBits(GPIOA, GPIO_Pin_3); } delay_ms(1000); } }

代码分析

KEY_Init函数用于初始化按键的GPIO口,将其设置为上拉输入模式,这样按键按下时GPIO口电平会被拉低,STM32就能检测到按键动作。

KEYScan函数实现了按键的扫描功能,包含消抖处理,并且支持连续按键。keyup变量用于标记按键是否松开,避免一次按下多次触发。

LCD_Init函数负责初始化液晶显示屏的GPIO口,配置数据端口为推挽输出模式,控制端口也进行相应配置,并向液晶显示屏发送初始化指令,使其能够正常工作。

main函数中,首先初始化按键和液晶显示屏。通过KEY_Scan函数检测按键动作,进入相应的阈值设置流程。接着读取温湿度传感器数据,在液晶显示屏上显示,并根据当前温湿度和设定阈值来控制散热继电器和洒水继电器(LED灯)的工作状态,通过不断循环实现系统的持续运行。

这个STM32单片机仿真温湿度采集控制系统,从硬件连接到代码实现,一步步搭建起来,不仅实现了温湿度的采集与显示,还具备灵活的阈值设置和报警控制功能,是一个很有趣且实用的小项目,希望大家喜欢!

http://www.cnnetsun.cn/news/7645.html

相关文章:

  • MediaPipe实时多模态感知:从单点检测到全身协同追踪的技术革命
  • SMDJ33A单向 TVS瞬态抑制二极管 :33V电压000W 浪涌,中压电路防护核心
  • MCP 2025量子编程认证重大升级(新增内容全曝光)
  • Bottles:让Windows软件在Linux上轻松运行的智能解决方案
  • 日志框架问答整理(吊打面试官)
  • 从零到安全工程师:2025年必备技能树详解(附实战学习蓝图)
  • Komikku:免费开源的Android漫画阅读器终极指南
  • 长耗时接口异步改造总结
  • 解码人类智慧密码——贾子五定律(Kucius Five Laws):贾子认知、历史、战略、军事、文明五定律
  • 启点创新智慧景区小程序系统,景区智能化售票系统,景区购票管理系统
  • 3种快速安装readr数据读取工具的方法:从入门到精通
  • 对比实测:传统vs自动化VMware安装,效率提升300%
  • 跨平台字体革命:PingFangSC字体包的终极解决方案
  • 14 类圣诞核心 SVG 交互方案拆解(附案例 + 资源)
  • 7个技巧轻松搞定Node.js版本升级:从16.x到20.x的无痛迁移指南
  • MCP SC-400配置避坑手册(一线专家亲授10大常见错误)
  • Ghost没落、同行消失,深度却靠国产系统翻盘?关键点不止一个!
  • 5分钟掌握PROPKA:蛋白质pKa预测的终极入门指南
  • dotNetFx40_Full_x86_x64:解决Windows开发环境配置难题的终极方案
  • 终极解决方案:如何快速解除Cursor试用限制
  • PMail个人邮件服务器:3步搭建私有邮箱的完整指南
  • 阿里自研Wan2.2-T2V-A14B如何实现720P高清视频生成?
  • 从0到1,普通开发者也能构建自己的AI Agent(附完整流程)
  • Bonree ONE 发布直通车| 如何利用核心链路,快速排查定位系统故障?
  • 数智先锋 | 博睿数据×海尔消费金融:破解高频并发与强监管难题!
  • Spring AOP 和 AspectJ 怎么选?核心区别一看就懂
  • 如何利用Wan2.2-T2V-A14B提升AIGC内容生产效率?
  • Atmosphere-NX系统升级遇阻?模块兼容性深度解析与实战修复方案
  • 3步掌握PLabel:开启高效半自动标注新时代
  • 专业视频对比工具video-compare:从入门到精通的完整指南