电子说
概述
本教程介绍了低成本的DHT温湿度传感器。这些传感器非常基础且速度慢,但是对于想要进行一些基本数据记录的业余爱好者来说非常有用。 DHT传感器由两部分组成:电容式湿度传感器和热敏电阻。内部还有一个非常基本的芯片,可以进行一些模拟到数字的转换,并发出带有温度和湿度的数字信号。使用任何微控制器都可以轻松读取数字信号。
DHT11与DHT22
我们有两个版本的DHT传感器,它们看起来有点相似,并且具有相同的引脚排列,但是具有不同的特性。规格如下:
DHT11
超低成本
3至5V电源和I/O
转换过程中使用的最大电流为2.5mA(在请求数据时)
适用于20-80%的湿度读数,精度为5%
适用于0-50°C温度读数±2°C精度
采样率不超过1 Hz(每秒一次)
机身尺寸15.5mm x 12mm x 5.5mm
4间距为0.1“的引脚
DHT22
低成本
3至5V电源和I/O
转换期间最大电流消耗为2.5mA(在请求数据时)
适用于0-100%的湿度读数,精度为2-5%
适用于-40至80°C温度读数,精度为±0.5°C
采样率不超过0.5 Hz(每2秒一次)
机身尺寸15.1mm x 25mm x 7.7mm
4个间距为0.1“的引脚
如您所见,DHT22在稍大的范围内精度更高,性能更好。两者都使用单个数字引脚,因此它们“呆滞”,因为您每秒钟查询一次或两次都不会超过一次。
您可以从adafruit商店拿起DHT11和DHT22!
连接到DHTxx传感器
幸运的是,连接这些传感器很简单,它们具有相当长的0.1“间距引脚,因此您可以将它们插入任何面包板,穿孔板或类似。
AM2302(有线DHT22)温湿度传感器
产品ID:393
AM2302是DHT22的有线版本,采用大型塑料主体,是一种基本的低成本数字温度和湿度传感器。。..
$ 15.00
库存
添加到购物车
连接DHT传感器非常容易,它们有四个引脚
VCC -红色导线连接到3.3-5V电源,有时3.3V电源是不够的在这种情况下,请尝试使用5V电源。
数据输出-白色或黄色电线
未连接
接地-黑线
只需忽略引脚3,它就不会使用。您将需要在VCC和数据引脚之间放置一个10 Kohm电阻,以充当数据线上的中等强度上拉电阻。 Arduino内置了可以打开的上拉电阻,但它们非常弱,大约20-50K
DHT22和AM2302通常已经在内部装有一个上拉电阻,但是添加另一个上拉电阻也没有问题!
此图显示了我们如何连接测试草图。将数据连接到引脚2,您可以稍后将其更改为任何引脚。
如果您有AM2302
使用DHTxx传感器
要测试草图,我们将使用Arduino。您可以使用任何可以执行微秒计时的micrcontroller,但由于要对其进行编码有些棘手,因此我们建议验证Arduino的接线和传感器是否正常工作。
您应该使用 Arduino IDE 软件目前正在运行。接下来,需要安装我们的DHT库,可以通过Arduino库管理器完成:
素描→包含库→管理库…
输入“ dht ”,然后在列表中浏览“ Adafruit 的 DHT传感器库”。单击“安装”按钮,或“
div》
重要信息::从DHT库的1.3.0版本开始,您还需要安装 Adafruit_Sensor 库,该库也可在Arduino库管理器:
现在加载示例→DHT→DHTtester 草图
如果您使用的是 DHT11 传感器,请添加注释设置类型的行:
下载:文件
复制代码
//#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT22 // DHT 22 (AM2302)
,并取消注释以下行:
下载:文件
复制代码
#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT11 // DHT 11
此将使数据对于正确的传感器正确显示。上载草图!
您应该看到温度和湿度。呼吸传感器可以看到变化(就像您要雾化窗户一样),这会增加湿度。
您可以在线路上添加任意数量的DHT传感器单个引脚,只需在初始DHT dht2 = DHT(pin, type);对象的声明下方添加新行,例如
dht
,就可以引用新的dht2随时随地。
DHT CircuitPython代码
Adafruit CircuitPython模块安装
要在您的Adafruit CircuitPython板上使用DHT传感器,您需要在您的板上安装Adafruit_CircuitPython_DHT模块。
首先请确保您为该板上运行了最新版本的Adafruit CircuitPython。特别是对于 Gemma M0,Trinket M0和M0基本板,您必须运行CircuitPython 2.1.0或更高版本才能访问必要的Pulseio模块!
下一步,您将需要安装必要的库才能使用硬件-仔细按照以下步骤从Adafruit的CircuitPython库捆绑中查找并安装这些库。我们的简介指南上有一个很棒的页面,介绍如何为快速和非表达板安装库包。
请记住非表达板,例如,您需要从束中手动安装必要的库:
adafruit_dht.mpy
您也可以从其发行页面下载 adafruit_dht.mpy
。在继续之前,请确保您开发板的lib文件夹或根文件系统已复制 adafruit_dht.mpy 模块。
接线
DHT接线非常简单:
最左边的引脚是电源。我们建议使用5V供电(有时3V是不够的)-即使您使用的是3.3V逻辑,也可以这样做
第二个引脚是 data 。从该引脚连接一个10K上拉电阻至3.3V。如果您使用的是DHT11,则是必需的。如果您使用的是DHT22或AM2302,则有时可以将其关闭
跳过第三个引脚
最右边的引脚是接地
对于DATA引脚,您必须选择一个具有PWM支持的引脚(pulseio )-检查电路板的指南,了解哪些引脚可以使用计时器
以下是使用小饰品M0的示例-您可以使用任何CircuitPython开发板,只需检查Data引脚是否为pulseio-
在在此示例中,我们将使用连接到D6引脚的Feather M0和DHT22传感器
Fritzing Source
用法
演示DHT传感器模块的用法,您可以将其连接到开发板的串行REPL并运行读取温度和湿度的Python代码。
下一步连接到开发板的串行REPL,因此您位于CircuitPython的》》》 提示符下。
下一步导入 board 和 adafruit_dht 模块,这些是初始化和访问传感器的必要模块:
下载:文件
复制代码
import board
import adafruit_dht import board
import adafruit_dht
尝试从5V为DHT传感器供电(我们发现有时确实需要更多功率),但仍将10K上拉电阻设为3.3V伏)
现在创建一个 DHT11实例或 DHT22 类,具体取决于您使用的传感器的类型(对于AM2302传感器,请使用DHT22类)。您必须传入连接到信号线的引脚,例如,连接到板引脚D6的DHT22或AM2302传感器将需要以下代码:
下载:文件
复制代码
dht = adafruit_dht.DHT22(board.D6) dht = adafruit_dht.DHT22(board.D6)
请注意,对于DHT11传感器,您可以使用 adafruit_dht.DHT11 代替上面的 adafruit_dht.DHT22 代码。
此时,您一切就绪,准备开始读取温度和湿度!您可以通过读取 temperature 属性来完成此操作,该属性返回以摄氏度为单位的温度:
下载:文件
复制代码
dht.temperature dht.temperature
要读取湿度获取值湿度属性的值,它将返回相对湿度百分数(从0到100%):
下载:文件
复制代码
dht.humidity dht.humidity
在大多数情况下,您总是会在收到请求时返回温度或湿度值,但是有时如果存在电噪声或信号被某种方式中断,则可能看到抛出异常以重试。这些传感器有时很难读取,这是正常的,如果读取失败,您可能需要使代码重试几次。但是,如果您总是遇到错误并且无法读取传感器,请仔细检查接线(如果需要,请不要忘记上拉电阻!)和设备的电源。
示例代码
这是一个完整的示例草图,它也可以管理错误-重试逻辑(有时会发生。
不要忘记将逻辑引脚更改为您正在使用的任何引脚!然后将其保存为main.py在CircuitPython板上
下载:Project Zip 或 dht22 .py | 在Github上查看
复制代码
import time
import adafruit_dht
import board
dht = adafruit_dht.DHT22(board.D2)
while True:
try:
temperature = dht.temperature
humidity = dht.humidity
# Print what we got to the REPL
print(“Temp: {:.1f} *C Humidity: {}%”.format(temperature, humidity))
except RuntimeError as e:
# Reading doesn‘t always work! Just print error and we’ll try again
print(“Reading from DHT failure: ”, e.args)
time.sleep(1)
import time
import adafruit_dht
import board
dht = adafruit_dht.DHT22(board.D2)
while True:
try:
temperature = dht.temperature
humidity = dht.humidity
# Print what we got to the REPL
print(“Temp: {:.1f} *C Humidity: {}%”.format(temperature, humidity))
except RuntimeError as e:
# Reading doesn‘t always work! Just print error and we’ll try again
print(“Reading from DHT failure: ”, e.args)
time.sleep(1)
如果您使用的是DHT11,请更改代码以使用adafruit_dht.DHT11(board.D2)对象。
打开REPL以查看输出!看看它会提高温度和湿度(除非您是White Walker,否则温度会下降)
下载
DHT传感器的Arduino库和示例代码
Adafruit_Sensor库(由上面的DHT库要求)
DHT11数据表(中文,也请参见DHT22数据表!)
DHT22数据表
K&R Smith校准说明
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !