|
DHT11是温度和湿度传感器,顾名思义用于测量特定环境或封闭空间内的大气温度和湿度。该传感器通常用于监测许多应用中的环境参数,如农业、食品工业、医院、汽车、气象站等。
传感器可以测量0°C至50°C的温度,精度为1°C。它通常用于受控环境,如热通风系统、温度室等,以监测温度并采取纠正措施。湿度测量范围为20%至90%,精度为1%。湿度表示空气中存在的水蒸气量。在许多情况下,湿度值必须保持在受控范围内,例如在制造和储存茶粉时,必须在室内保持正确的湿度,否则茶将失去其味道和气味。客厅的湿度也应保持在舒适的范围内。湿度的最佳舒适度的理想值在50%至65%之间。
今天在本篇文章中,我们将学习如何将流行的DHT11温度和湿度传感器与STM32微控制器连接。STM32 BluePill开发板,由ST Microelectronics的STM32F103C8T6微控制器组成。它是一款32位ARM Cortex M3控制器,具有高时钟频率,适用于高速和功率约束应用。
DHT11温湿度传感器 在继续进行编写程序之前,让我们了解一些关于DHT11传感器的知识。如前所述,DHT11传感器用于测量温度和湿度。传感器配有专用的内置NTC来测量温度。它有一个板载8位微控制器,通过单线协议输出温度和湿度值作为串行数据。这意味着,传感器只有一个数据引脚,通过它可以读取温度和湿度值,从而节省了微控制器端的引脚。该传感器还经过工厂校准,因此易于与其他微控制器连接。
DHT11规格参数: ● 工作电压:3.5V至5.5V ● 工作电流:0.3mA(测量)60uA(待机) ● 输出:串行数据 ● 温度范围:0°C至50°C ● 湿度范围:20%至90% ● 分辨率:温度和湿度均为16位 ● 精度:±1°C和±1%
引脚编号 | 引脚名称 | 使用说明 | 1 | VCC | 3.5V至5.5V | 2 | DATA | 通过串行数据输出温度和湿度 | 3 | GROUND | 连接到电路的接地 |
需要的组件 ● STM32F103C8开发板 ● DHT11温湿度传感器 ● 1602 LCD显示屏 ● I2C串行接口适配器模块 ● 面包板 ● 连接导线
电路原理图 将DHT11与STM32微控制器连接的完整电路图如下所示。使用Fritzing软件绘制电路。
如您所见,我们使用I2C接口模块将LCD模块连接到STM32。这使得连接简单并进一步减少了控制器侧使用的引脚数量。
连接完成后,硬件如下所示。
整个设置由笔记本电脑的STM32 USB端口供电。现在我们的硬件已准备就绪,让我们进入代码部分。
为STM32F103C8准备Arduino IDE 我们必须编写一个程序来读取DHT11传感器的温度和湿度值,并将其显示在LCD模块上。这里LCD显示屏通过I2C适配器连接,因此我们首先找到该适配器的I2C地址与LCD通信。
I2C串行LCD接口适配器模块与STM32F103C8的连接: 从电路图中我们可以看到STM32F103C8 I2C引脚PB6和PB7与I2C串行接口模块的SCL和SDA引脚相连。要查找I2C串行接口模块的地址,我们必须扫描可用的地址。
扫描I2C串行接口模块的地址: 按照以下步骤查找LCD I2C接口模块的I2C地址。 1.首先检查安装了Arduino IDE的STM32软件包。 2.通过上面的链接安装使用Arduino IDE编程STM32的软件包时,默认安装了wire库。 3.扫描所连接的I2C器件的程序存在于示例中(在Arduino IDE中:Files->Examples->Wire->I2C scanner wire)。在此之前,请在Tools-> Board-> Generic STM32F103C8 Series中选择电路板,如下所示。
4.然后将代码上传到STM32F103C8和打开的串行监视器。
现在请注意I2C 1602 LCD显示器的I2C地址为(0x27)。
安装用于I2C 16x2显示模块和DHT11传感器的库: 现在我们知道了I2C地址,我们需要下载一个库,通过I2C与LCD显示器进行通信。可以从此链接下载I2C LCD显示库。下载zip文件后,通过sketch-> import library在Arduino IDE中安装I2C LCD库。该库也可以与Arduino板一起用于与I2C LCD显示模块通信。
同样,为了从DHT11传感器读取串行数据,我们将使用DHT11库。使用提供的链接将库下载为ZIP文件,下载后,使用sketch-> import library在Arduino IDE中安装DHT库。同样的库也可以与Arduino板一起使用。
编码说明 本文的完整代码可以在本页底部找到。首先包括所需的库。包括用于在STM32F103C8中使用I2C的Wire.h库,用于使用I2C型LCD显示器的LiquidCrystal_I2C.h和用于使用DHT传感器功能的DHT.h - #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- #include <DHT.h>
复制代码现在定义了与STM32F103C8的PA1连接的DHT11(OUT引脚)的引脚名称 而且,DHTTYPE被定义为DHT11。 接下来,初始化I2C地址为0x27和1602型LCD显示的LiquidCrystal_I2C类的对象lcd。 - LiquidCrystal_I2C lcd(0x27, 16, 2);
复制代码此外,DHT引脚的对象dht使用带有STM32的DHT引脚和DHT类型作为DHT11进行初始化 - DHT dht(DHTPIN, DHTTYPE);
复制代码
在void setup()函数中,首先使用以下方法初始化LCD 然后使用以下语句开始从DHT11传感器接收温度和湿度值。 打开背光并打印欢迎信息,并在三秒钟后清除它们。 - lcd.backlight();
- lcd.setCursor(0,0);
- lcd.print("CIRCUIT DIGEST");
- lcd.setCursor(0,1);
- lcd.print("DHT11 with STM32");
- delay(3000);
- lcd.clear();
复制代码
接下来在void loop()函数中,从DHT11传感器连续接收该值。为了获得温度和湿度的单独值并将其存储在变量后面的语句中。 获得湿度值: - float h = dht.readHumidity();
复制代码获取温度值 - float t = dht.readTemperature();
复制代码最后在1602 LCD显示屏上打印这些值: - lcd.setCursor(0,0);
- lcd.print("Temp: ");
- lcd.print(t);
- lcd.print(" C");
- lcd.setCursor(0,1);
- lcd.print("Humid: ");
- lcd.print(h);
- lcd.print(" %");
复制代码
基于STM32的温度计的工作过程 一旦您的硬件和代码准备就绪,只需硬件代码,您应该注意到LCD显示欢迎屏幕,然后显示实时温度和湿度值,如下所示
如果您的显示屏没有显示任何内容,您可以检查调整I2C模块背面的对比度电位计。我尝试使用空调改变室温,发现传感器值也相应变化。 还可以选择测量室温,如下图所示,我的遥控器将室温显示为27°C,我们的传感器也在液晶显示屏上显示27.3°C,非常接近。
希望您了解该项目并享受制作过程。如果您在使用它时遇到任何问题,请在本帖下面进行回复
代码 本文使用的完整代码如下所示:
main.rar
(599 Bytes, 下载次数: 149)
|