查看: 241536|回复: 198

Arduino教程——DHT11数字温湿度传感器

  [复制链接]

该用户从未签到

发表于 2012-8-4 10:27 | 显示全部楼层 |阅读模式
本帖最后由 海神 于 2012-9-5 10:50 编辑

DHT11数字传感器概述:DHT11 数字温湿度 传感器是一款含有已校准数字信 号输出的温湿度复合传感器 。 它应用专用的数字模块采集技术和温湿度传感技术 ,确保产品具有极 高的可靠性与卓越的长期稳定性。传感器包括一个电 阻 式 感 湿元件和一 个 NTC 测温元件,并与一个 高性能 8 位单片机相 连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在 OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。 单 线制串行接口,使系统 集成变得简易快捷。超小的体积、极低的功耗, 信号传输距离可达 20 米以上, 使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品 为 4 针单排引脚封装。 连接方便, 特殊封装形式可根据用户需求而提供。DHT11温湿度传感器常应用于暖通空调、汽车 、 消费品 、 湿度调节器 、 除湿器、医疗、自动控制等领域。
DHT11采用单总线方式与cpu进行数据传输,与DS18B20相似,对时序的要求比较高,不同之处在于写程序的时候数据的采集必须间隔1s以上,不然采集会失败。此篇将利用arduino驱动DHT11,检测环境温湿度情况。
详细参考DHT11技术手册: DHT11.pdf (677.52 KB, 下载次数: 15193)
例程:DHT11测环境温湿度
下载库文件,解压在arduino的IDE下libraries文件下 Dht11.zip (3.03 KB, 下载次数: 26019)
打开IDE,载入代码
[mw_shl_code=c,true]double Fahrenheit(double celsius)
{
        return 1.8 * celsius + 32;
}    //摄氏温度度转化为华氏温度

double Kelvin(double celsius)
{
        return celsius + 273.15;
}     //摄氏温度转化为开氏温度

// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
        double A0= 373.15/(273.15 + celsius);
        double SUM = -7.90298 * (A0-1);
        SUM += 5.02808 * log10(A0);
        SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
        SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
        SUM += log10(1013.246);
        double VP = pow(10, SUM-3) * humidity;
        double T = log(VP/0.61078);   // temp var
        return (241.88 * T) / (17.558-T);
}

// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
        double a = 17.271;
        double b = 237.7;
        double temp = (a * celsius) / (b + celsius) + log(humidity/100);
        double Td = (b * temp) / (a - temp);
        return Td;
}

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 2

void setup()
{
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case DHTLIB_OK:
                Serial.println("OK");
                break;
    case DHTLIB_ERROR_CHECKSUM:
                Serial.println("Checksum error");
                break;
    case DHTLIB_ERROR_TIMEOUT:
                Serial.println("Time out error");
                break;
    default:
                Serial.println("Unknown error");
                break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT11.temperature, 2);

  Serial.print("Temperature (oF): ");
  Serial.println(Fahrenheit(DHT11.temperature), 2);

  Serial.print("Temperature (K): ");
  Serial.println(Kelvin(DHT11.temperature), 2);

  Serial.print("Dew Point (oC): ");
  Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

  Serial.print("Dew PointFast (oC): ");
  Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

  delay(2000);
}[/mw_shl_code]
打开串口,显示效果:
2.png



该用户从未签到

发表于 2013-2-27 16:26 | 显示全部楼层
载入下载的例子,总是显示TIME OUT ERROR,怎么回事?

该用户从未签到

发表于 2014-8-18 21:49 | 显示全部楼层
我把库文件加进去了 为什么总显示这个错误呀 楼主~~求回复

点评

666  发表于 2015-11-25 20:35
ytx
怎么加库文件  发表于 2015-8-22 13:30

该用户从未签到

发表于 2016-4-10 16:02 | 显示全部楼层
为什么拷完dht11.h文件还是显示一下错误
E:\Arduino\WET_AND_TEMPERATURE\Dht11\examples\dht11\dht11.ino:37:19: fatal error: dht11.h: No such file or directory

该用户从未签到

 楼主| 发表于 2012-9-12 13:55 | 显示全部楼层
本帖最后由 海神 于 2012-9-13 09:35 编辑
鹰隼 发表于 2012-9-12 12:05
版主可以讲一下dewpoint那个函数吗?那个连接没有看明白。直接发给我就可以, ...

dewpoint()就是测试露点温度,也就是说在这温湿度条件下空气饱和形成露珠,温度湿度按一定的规则换算成露点,具体规则你可以百度看看~··

该用户从未签到

发表于 2015-11-26 13:43 | 显示全部楼层
Randy 发表于 2012-9-12 17:00
DHT11国产的假货非常多,顶海神的教程!

直接跟厂家联系就可以了,我们奥松电子生产的

该用户从未签到

发表于 2012-8-9 10:32 | 显示全部楼层
DHT11 数字温湿度 传感器用的非常多,跟上位机可以完美搭配!支持一下

该用户从未签到

发表于 2012-9-5 13:49 | 显示全部楼层
支持一下

点评

http://www.wanjuanba.com/25/25331/ 永夜君王  发表于 2014-4-26 15:48

该用户从未签到

发表于 2012-9-7 12:30 | 显示全部楼层
终于找到库了。。。。。。收了~~~谢了海参

该用户从未签到

发表于 2012-9-12 12:05 | 显示全部楼层
版主可以讲一下dewpoint那个函数吗?那个连接没有看明白。直接发给我就可以,haidejimo@163.com

该用户从未签到

发表于 2012-9-12 17:00 | 显示全部楼层
DHT11国产的假货非常多,顶海神的教程!

该用户从未签到

发表于 2012-11-16 02:52 | 显示全部楼层
DHL11和SHL11有什么区别?

该用户从未签到

发表于 2012-11-21 17:36 | 显示全部楼层
请问一下,如果要测最高达150度的温度。能推荐一款温度传感器吗?

该用户从未签到

发表于 2012-11-22 23:52 | 显示全部楼层
教程太好了,谢谢分享。。。

用一块存货的串口LCD1602,组装成了一个方便的温湿度计。

电子积木 串行液晶显示屏 字符型 1602 LCD | FlamingoEDA
http://www.flamingoeda.com/2009/ ... %E5%9E%8B-1602-lcd/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

atmega32u4芯片的主控最多有多少引脚?
atmega32u4芯片的主控最多
想自己diy一个键盘,涉及到的引脚比较多,淘宝找了下没找到相应的主控 需要atmega32u4
Arduino与S7-200 PLC 进行Modbus通信测试
Arduino与S7-200 PLC 进行
Modbus是一种串行通信协议,Modbus已经成为工业领域通信协议的业界标准,并且现在是工
Arduino Nano V3.0无法烧录问题
Arduino Nano V3.0无法烧
在t宝上买的那种改了“USB转TLL”芯片的nano板,上手后无法烧录程序,L灯闪烁(我的UN
请教一个有关NodeMCU和舵机的问题
请教一个有关NodeMCU和舵
[*]问题现象 我尝试使用网页控制NodeMCU引脚的方式来控制舵机。但是在程序烧进去
arduino pid麦克纳姆轮小车程序详解
arduino pid麦克纳姆轮小
之前发过几个帖子,大家可以参考,但经过多次尝试,整套系统升级了,优化了很多地方目录:
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表