基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统

news2024/11/24 2:14:10

一、引言

本文介绍了一个基于STM32的恒温控制箱检测系统,该系统通过DHT11温湿度传感器采集环境中的温湿度数据,并利用TFT LCD屏幕进行实时显示。通过按键切换页面显示,通过按键切换实现恒温控制箱的恒温控制。为了验证系统的可靠性和稳定性,我们采用了Proteus仿真软件进行了系统仿真。如果觉得我的文章对你有帮助,不妨点赞关注,谢谢!

墨小羽ovo个人主页

系统实现

1.该系统通过DHT11温湿度传感器采集环境中的温湿度数据,并利用TFT LCD屏幕进行实时显示

2 第三个第四个按键实现温度阈值增减的控制,第一个和第二个按键进行LCD屏幕页面切换。

在这里插入图片描述

在这里插入图片描述

3.通过第一个和第二个按键进行PWM调速,实现电机转动速度的调节,进行恒温控制

项目教程资料分享

本项目用到的资料源码已经放到交流群中,需要的可以加群获取。一起学习,互相进步。

在这里插入图片描述

项目实现

二、系统设计

2.1 硬件模块组成

1.STM32F103RCT6单片机

2.DHT11温湿度传感器

3.TFT LCD屏幕和按键组成。

4.L298N电机驱动模块

5.LED灯模块

2.2 软件部分组成

1.KEIL5开发环境

2.Proteus仿真软件

2.3 系统硬件电路

在这里插入图片描述

2.4 软件设计

2.4.1 系统初始化

在这里插入图片描述

2.5 DHT11运行检测函数

在这里插入图片描述

在这里插入图片描述

2.6 按键运行检测函数

在这里插入图片描述

在这里插入图片描述

2.7 pwm调节温度

在这里插入图片描述

在这里插入图片描述

3. 函数实现

3.1 温湿度检测dht11库函数

    #include "dht11.h"
    #include "delay.h"

    //切换数据线模式输入输出PB6
    void DHT11_ChangeMode(__DHT11_MODE mode)
    {
        RCC_APB2PeriphClockCmd(DHT11_CLK, ENABLE);
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Pin = DHT11_PIN;
        
        if(mode == MODE_OUTPUT)
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽输出
        else
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
        
        GPIO_Init(DHT11_PORT, &GPIO_InitStructure);	
        
    }
    __DHT11_DATA dht_data;

    __DHT11_DATA test;

    //读取数据
    //失败返回 0
    //成功返回 1
    u8 DHT11_ReadData(__DHT11_DATA * dht11)
    {
        u8 result = 0;
        u8 count = 0;
        u8 data[5] = {0};
        
        DHT11_ChangeMode(MODE_OUTPUT);//切换输出模式
        DHT11_OUTPUT(1);//开始信号
        DHT11_OUTPUT(0);
        Delay_ms(20);//延时,持续输出低电平18~30ms
        DHT11_OUTPUT(1);
        
        //等待响应
        DHT11_ChangeMode(MODE_INPUT);//切换输入模式
        while(DHT11_ReadPinState() == 1)
        {
            count++;
            Delay_us(1);
            if(count >= 100)	return 0;
        }
        count = 0;
        while(DHT11_ReadPinState() == 0)
        {
            count++;
            Delay_us(1);
            if(count >= 100)	return 0;
        }
        count = 0;	
        for(u8 i=0; i<40; i++)
        {
            while(DHT11_ReadPinState() == 1)
            {
                count++;
                Delay_us(1);
                if(count >= 100)	return 0;
            }
            count = 0;
            while(DHT11_ReadPinState() == 0)
            {
                count++;
                Delay_us(1);
                if(count >= 100)	return 0;
            }
            count = 0;	
            Delay_us(30);
            if(DHT11_ReadPinState() == 1)
            {
                data[i/8] |= (1<<(7-(i%8))); //置一
            }
            else
            {
                data[i/8] &= ~(1<<(7-(i%8)));//清零
            }
        }
        //校验
        if(data[0]+data[1]+data[2]+data[3] == data[4])
        {
            dht11->Hum = data[0];
            dht11->Tem = data[2];
            result = 1;
        }
        else
        {
            result = 0;
        }
        return result;
    }

3.2 系统定时器中断

    //系统定时器中断服务函数
    void SysTick_Handler(void) //1mS
    {
        RunTime++;
        Led_RunTime++;
        DHT11_RunTime++;
        GUI_Time++;
        
    }

