4.2 DHT11 温湿度传感器

DHT11是一款已校准的数字温湿度传感器,广泛应用于暖通空调、汽车等众多领域。它具有单线数据传输、40bit数据格式、超低功耗等特点。在通信过程中,传感器通过特定的时序与单片机交互,包括启动序列和数据读取。该文详细介绍了DHT11的通讯协议及其实现代码,用于检测模块连接和读取数据。
摘要由CSDN通过智能技术生成
  1. 概述

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通 空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制
  • 产品特点

  • 相对湿度和温度测量 全部校准,数字输出 长期稳定性 超长的信号传输距离:20米 超低能耗:休眠 4 引脚安装:可以买封装好的 完全互换 : 直接出结果,不用转化

  1. 接线

  1. 数据传送

1.逻辑

  • 只有一根数据线DATA,单片机发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先 出

2.数据格式

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

时序图

3.通讯过程时序图

4.做通信初始化,并检测模块是否存在时序图

  • 时序逻辑分析 a : dht = 1 b :dht = 0 延时30ms c: dht = 1 之后卡点while(dht);(被模块拉低),说明模块存在!(卡点的方法)

  1. 代码实现- 检测模块是否接在设备上

void DHT11_Start()
{
    dht = 1;
    dht = 0;
    //延时30ms
    Delay30ms();
    dht = 1;
    //卡d点;while(dht1); 卡e点 while(!dht) 卡f点:while(dht)
    while(dht);
    while(!dht);
    while(dht);
}
//检测模块是否接在设备上
#include "reg52.h"
#include "intrins.h"
sbit ledOne = P3 ^ 7;
sbit dht = P3 ^ 3; //模块的data插在p3.3
void Delay30ms() //@11.0592MHz
{
    unsigned char i,
    j;
    i = 54;
    j = 199;
    do {
        while (--j);
    } while (-- i );
}
void Delay60us() //@11.0592MHz
{
    unsigned char i;
    i = 25;
    while (--i);
}
void Delay1000ms() //@11.0592MHz
{
    unsigned char i,
    j,
    k;
    _nop_();
    i = 8;
    j = 1;
    k = 243;
    do {
        do {
            while (--k);
        } while (-- j );
    } while (-- i );
}
void check_DHT() {
    //a : dht = 1
    dht = 1;
    //b :dht = 0
    dht = 0;
    //延时30ms
    Delay30ms();
    //c: dht = 1
    dht = 1;
    //在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!
    while(dht);
    ledOne = 0; //亮灯,说明模块存在
}
void main() {
    ledOne = 1;
    Delay1000ms();
    Delay1000ms();
    check_DHT();
    while (1);
}

a : dht = 1 b :dht = 0 延时30ms c: dht = 1 卡d点;while(dht1); 卡e点 while(!dht) 卡f点:while(dht) 卡g点:while(!dht) 有效数据都是高电 平,持续时间不一样,50us读,低电平0 高电平

  • DHT11传输0的时序分析

  • DHT11传输1的时序分析

5.代码实现-读取数据函数

void Read_Data_From_DHT() {
    int i; //轮
    int j; //每一轮读多少次
    char tmp;
    char flag;
    DHT11_Start();
    for (i = 0; i < 5; i++) {
        //卡g点:while(!dht) 有效数据都是高电平,持续时间不一样,50us读,低电平0 高
        电平
        for (j = 0; j < 8; j++) {
            while (!dht); //等待卡g点
            Delay40us();
            if (dht == 1) {
                flag = 1;
                while (dht);
            } else {
                flag = 0;
            }
            tmp = tmp << 1;
            tmp |= flag;
        }
        datas[i] = tmp;
    }
}

1. 系统概述 本系统主要由FPGA开发板和DHT11湿度传感器组成,通过FPGA开发板的GPIO口与DHT11传感器进行连接,实现环境湿度的检测和显示。其中,FPGA开发板负责控制传感器的采集以及数据的处理和显示,DHT11传感器负责采集环境湿度数据并将数据传输给FPGA开发板。 2. 系统设计 系统设计主要分为硬件设计和软件设计两部分。 2.1 硬件设计 硬件设计主要包括FPGA开发板和DHT11传感器的连接和控制。 2.1.1 FPGA开发板 FPGA开发板主要由一个FPGA芯片、一组GPIO口和一块显示屏组成。其中,FPGA芯片主要负责数据的处理和控制,GPIO口主要用于与DHT11传感器进行连接,显示屏用于显示检测到的环境湿度数据。 2.1.2 DHT11传感器 DHT11传感器主要由一个湿度传感器和一个数据传输芯片组成。其中,湿度传感器负责采集环境湿度数据,数据传输芯片负责将采集到的数据通过单线数字信号传输给FPGA开发板。 2.2 软件设计 软件设计主要包括FPGA开发板程序的编写和数据处理算法的设计。 2.2.1 FPGA开发板程序 FPGA开发板程序主要负责控制GPIO口与DHT11传感器进行连接和数据的读取、处理和显示。具体实现过程为:首先通过GPIO口向DHT11传感器发送启动信号,然后等待DHT11传感器的响应,接着读取DHT11传感器传输的数据,最后将读取到的数据进行处理和显示。 2.2.2 数据处理算法 数据处理算法主要负责将读取到的原始数据进行解析和转换,得到环境湿度的实际值。具体实现过程为:首先将读取到的原始数据进行校验,确保数据的正确性,然后根据DHT11传感器的数据格式将数据进行解析,最后将解析出的数据进行转换,得到环境湿度的实际值。 3. 系统实现 系统实现主要包括硬件的连接和软件的编程实现两部分。 3.1 硬件连接 硬件连接主要包括FPGA开发板和DHT11传感器的连接。具体实现过程为:将DHT11传感器的VCC口连接到FPGA开发板的3.3V电源口,将DHT11传感器的GND口连接到FPGA开发板的GND口,将DHT11传感器的DATA口连接到FPGA开发板的GPIO口。 3.2 软件编程实现 软件编程实现主要包括FPGA开发板程序的编写和数据处理算法的设计。具体实现过程为:首先编写FPGA开发板程序,实现GPIO口与DHT11传感器的连接和数据的读取、处理和显示。然后设计数据处理算法,实现对读取到的原始数据进行解析和转换,得到环境湿度的实际值。 4. 系统测试 系统测试主要包括系统功能测试和性能测试两部分。 4.1 系统功能测试 系统功能测试主要测试系统能否正确地采集环境湿度数据并将数据显示在屏幕上。具体测试过程为:将DHT11传感器放置在不同的环境中,启动系统,观察系统是否能够正确地采集环境湿度数据并将数据显示在屏幕上。 4.2 系统性能测试 系统性能测试主要测试系统的性能指标,包括采样精度、采样速度等。具体测试过程为:通过对不同环境下的湿度数据进行采集和比对,测试系统的采样精度;通过测试系统在不同环境下的采样速度,测试系统的采样速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值