搜索
bottom↓
回复: 41

温湿度传感器DHT11程序+试用情况

[复制链接]

出0入0汤圆

发表于 2010-7-19 21:00:35 | 显示全部楼层 |阅读模式
注册好几天了,都没有审核通过,难道要先发个帖子才行?

最近在做温湿度采集系统方面的东西,别的不说,就说说温湿度传感器这块,测温度想必不用多说了,坛子里的人_大部分都用过18B20,可以精确到0.1度,而要测湿度就没那么容易了,18B20之所以好用,是因为它是数字器件,不需要配合测量电路就可以完成测量任务,而现在市场上的大部分湿度传感器要么是湿敏电阻、半导体湿敏传感器,要么就是电容式的湿度传感器,这些都要和外围电路配合使用。

国产的DHT11温湿度传感器是数字式器件,测量范围:湿度20-90%RH,温度0-50℃,精度:湿度±5%RH,温度±2℃,分辨率:1,可见,对于一般性的应用领域还是可以满足要求的,最主要的是价格才7元左右。

下面是我调通的DHT11代码,用的是Mega8,供大家参考

DHT11.h

#ifndef __DHT11_h__
#define __DHT11_h__


unsigned char get_DHT11_value(void);
//get_DHT11_value()的返回值为0表示出错(DHT11未连接或损坏)
//temperature存储温度,高8位为温度整数部分,低8位保留为0
//humidity存储湿度,高8位为湿度整数部分,低8位保留为0

#endif







DHT11.c

#include "DHT11.h"
#include <iom16v.h>
#include <macros.h>
#include "delay.h"


#define DATA_DIR_OUTPUT                DDRC|=BIT(PC0)
#define DATA_DIR_INPUT                DDRC&=~BIT(PC0)
#define DATA_H                        PORTC|=BIT(PC0)
#define DATA_L                        PORTC&=~BIT(PC0)
#define DATA_IN                        ((PINC & BIT(PC0)) >> PC0)


#define delay_30_ms()                delay_ms(30)
#define delay_30_us()                delay_10us(3)
#define delay_10_us()                delay_10us(1)


unsigned int temperature;
unsigned int humidity;


unsigned char get_DHT11_value(void)
{       
        unsigned int bit;
        unsigned char p=0,time_count;
       
        temperature=0x0000;
        humidity=0x0000;
        bit=0x8000;
       
        DATA_L;
        DATA_DIR_OUTPUT;
        delay_30_ms();
       
        DATA_H;
        DATA_DIR_INPUT;
        delay_30_us();
        delay_30_us();
       
        //无应答信号,退出
        if(DATA_IN!=0)                                  return 0;
       
        //等待电平变高,设置200us超时控制
        time_count=0;
        while(DATA_IN==0)
        {       
                delay_10_us();
                if(++time_count==20)          return 0;
        }
       
        //等待电平变低,设置150us超时控制
        time_count=0;
        while(DATA_IN==1)
        {       
                delay_10_us();
                if(++time_count==15)          return 0;
        }
       
        //数据开始
        while(p!=2)
        {       
                //低电平宽度50us
                //等待电平变高,设置100us超时控制
                time_count=0;
                while(DATA_IN==0)
                {       
                        delay_10_us();
                        if(++time_count==10) return 0;
                }
               
                time_count=0;
                do
                {        
                        delay_10_us();
                        time_count++;
                        if(time_count==10)         return 0;
                }while(DATA_IN==1);
               
                //若高电平超过50us,说明数据位为1,否则为0
                if(time_count>=5)
                {       
                        if(p==0)        humidity|=bit;
                        if(p==1)        temperature|=bit;
                }
               
                bit>>=1;
                //1字节结束
                if(bit==0x0000)
                {       
                        p++;
                        bit=0x8000;
                }
        }
       
        return 1;
}


使用的时候只要修改DHT11.c里面的有关接口DATA的宏定义,以及3个delay函数就可以了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2010-7-19 21:24:04 | 显示全部楼层
总体感觉还不错,价位低、好用,厂商说的温度测量范围是0-60度,我用风枪对着它吹,发现读到的温度达到60度就不动了,湿度被我吹到了1%,但发现,等了近一个小时,湿度才慢慢回到室内的60%

这张图是刚刚这十几分钟采集到的数据,2s采集一次,传感器放在室外,用无线电传送的数据,今天徐州的天气烈日当空而后是小雨绵绵,所以现在的湿度很高。


2010.7.19 21:00 (原文件名:未命名.jpg)

出0入0汤圆

发表于 2010-7-23 16:50:32 | 显示全部楼层
回复【1楼】nilxy
-----------------------------------------------------------------------

你是用什么显示的 ??

出0入0汤圆

 楼主| 发表于 2010-7-25 18:09:24 | 显示全部楼层
回复【2楼】xiaobao9528
-----------------------------------------------------------------------
excel

出0入0汤圆

发表于 2010-8-12 23:06:11 | 显示全部楼层
您好,DHT11的时序要求不是很严格吧??
我用winavrgcc自带的延时函数可以吧??

出0入0汤圆

 楼主| 发表于 2010-9-14 11:29:34 | 显示全部楼层
回复【4楼】junqinghaha
您好,dht11的时序要求不是很严格吧??
我用winavrgcc自带的延时函数可以吧??
-----------------------------------------------------------------------

