温湿度传感器

罗大富 BigRich大约 3 分钟ESP32Arduino

本节课我们来学习温湿度传感器。

实验原理

无论是工业领域还是我们的日常生活,温度和湿度一直都是两个比较重要的指标,DHT11 和 DHT22 是 DHTxx 系列中使用最广泛的两种传感器。它们有着相同的引脚,用法一致,下图是两者的规格对比:

如果拆下传感器的外壳,其实里面只有一个 NTC 热敏电阻和一个湿度传感元件。

湿度传感部件有两个电极,中间有一个保湿基底(通常是盐或导电塑料聚合物)。随着湿度的升高,基板吸收水蒸气,导致离子的释放和两个电极之间电阻的降低。电阻的变化与湿度成正比,可以测量湿度来估计相对湿度。

DHT11 与 DHT22 还包括用于测量温度的 NTC(热敏电阻)。热敏电阻是一种电阻随温度变化的电阻器。从技术上讲,所有电阻器都是热敏电阻,因为它们的电阻随温度略有变化,但这种变化通常非常小,难以测量。热敏电阻的设计使其电阻随温度而急剧变化(每度 100Ω 或更大),而且电阻随着温度的升高而减小。

DHT11 和 DHT22 传感器的连接都相对简单。它们有四个引脚:

  • VCC:传感器供电引脚,建议使用 5V 电源。使用 5V 电源,传感器可以放置在 20 米外。在 3.3V 电源电压下,传感器可以放置在 1 米外;
  • Data:通过串行数据输出温度和湿度;
  • NC:无连接;
  • GND:接地;

硬件电路设计

物料清单(BOM 表):

材料名称数量
0.96 寸 OLED 屏幕1
DHT11 温湿度传感器1
10K 电阻1
杜邦线(跳线)若干
面包板1

软件程序设计

在敲代码之前,我们还需要了解 DHT11 的通信方式

DHT11 与控制器之间采用单总线数据格式,一次通信时间 4ms 左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。操作流程如下:

一次完整的数据传输为 40bits,高位先出。

数据格式:8bits 湿度整数数据 + 8bits 湿度小数数据 + 8bits 温度整数数据 + 8bits 温度小数数据 + 8bits 校验和

数据传送正确时校验和数据等于 8bits 湿度整数数据 + 8bits 湿度小数数据 + 8bits 温度整数数据 + 8bits 温度小数数据 所得结果的末 8 位。

我们这个实验会直接调用 DHT 第三方库,从而简化我们的代码,代码如下:

#include "DHT.h"

#define DHTPIN 14
#define DHTTYPE DHT11
 
 
// 初始化 DHT 对象
DHT dht(DHTPIN, DHTTYPE);
 
void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));
 
  dht.begin();
}
 
void loop() {
  // 读取湿度
  float humid = dht.readHumidity();
  // 读取温度
  float temp = dht.readTemperature();

  // 显示内容
  Serial.print("湿度: ");
  Serial.print(humid);
  Serial.print("% 温度: ");
  Serial.print(temp);
  Serial.println("°C ");
  delay(2000);
}

最后,我们就可以把从传感器中读取到的数据显示在 OLED 屏幕上,代码如下:


上次编辑于:
贡献者: Luo