工作原理
- 温度测量:内部的负温度系数(NTC)测温元件,其电阻值会随着环境温度的变化而改变。通过测量该电阻值的变化,将环境温度转换成数字信号。
- 湿度测量:基于电阻式感湿元件,其电阻值会随环境湿度的变化而变化。利用信号调理电路将这种电阻值的变化转换成数字信号输出。
内部结构
主要由一个电阻式感湿元件、一个 NTC 测温元件以及一个高性能 8 位单片机组成。每个 DHT11 传感器都在极为精确的湿度校验室中进行校准,校准系数以程序的形式存在 OTP 内存中,在检测信号处理时调用。性能参数
- 测量范围:湿度为 20%~90% RH,温度为 0~50℃。
- 测量精度:湿度精度为 ±5%,温度精度为 ±2℃。
- 分辨率:湿度和温度的分辨率均为 1% 和 1℃。
- 工作电压:工作电压范围为 3.3~5.5V ,在 5V 电源电压下,平均工作电流为 0.5mA 。
- 响应时间:温度响应时间约为 2 秒,湿度响应时间约为 2-5 秒 。
接口及通信
- 引脚:总共只有三个引脚,分别是电源引脚、信号输入输出引脚以及接地引脚1。
- 通信方式:采用单线制串行接口,即单总线通信,通常要求外接一个约 5.1k 欧姆的上拉电阻。
特点及优势
- 性价比高:价格相对较低,且性能稳定可靠。
- 使用方便:数字信号输出,可直接与各种微控制器连接,易于接入各种应用系统。
- 响应快速:能够实时监测环境的温湿度变化。
- 体积小巧:超小的体积使其在各种应用场景中安装方便。
- 低功耗:在 5V 电源电压下,平均工作电流仅为 0.5mA,适用于一些对功耗要求较高的场合。
(二)讲解
其实dht11传感器蛮简单的,包括驱动也是很简单,以后会讲解,我们这次先了解如何应用,并搭配oled可以做一个最简单的温湿度计
接线配置
VCC----3V
GND----GND
D----PB11
调用库
- #include "OLED.h"
- #include "OLED_Data.h"
- #include "dht.h"
我们要初始化两个变量
uint8_t buffer[5];这个是保存DHT11传来的无符号整数数组,里面会储存,温度湿度的高低位和校验位
再创建一个int或者float,用于储存温度和湿度
- uint8_t buffer[5];
- float h, t;
我们需要用到温湿度数据时,只需要调用DHT_ReadData(buffer)函数
数据为0时,为数据正确,数据为1时,为数据出错
数组的0和1位是湿度的高位和低位
数组的2和3位是温度的高位和低位
高位就是整数,低位就是小数位,如果要将整数和小数加一起,小数要除10
- if(DHT_ReadData(buffer) == 0)
- {
- h = buffer[0] + buffer[1] / 10.0;
- t = buffer[2] + buffer[3] / 10.0;
- }
显示到OLED屏幕上
中文我已经帮大家取模好了
显示部分我们可以用OLED_ShowFloatNum函数,用来显示小数
由于精确到1位小数,所以取1位小数限制就可以了
- if(DHT_ReadData(buffer) == 0)
- {
- h = buffer[0] + buffer[1] / 10.0;
- t = buffer[2] + buffer[3] / 10.0;
-
- OLED_ShowFloatNum(80, 10, t, 2, 1,OLED_8X16);
- OLED_ShowFloatNum(80, 40, h, 2,1, OLED_8X16);
- OLED_ShowChinese(40, 10, "温度");
- OLED_ShowChinese(40, 40, "湿度");
-
-
- OLED_Update();
-
- }
(三)程序展示