DHT11是一款温湿度传感器,顾名思义,用于测量特定环境或密闭空间内的大气温湿度。该传感器通常用于监测农业、食品工业、医院、汽车、气象站等许多应用中的环境参数。
该传感器可以测量从 0°C 到 50°C 的温度,精度为 1°C。它通常用于受控环境中,例如热通风系统、恒温室等,以监测温度并采取纠正措施。湿度测量范围为 20% 至 90%,精度为 1%。湿度表示空气中存在的水蒸气量。在许多情况下,例如在制造和储存茶粉时,湿度值必须保持在受控范围内,必须在房间内保持正确的湿度,否则茶会失去味道和气味。客厅的湿度水平也应保持在舒适的范围内。获得最大舒适度的理想湿度值在 50% 到 65% 之间。
今天在本教程中,我们将学习如何将流行的 DHT11 温度和湿度传感器与 STM32 微控制器连接。
DHT11温湿度传感器
在继续界面程序之前,让我们了解一些有关 DHT11 传感器的信息。如前所述, DHT11 传感器用于测量 温度和湿度。 该传感器带有一个专用的内置 NTC来测量温度。它有一个板载 8 位微控制器,可通过单线协议将温度和湿度值作为串行数据输出。意思是,传感器只有一个数据引脚,通过它可以读取温度和湿度值,从而节省了微控制器端的引脚。该传感器还经过工厂校准,因此易于与其他微控制器连接。
DHT11 规格:
工作电压:3.5V 至 5.5V
工作电流:0.3mA(测量)60uA(待机)
输出:串行数据
温度范围:0°C 至 50°C
湿度范围:20% 至 90%
分辨率:温度和湿度均为 16 位
准确度:±1°C 和 ±1%
所需组件
STM32F103C8
DHT11温湿度传感器
16x2 液晶显示器
IIC/I2C 串行接口适配器模块
面包板
连接电线
电路原理图
将 DHT11 与 STM32 微控制器连接的完整电路图如下所示。电路是使用 Fritzing 软件绘制的。
如您所见,我们使用I2C 接口模块将 LCD 模块连接到 STM32。这使连接变得简单,并进一步减少了控制器端使用的引脚数量。但是,如果您没有此模块,您也可以通过以下链接直接连接 LCD STM32 。
如果您有接口模块,那么 I2C 串行接口模块(固定 16X2 LCD 显示器)和 STM32F103C8 之间的电路连接如下表所示:
同样,STM32F103C8 和 DHT11 传感器之间的电路连接如下表所示。
连接完成后,我的硬件如下所示。
整个设置由我笔记本电脑的 STM32 的 USB 端口供电。现在我们的硬件已经准备好了,让我们进入编码部分。
为 STM32F103C8 准备 Arduino IDE
我们必须编写一个程序来从 DHT11 传感器中读取温度和湿度值并将其显示在 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 的软件包时,默认安装了线库。
3. 示例中提供了用于扫描连接的 I2C 设备的程序(在 Arduino IDE 中:Files-》Examples-》Wire-》I2C 扫描仪线)。在此之前,在 Tools-》Board-》Generic STM32F103C8 Series 中选择板,如下所示。
4. 然后将代码上传到 STM32F103C8 和打开的串行监视器。
现在注意 I2C 16x2 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 文件,下载后,使用草图-》导入库在 Arduino IDE 中安装 DHT库。同样的库也可以与 Arduino 板一起使用。
编码说明
本文的完整代码可以在本页底部找到,相同的解释如下。最初包括所需的库。包括用于在 STM32F103C8中使用 I2C 的Wire.h库、用于使用 I2C 类型 LCD 显示器的LiquidCrystal_I2C.h和用于使用 DHT 传感器功能的DHT.h
#include#include #include
现在定义了与STM32F103C8的PA1相连的DHT11(OUT引脚)的引脚名称
#define DHTPIN PA1
而且,DHTTYPE 被定义为 DHT11。
#define DHTTYPE DHT11
接下来初始化 I2C 地址为 0x27 和 16x2 类型 LCD 显示器的LiquidCrystal_I2C类的对象 lcd 。
LiquidCrystal_I2C lcd(0x27, 16, 2);
此外, DHT 类的对象 dht与 STM32 和 DHT 类型为 DHT11 的 DHT 引脚被初始化
DHT dht(DHTPIN, DHTTYPE);
接下来在void setup() 中:
首先使用以下方法初始化 LCD
液晶显示器开始();
然后使用以下语句开始接收来自 DHT11 传感器的温度和湿度值。
dht.begin();
打开黑光灯并打印欢迎信息并在三秒钟后清除它们。
液晶背光(); lcd.setCursor(0,0); lcd.print("电路文摘"); lcd.setCursor(0,1); lcd.print("DHT11 与 STM32"); 延迟(3000); lcd.clear();
接下来在void loop() 中:
从 DHT11 传感器连续接收该值。为了获得温度和湿度的单独值并将其存储在变量中,使用了以下语句。
仅获取湿度值
浮动 h = dht.readHumidity();
仅获取温度值
浮动 t = dht.readTemperature();
最后在 16X2 LCD 显示屏上打印
lcd.setCursor(0,0); lcd.print("温度:"); lcd.print(t); lcd.print("C"); lcd.setCursor(0,1); lcd.print("湿度:"); lcd.print(h); lcd.print("%");
基于STM32的温度计的工作
一旦您的硬件和代码准备就绪,只需将代码写入您的硬件,您应该会注意到您的 LCD 显示欢迎屏幕,然后是实时温度和湿度值,如下所示
如果您的显示器没有显示任何内容,您可以检查调整I2C 模块背面的对比度电位器。我尝试使用空调改变房间温度,发现传感器值也会相应变化。AC 还可以选择测量室温,如下图所示,我的遥控器显示室温为 27°C,我们的传感器还在 LCD 上显示 27.3°C,这非常接近。
#include
#include
库 #include
#define DHTPIN PA1
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x27, 16, 2); //为LiquidCrystal_I2C类初始化对象lcd,I2C地址为0x27和16x2类型的LCD显示
DHT dht(DHTPIN, DHTTYPE); //使用STM32的DHT引脚和DHT类型为DHT11的DHT类初始化对象dht
void setup()
{
// 初始化 LCD
lcd.begin();
dht.begin(); //开始接收温度和湿度值。
液晶背光();// 打开黑灯并打印欢迎信息。
lcd.setCursor(0,0);
lcd.print("电路文摘");
lcd.setCursor(0,1);
lcd.print("DHT11 与 STM32");
延迟(3000);
lcd.clear();
}
无效循环()
{
浮动h = dht.readHumidity();//获取湿度值
float t = dht.readTemperature(); //获取温度值
lcd.setCursor(0,0);
lcd.print("温度:");
lcd.print(t);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("湿度:");
lcd.print(h);
lcd.print("%");
}
全部0条评论
快来发表一下你的评论吧 !