当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。DHT11数字温湿度传感器是一款含有已校准数字信号输出的

DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。

DHT11温湿度传感器电气特性

 

温湿度传感器DHT11封装形式及接口说明

建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻(若购买的是已集成的模块,模块上已加上拉电阻,以下请忽略),当然,如果你想要精简电路的话, STC增强型单片机自带的推挽输出功能不失为一个选择,其相当于外接了一个2k的上拉电阻,但在设计电路时需注意:整个单片机的电流推荐不超过55mA,即从MCU-VCC流入的电流不超过55mA,从MCU-GND流出的电流不超过55mA,整体流入、流出电流均不超过55mA,封装尺寸及典型应用电路图如下图所示。

 

DHT11温湿度传感器典型应用电路

 

DHT11温湿度传感器时序图

 

DHT11温湿度传感器连接图

 

如图所示,将DHT11的正极与5V电源接口相连,负极与GND相连,中间的数据接口与2号引脚相连。

代码

#include 《dht11.h》

dht11 DHT11;

#define DHT11PIN 2

void setup(){

Serial.begin(9600);

}

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);

delay(2000);

注意事项

1、代码中引用了#include 《dht11.h》,这个是操作DHT11的库文件,有了它,就可以轻松操作我们这个温湿度传感器了。但是引用这个库文件的操作步骤是:

(1)在网上找到并下载该库文件,包括一个头文件和一个.cpp文件。

(2)在arduinoIDE中点击菜单:程序–导入库–add library,然后选择你存放库文件的那个文件夹。

(3)在代码中引用#include 《dht11.h》,这样就可以使用了。

2、#define DHT11PIN 2,表示定义引脚2的名字为DHT11PIN ,注意这个定义语句后面没有分号。

原理分析

在硬件编程过程中,当你拿到一个器件,首先要了解他的引脚定义,这会告诉你这个东西应该怎么连接,在一个就是要看他的时序图,看了时序图你就知道主从设备之间进行数据采集过程中的代码应该怎么写,比如怎么启动,如何握手,怎么采集真正的数据等等。

在我们这个试验中,DHT11的时序图是这样的:

 

DHT11温湿度传感器使用注意事项

DHT11的供电电压为3-5.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。

微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。

操作流程如下:

一次完整的数据传输为40bit,高位先出。

数据格式:8bit湿度整数数据+8bit湿度小数数据

+8bi温度整数数据+8bit温度小数数据+8bit校验和

数据传送正确时校验和数据等于8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据所得结果的末8位。

用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。

从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。[!--empirenews.page--]

通讯过程

 

总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。

 

总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示。如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。

数字0信号表示方法

 

数字1信号表示方法

 

程序:

//DHT11temperature

//chriz_w@163.com

//arduinonano

//arduinolite

#include“arduino_lit.h”

#defineDHT11Pin2

//TesttheDHT11--chriz_w@163.com

bytedat[5];//存放湿度2byte,温度2byte,checksum1byte

bytereadData(){//每次读取8bits(onebyte)

bytedata;

for(inTI=0;i《8;i++){

if(digitalRead(DHT11Pin)==LOW)

{

//一开始要LOW才表示要传过来

while(digitalRead(DHT11Pin)==LOW);//等待50us;

//现在已经变成HIGH了

_delay_us(30);//判断高电平持续时间,以判定资料是‘0’还是‘1’;

if(digitalRead(DHT11Pin)==HIGH)//根据时序持续了30us以上就是1

data|=(1《《(7-i));//高位在前,低位元在后;

//如果这时已经是LOW,表示这bit是0,不必塞入data

//。。而且以下的while也会立即结束(因为LOW),准备接收下一个bit

while(digitalRead(DHT11Pin)==HIGH);//等待下一bit的接收;

//这时一定已经变成LOW了

}

}

returndata;//收完8bit=onebyte=onechar

}