3.3 按键检测函数

//按键检测函数		按键松开后才会响应
/*
0 没有按键按下,1 :PA1对应的按键
*/
u8 Get_KeyValue(void)
{
    
    u8 keyvalue = 0;
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==RESET)
    {
        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==RESET)
        {
        }
        keyvalue = 1;
            
    }
    
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==RESET)
    {
        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==RESET)
        {}
        keyvalue = 2;
        flag=1;
    }
    
        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==RESET)
    {
        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==RESET)
        {
        }
        keyvalue = 3;
    }
    
        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)==RESET)
    {
        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)==RESET)
        {}
        keyvalue = 4;
    }
    return keyvalue;
}

四、总结

本博客介绍了基于STM32的恒温控制箱检测系统,通过DHT11传感器采集温湿度数据,TFT LCD屏幕实时显示,并使用按键进行页面切换和温度阈值调整。Proteus仿真验证了系统的可靠性。未来可考虑引入PID控制算法提升控制精度。希望本教程对您有所帮助,
觉得实用不妨点赞关注。在编写博客的过程中,我尽量保持内容的准确性和完整性,但也难免会有疏漏或错误之处。欢迎各位读者指出其中的问题,帮助我不断进步。

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

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

相关文章

低代码表单配置平台替代普通表单配置平台,前端部分重构的设计和思路

前言 最近将公司的旧表单配置平台重构为低代码表单配置平台&#xff0c;这里记录一下这个过程的设计和思路&#xff0c;不涉及具体的代码&#xff1b;另外这篇文章基本只涉及前端部分&#xff0c;也不涉及与后端数据交互部分。 需求 固化的表单配置平台 -> 灵活的表单配置…

python格式文件

python小白考后复习 CSV格式文件ini格式文件我们可以读取所有节点还可以输出一个节点下所有键值对组成的元组获取节点下的键对应的值判断节点是否存在添加节点还可以添加键值还可以删除节点 XML格式文件读取若是文件格式存在的xml若是以字符串形式存在的xml获取子标签还有获取子…

【最长公共前缀 动态规划】2430. 对字母串可执行的最大删除数

如果有不明白的&#xff0c;请加文末QQ群。 本文涉及知识点 最长公共前缀 动态规划 动态规划汇总 LeetCode 2430. 对字母串可执行的最大删除数 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中&#xff0c;你可以&#xff1a; 删除 整个字符串 s &#xff0c;或者 …

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(构造器方法)

序言 前面几篇文章介绍了Spring中几种方式下Bean对象的实例化的过程&#xff0c;那如果之前的几种都不满足&#xff0c;按照Spring中正常Bean的实例化步骤&#xff0c;该如何创建这个Bean对象呢&#xff1f; 测试类 我们先创建几个debug中用到的栗子。 Person 以一个平平无…

pytest-两种不同写法

XUnit 的写法 熟悉 unittest 框架的人都知道&#xff0c;unittest 里面 fixture 的写法是 setUp 和 tearDown&#xff0c;setUp_class 和 tearDown_class&#xff0c;只有这一种写法&#xff0c;而且是固定的写法哈。 Pytest 是兼容 unittest 的&#xff0c;当然也支持这样写…

B : 斐波那契数列第n项Plus

Description 斐波那契数列即 1, 1, 2, 3, 5...&#xff0c;&#xfffd;(&#xfffd;)&#xfffd;(&#xfffd;−1)&#xfffd;(&#xfffd;−2) 。求斐波那契数列第 n 项 Input 每组数据给出 1≤&#xfffd;≤109 。 Output 斐波那契数列第 n 项 对 1097 取模 Sam…

hadoop词频统计

1 Hadoop 安装与伪分布的搭建 2 Hadoop词频统计 此文章基于搭建好hadoop之后做的词频统计实验&#xff0c;以上是链接为搭建hadoop的教程 目录 1 HDFS 文件系统常用命令 2 词频统计实验准备工作 2.1 启动hadoop 关闭防火墙 2.2 查看图形化界面 2.3 文件上传 3 词频统计…

实现点击按钮导出页面pdf

在Vue 3 Vite项目中&#xff0c;你可以使用html2canvas和jspdf库来实现将页面某部分导出为PDF文档的功能。以下是一个简单的实现方式&#xff1a; 1.安装html2canvas和jspdf&#xff1a; pnpm install html2canvas jspdf 2.在Vue组件中使用这些库来实现导出功能&#xff1a;…