时序只要在它容许的范围内就没问题,当然就可以用编译器自带的延时函数啦。
代码里面延迟delay_30_ms是任意的,资料上说只要大于18毫秒就行。
我根据DHT11的时序,提取两个最基本的时间单位:30us和10us,这样方便程序移植,我用ICC没自带延时函数,一般就用示波器测量,修改delay里面的参数,达到延时要求的。

出0入0汤圆

发表于 2010-9-29 17:11:57 | 显示全部楼层
太好了我喜欢

出0入0汤圆

发表于 2011-5-30 18:02:10 | 显示全部楼层
学习!!!

出0入0汤圆

发表于 2011-12-2 23:56:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-3 23:57:19 | 显示全部楼层
马克

出0入0汤圆

发表于 2012-1-3 23:58:02 | 显示全部楼层
马克

出0入0汤圆

发表于 2012-1-28 19:35:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-28 21:17:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-29 18:05:20 | 显示全部楼层
支持LZ

出0入0汤圆

发表于 2012-2-10 13:56:30 | 显示全部楼层
不太明白数据证明采集到得,只看见
if(time_count>=5)
{
if(p==0) humidity|=bit;
if(p==1) temperature|=bit;
}
难道采集到的只能是0x8000或者0x0000?

出0入0汤圆

发表于 2012-11-21 12:25:04 | 显示全部楼层
太好了我喜欢

出0入0汤圆

发表于 2012-12-1 20:23:16 | 显示全部楼层
留个记号,以后用

出0入0汤圆

发表于 2012-12-7 21:27:01 | 显示全部楼层
怎样用示波器来检查DHT11是不是检测到啊

出0入0汤圆

发表于 2012-12-7 21:27:17 | 显示全部楼层
怎样用示波器来检查DHT11是不是检测到???

出0入0汤圆

发表于 2012-12-7 21:27:39 | 显示全部楼层
怎样用示波器来检查DHT11是不是检测到信号???

出0入0汤圆

发表于 2012-12-7 21:28:30 | 显示全部楼层
怎样用示波器来检查DHT11是否检测到信号啊

出0入0汤圆

发表于 2013-4-10 09:20:12 来自手机 | 显示全部楼层
学习一下....

出0入0汤圆

发表于 2013-5-21 09:36:05 | 显示全部楼层
正好用到 thx

出0入0汤圆

发表于 2013-5-21 09:39:44 来自手机 | 显示全部楼层
前两天玩了下,发现湿度误差很大,有20-30%。想换个精度高的玩玩。

出0入0汤圆

发表于 2013-5-24 00:27:52 | 显示全部楼层
mark!

出0入0汤圆

发表于 2013-5-24 16:36:09 | 显示全部楼层
我用的时候发现温度正常,但湿度相差比较大,与26楼的情况差不多

出0入0汤圆

发表于 2013-7-29 09:39:45 | 显示全部楼层
求stm32的DHT11程序,Delay怎么调都为0

出0入0汤圆

发表于 2013-7-29 09:51:51 | 显示全部楼层
nilxy 发表于 2010-7-19 21:24
总体感觉还不错,价位低、好用,厂商说的温度测量范围是0-60度,我用风枪对着它吹,发现读到的温度达到60度 ...

温湿度的曲线颜色搞反了吧

出0入0汤圆

发表于 2013-7-29 10:11:29 | 显示全部楼层
guimeng 发表于 2013-7-29 09:39
求stm32的DHT11程序,Delay怎么调都为0

找我的帖子吧,里面有你要的

出0入0汤圆

发表于 2013-7-30 10:26:41 | 显示全部楼层
renpeng009 发表于 2013-7-29 10:11
找我的帖子吧,里面有你要的

我移植了你的程序,但是好像是卡在死循环里面了


                while(!rDHT11);
                while(rDHT11);

出0入0汤圆

发表于 2013-7-30 12:43:29 | 显示全部楼层
guimeng 发表于 2013-7-30 10:26
我移植了你的程序,但是好像是卡在死循环里面了

IO配置是否与我的一致?
外接上拉电阻没?
DHT11用的是几V?
上拉用的是几V?

出0入0汤圆

发表于 2013-8-1 11:49:45 | 显示全部楼层
价格还可以,不能测负温,有点不足。

出50入58汤圆

发表于 2013-11-5 22:41:00 来自手机 | 显示全部楼层
马克,有时间仔细看看

出0入0汤圆

发表于 2014-9-13 07:50:37 | 显示全部楼层
参考一下。。。。。

出0入0汤圆

发表于 2014-9-17 20:19:05 | 显示全部楼层
挺不错的

出0入0汤圆

发表于 2014-9-19 11:48:04 | 显示全部楼层
不错的,收藏了

出0入0汤圆

发表于 2014-9-19 12:58:59 | 显示全部楼层
楼主有没有K型热点偶加单片机做的温度测量,想做一个,还没有头绪

出0入0汤圆

发表于 2014-9-22 16:51:53 | 显示全部楼层
楼主显示曲线的方法能否介绍一下
Excel如何做可以采集数据,画出曲线

出0入0汤圆

发表于 2016-1-11 23:51:55 | 显示全部楼层
支持。。。

出0入0汤圆

发表于 2018-9-11 14:40:21 | 显示全部楼层
DHT11的感湿元件就是湿敏电阻来的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 18:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表