一板网电子技术论坛

天南地北客
发表于: 2019-7-14 22:15:04 | 显示全部楼层

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%

DHT11-Sensor-Pinout.jpg

引脚编号
引脚名称
使用说明
1
VCC
3.5V至5.5V
2
DATA
通过串行数据输出温度和湿度
3
GROUND
连接到电路的接地

需要的组件

●    STM32F103C8开发板

●    DHT11温湿度传感器

●    1602 LCD显示屏

●    I2C串行接口适配器模块

●    面包板

●    连接导线


电路原理图

将DHT11与STM32微控制器连接的完整电路图如下所示。使用Fritzing软件绘制电路。

Circuit-Diagram-for-Interfacing-DHT11-Sensor-with-STM32F103C8.png

如您所见,我们使用I2C接口模块将LCD模块连接到STM32。这使得连接简单并进一步减少了控制器侧使用的引脚数量。


连接完成后,硬件如下所示。

Circuit-Hardware-for-Interfacing-DHT11-Sensor-with-STM32F103C8.jpg


整个设置由笔记本电脑的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中选择电路板,如下所示。

Programming-for-DHT11-Sensor-with-STM32F103C8.png

4.然后将代码上传到STM32F103C8和打开的串行监视器。

Interfacing-Output-of-DHT11-Sensor-with-STM32F103C8.png

现在请注意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

  1. #include <Wire.h>      
  2. #include <LiquidCrystal_I2C.h>  
  3. #include <DHT.h>  
复制代码

现在定义了与STM32F103C8的PA1连接的DHT11(OUT引脚)的引脚名称

  1. #define DHTPIN PA1
复制代码

而且,DHTTYPE被定义为DHT11。

  1. #define DHTTYPE DHT11
复制代码

接下来,初始化I2C地址为0x27和1602型LCD显示的LiquidCrystal_I2C类的对象lcd。

  1. LiquidCrystal_I2C lcd(0x27, 16, 2);
复制代码

此外,DHT引脚的对象dht使用带有STM32的DHT引脚和DHT类型作为DHT11进行初始化

  1. DHT dht(DHTPIN, DHTTYPE);   
复制代码

void setup()函数中,首先使用以下方法初始化LCD

  1. lcd.begin();
复制代码

然后使用以下语句开始从DHT11传感器接收温度和湿度值。

  1. dht.begin();         
复制代码

打开背光并打印欢迎信息,并在三秒钟后清除它们。

  1. lcd.backlight();     
  2. lcd.setCursor(0,0);
  3. lcd.print("CIRCUIT DIGEST");
  4. lcd.setCursor(0,1);
  5. lcd.print("DHT11 with STM32");
  6. delay(3000);
  7. lcd.clear();
复制代码

接下来在void loop()函数中,从DHT11传感器连续接收该值。为了获得温度和湿度的单独值并将其存储在变量后面的语句中。

获得湿度值:

  1. float h = dht.readHumidity();      
复制代码

获取温度值

  1. float t = dht.readTemperature();
复制代码

最后在1602 LCD显示屏上打印这些值:

  1.   lcd.setCursor(0,0);
  2.   lcd.print("Temp: ");
  3.   lcd.print(t);
  4.   lcd.print(" C");
  5.   lcd.setCursor(0,1);
  6.   lcd.print("Humid: ");
  7.   lcd.print(h);
  8.   lcd.print(" %");
复制代码

基于STM32的温度计的工作过程

一旦您的硬件和代码准备就绪,只需硬件代码,您应该注意到LCD显示欢迎屏幕,然后显示实时温度和湿度值,如下所示

Interfacing-DHT11-Temperature-&amp;-Humidity-Sensor-with-STM32F103C8.jpg

如果您的显示屏没有显示任何内容,您可以检查调整I2C模块背面的对比度电位计。我尝试使用空调改变室温,发现传感器值也相应变化。 还可以选择测量室温,如下图所示,我的遥控器将室温显示为27°C,我们的传感器也在液晶显示屏上显示27.3°C,非常接近。

Testing-DHT11-Temperature-&amp;-Humidity-Sensor-with-STM32F103C8.jpg


希望您了解该项目并享受制作过程。如果您在使用它时遇到任何问题,请在本帖下面进行回复


代码

本文使用的完整代码如下所示: main.rar (599 Bytes, 下载次数: 1)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 26 | 回复: 43



手机版|

GMT+8, 2019-9-22 17:48 , Processed in 0.156252 second(s), 29 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表