ios13多窗口(UIWindowScene)学习笔记

ios13引入了UIWindowScene类、UIWindowSceneDelegate协议以便支持多窗口功能&#xff0c;但其适用于ipad&#xff0c;不适用于iphone&#xff0c;因为iphone不支持多窗口功能。注意&#xff0c;这里说的窗口不是UIWindow&#xff0c;而是UIWindowScene。 ios13前后的app的UI架…

结构体 -------- 函数-------传参

在函数题中 return 只能传一个值 如果函数体&#xff08;struct fs a&#xff0c;struct fs b&#xff09;传来了两个值&#xff0c;怎么才能只输出一个值呢&#xff1f; 同样要定义一个struct fs 类型的变量 result&#xff1b; 这样不仅可以访问到结构体中的变量a&#…

ESP32实现UDP连接——micropython版本

代码&#xff1a; import network import socket import timedef wifiInit(name, port):ap network.WLAN(network.AP_IF) # 创建一个热点ap.config(essidname, authmodenetwork.AUTH_OPEN) # 无需密码ap.active(True) # 激活热点ip ap.ifconfig()[0] # 获取ip地址print(…

短视频矩阵系统:打造品牌影响力的新方式

一、短视频矩阵概念 短视频营销革命&#xff1a;一站式解决策略&#xff01;短视频矩阵系统是一款专为企业营销设计的高效工具&#xff0c;旨在通过整合和优化众多短视频平台资源&#xff0c;为企业呈现一个全面的短视频营销策略。该系统致力于协助企业以迅速且高效的方式制作…

Node.js全栈指南:静态资源服务器

上一章【认识 MIME 和 HTTP】。 我们认识和了解了 MIME 的概念和作用&#xff0c;也简单地学习了通过浏览器控制台查看请求和返回的用法。 通过对不同的 HTML、CSS、JS 文件进行判断&#xff0c;设置不同的 MIME 值&#xff0c;得以让我们的浏览器正正确地接收和显示不同的文…

2095.删除链表的中间节点

给你一个链表的头节点 head 。删除链表的中间节点 &#xff0c;并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…

逻辑这回事(七)---- 器件基础

Xilinx FPGA创建了先进的硅模块(ASMBL)架构,以实现FPGA具有针对不同应用程序领域优化的各种功能组合的平台。通过这一创新,Xilinx提供了更多的设备选择,使客户能够为其特定设计选择具有正确的功能和功能组合的FPGA。ASMBL体系结构通过以下方式突破了传统的设计障碍:消除几…

HarmonyOS Next开发学习手册——选项卡 (Tabs)

当页面信息较多时&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面内容进行分类&#xff0c;提高页面空间利用率。 Tabs 组件可以在一个页面内快速实现视图内容的切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单次获取到的信息…

大家都在跳槽,我需要跳槽吗?

文章目录 1. 前言2. 最初的跳槽想法萌芽3. 跳槽想法的再次萌芽4. 我是否需要跳槽呢?5. 那些跳槽的同学怎么样了&#xff1f;6. 小结 1. 前言 两周前&#xff0c;看到研究生同班同学发的一条朋友圈&#xff0c;内容为”下一站 杭州~”&#xff0c;配图是拍的北京开往杭州的列车…

软件框架(Framework)是什么?

可实例化的、部分完成的软件系统或子系统&#xff0c;它为一组系统或子系统定义了统一的体系结构(architecture)&#xff0c;并提供了构造系统的基本构造块(building blocks)&#xff0c;还为实现具体功能定义了扩展点(extending points)。 框架实现了体系结构级别的复用。 其…

八爪鱼现金流-031,宽带到期记一笔负债

到期了&#xff0c;新弄的网络&#xff0c;记录一下负债包。 八爪鱼现金流 八爪鱼

昇思25天学习打卡营第4天|函数式自动微分

学习目标&#xff1a; 重温高数知识&#xff0c;回顾导数、微分、偏导数‘全微分、方向导数、梯度&#xff1b;斜率、切线、切平面&#xff0c;法相平面、法线的知识’ 函数微分与导数的含义 多元函数偏导数、全微分 函数式自动微分应用实践 昇思大模型 &#xff0c;mindspor…