voidstart_dht11(){//每次要与DHT11沟通

DIGITAL_WRITE(DHT11Pin,LOW);//拉低到LOW,发表示要开始沟通的信号;

_delay_ms(30);//延时要大于18ms,以便DHT11能检测到开始信号;这里用30ms

DIGITAL_WRITE(DHT11Pin,HIGH);//拉高HIGH,让DHT11拉低到LOW告诉我们要传送

_delay_us(40);//给40us等待DHT11响应;

PIN_MODE(DHT11Pin,INPUT);//改为输入mode准备digitalRead()

while(DIGITAL_READ(DHT11Pin)==HIGH);//必须等到LOW

_delay_us(80);//DHT11发出响应,会拉低80us;所以至少等80us

while(DIGITAL_READ(DHT11Pin)==LOW);//继续等到变HIGH

_delay_us(80);//DHT11会拉高到HIGH80us后开始发送资料;

///以下连续读入5bytes(40bits),最后的byte是checksum校验值

for(inTI=0;i《5;i++)

dat[i]=readData();//接收温湿度资料,校验;

PIN_MODE(DHT11Pin,OUTPUT);//改为Outputmode,准备拉高HIGH

DIGITAL_WRITE(DHT11Pin,HIGH);//发送完一次资料后释放bus,等待下一次开始信号;

}

voidsetup(){

SERIAL_BEGIN();

PIN_MODE(DHT11Pin,OUTPUT);

}

voidloop(){

start_dht11();//读取湿度温度和检核位到dat[];其中dat[4]是checkSum

//根据datasheet规定,dat[4]要==(dat[0]+dat[1]+dat[2]+dat[3])%256

//否则表示沟通有错误!!

PRINT(“currenthumidity=”);

println(dat[0]&0xff,10,serial_puts);

PRINT(“currenttemperature=”);

println(dat[2]&0xff,10,serial_puts);//显示温度的整数部分;

_delay_ms(2000);

}

intmain()

{

setup();

while(1)

loop();

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

中国 上海,2025年9月11日——全球领先的智能传感和发射器解决方案供应商艾迈斯欧司朗(SIX:AMS)今日宣布,在第26届中国国际光电博览会(CIOE 2025)上发布了其最新的直接飞行时间(dToF)传感器TMF8...

关键字: 传感器 无人机 机器人

德国康佳特亮相上海工博会,展示多款应用就绪的嵌入式解决方案平台

关键字: 嵌入式 传感器 处理器

2025年上半年,中国电子行业在 AI 与智能制造双轮驱动下活力迸发,规模以上电子信息制造业增加值同比增长11.1%,出口、AI 终端创新与国产软硬件生态均呈向好态势。作为感知层核心的传感器,正成为技术变革与产业跃迁的关...

关键字: AI 智能制造 传感器

中国 上海,2025年9月10日——全球领先的光学解决方案供应商艾迈斯欧司朗(SIX:AMS)今日亮相第二十六届中国国际光电博览会(CIOE 2025),发布其最新的直接飞行时间(dToF)传感器TMF8829。同时,艾...

关键字: 传感器 3D扫描仪 消费电子

随着汽车电子设备日益复杂,车企对体积紧凑、高能效、可靠的解决方案的需求不断增长,多输出功率开关在集成度、成本效益、故障诊断和能效方面优势愈发明显。现代汽车工业越来越依赖众多的低功率电子模块,例如,传感器、LED和继电器。...

关键字: 功率开关 电源管理 传感器

2025年9月4日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 宣布与电子元器件制造商、连接器领域创新企业Molex合作推出全新互动电子书《The El...

关键字: 机器人 连接器 传感器

面对市场对更智能产品、更短设计周期以及更高效灵活生产流程的需求日益增长,设计与制造企业纷纷借助人工智能,推动业务流程迈向新高度。凭借处理复杂数据的卓越能力与传递智能洞见的便捷性,人工智能已准备好在工业价值链的各个环节承担...

关键字: 人工智能 工业物联网 传感器

传感器模块能实现便捷无接触的后备箱或侧滑门开启,适配各种车辆架构 该24 GHz雷达传感器可集成于保险杠或底盘上,并通过特定的手势或脚部动作触发响应 已为多家欧洲主流车企启动量产交付 德国布尔2025...

关键字: 传感器 BSP 触发 保险杠

提升工业系统智能化的方法有多种,其中包括将边缘和云端人工智能(AI)技术应用于配备模拟和数字器件的传感器。鉴于AI技术方法的多样性,传感器设计人员需要考虑多个相互冲突的要求,包括决策延迟、网络使用、功耗/电池寿命以及适合...

关键字: 人工智能 传感器 AI

不久前,作为行业领先的传感器和电源解决方案的领导者之一——Allegro携手合作伙伴成功举办《Allegro高速电机位置检测解决方案,赋能未来智能驱动》线上技术研讨会。基于在磁传感领域的技术积淀与持续创新,Allegro...

关键字: 传感器 汽车电子
关闭