亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino

组件与物料清单

组件数量备注
DHT11 温湿度传感器(4 引脚)1
Raspberry Pi 2 Model B1
Arduino UNO1
公对公杜邦线3
面包板(通用)1
4.7kΩ 电阻1上拉电阻
Cobbler 扩展板套件1用于 Raspberry Pi GPIO 引出

应用与在线服务

项目简介

背景

DHT11 是一款 4 引脚(一脚空置)温湿度传感器,测量范围:相对湿度 20%-90%,温度 0-50°C。工作电压 3-5.5V DC,采用专有 OneWire 协议通信,要求极精确的时序。数据线上通过高电平持续时间编码 0/1,单次读取最长 23.4 ms,包含 18 ms 启动延迟和最多 5.4 ms 数据窗口,单个信号脉宽 20-80 μs。

Windows 10 IoT Core 发布初期,我拿 Raspberry Pi 2 和 DHT11 尝试 C# 读取,发现速度不够快(至少当时不行)。在微软论坛发帖后,发现微软曾回复 OneWire 协议在 Windows 10 IoT Core 上的支持情况。随后看到微软发布了使用 C++ 在 Windows 10 IoT Core 上通过 DHT11 实现 OneWire 协议的示例,我决定将其移植为 C# 库,以便更多人使用这款流行传感器。

库

该库是对微软原始示例代码的简单重构,核心读取逻辑归功于微软。

库提供 Sensors.Dht 命名空间下的 Dht11 类。C# 中创建对象很简单:

using Sensors.Dht;
GpioPin pin = GpioController.GetDefault().OpenPin(4, GpioSharingMode.Exclusive);
Dht11 dht11 = new Dht11(_pin, GpioPinDriveMode.Input);

通过 GetReadingAsync 方法获取读数:

DhtReading reading = await dht11.GetReadingAsync().AsTask();

重载方法可指定最大重试次数(默认 20),即放弃前尝试读取传感器的次数。

DhtReading 结构定义如下:

public value struct DhtReading {
    bool TimedOut;
    bool IsValid;
    double Temperature;
    double Humidity;
    int RetryCount;
};

观察

即使在 C++ 下传感器也无法每次都成功读取,因此需要重试机制(这也是微软示例的一部分)。我对比了 Raspberry Pi 2 (Raspbian) 和 Arduino Uno 上的表现,相关代码已放入 GitHub 仓库。项目附带的视频演示并对比了各平台输出。

入门指南

Raspberry Pi 2 电路组装

请参考页面底部原理图(线色仅为方便辨识):

Arduino 电路组装

参考页面底部原理图:

DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino

Raspberry Pi 应用启动

选择 Debug、ARM 配置、Remote Machine。右键项目 → Properties → Debug 标签,在 Remote machine 填入 Raspberry Pi 2 IP 地址,取消勾选 Use authentication。按 F5 部署(首次可能需几分钟)。

Arduino 应用启动

GitHub 仓库中有名为 Dht11_Speed 的草图。打开 Arduino IDE,加载草图,上传(Ctrl+U),打开串口监视器(Ctrl+Shift+M)。视频演示了详细步骤。

Raspbian 应用启动

GitHub 中有 Dht11.c 源码。需拷贝到 Raspberry Pi 并在那里编译。推荐用 WinSCP 传文件。编译前需安装 wiringPi。编译命令:

gcc -o Dht11_Speed Dht11_Speed.c -L/usr/local/lib -lwiringPi -std=c99 -lm

运行命令:

sudo ./Dht11_Speed 1000 10

其中 1000 为延迟 1000 ms(1 秒),10 为采样次数。视频演示了拷贝、编译全过程。Raspbian 安装见 树莓派官网。

视频演示

下方视频演示了应用运行情况,建议在 YouTube 使用影院模式观看以获得最佳画质。

代码

Visual Studio 2015 C#/C++ 源码

https://github.com/porrey/dht.git

原理图

Dht11_RPi2.fzz
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino Dht11_Arduino.fzz
DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino DHT11 与 DHT22 温湿度传感器套件 —— 适用于 Raspberry Pi 与 Arduino

制造工艺

  1. 树莓派+$5 I²C传感器打造温度记录仪
  2. 树莓派配合 TMP006 红外温度传感器:Python 库与安装指南
  3. 树莓派与 Python 构建远程温度传感器:分步实战指南
  4. 树莓派 GPIO 直连 DS1820 单总线温度传感器指南
  5. 树莓派接入 DS18B20 单总线数字温度计:分步实战指南
  6. 树莓派多传感器温度光照监测系统:DS18B20 实战构建
  7. 树莓派 + MCP9808 + InfluxDB + Grafana:家庭温度监测系统
  8. 树莓派 3 接 DHT11 传感器上传数据到 ThingsIo.ai 云平台
  9. 面向色敏工艺的精准红外温度传感
  10. 高精度轴承温度传感器:原理、安装与SKF PT100选型指南
  11. DS18B20温度传感器:精准1-Wire数字温度计,工业与消费级首选
  12. DHT11传感器:工作原理与关键应用