DHT11湿度传感器开发「建议收藏」

DHT11湿度传感器开发「建议收藏」本文对在CC2540上开发DHT11湿度传感器进行裸机开发,并显示与LED屏上,如下图所示看了无数的datasheet,终于看到中文的了,感觉一下轻松很多,虽然这颗传感器科技含量也不是特别高,但精神还是为之一振,希望我朝设计出更高端的电子元器件。湿敏元件是最简单的湿度传感器。湿敏元件主要有电阻式、电容式两大类。湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

本文对在CC2540上开发DHT11湿度传感器进行裸机开发, 并显示与LED屏上,如下图所示

DHT11湿度传感器开发「建议收藏」

看了无数的datasheet, 终于看到中文的了,感觉一下轻松很多,虽然这颗传感器科技含量也不是特别高,但精神还是为之一振,希望我朝设计出更高端的电子元器件。

湿敏元件是最简单的湿度传感器。湿敏元件主要有电阻式、电容式两大类。

湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中的水蒸气吸附在感湿膜上时,元件的电阻率和电阻值都发生变化,利用这一特性即可测量湿度。

湿敏电容一般是用高分子薄膜电容制成的,常用的高分子材料有聚苯乙烯、聚酰亚胺、酪酸醋酸纤维等。当环境湿度发生改变时,湿敏电容的介电常数发生变化,使其电容量也发生变化,其电容变化量与相对湿度成正比。电子式湿敏传感器的准确度可达2-3%RH,这比干湿球测湿精度高。

湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元件要长期暴露在待测环境中,很容易被污染而影响其测量精度及长期稳定性。这方面没有干湿球测湿方法好。

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

DHT11湿度传感器开发「建议收藏」

DHT11只有三根线,第二脚为数据脚,输出串行异步数据,格式如下所示

DHT11湿度传感器开发「建议收藏」

数据是异步串行的,对时钟要求就高了写,需要开发者知道系统的时钟,识别出数据0,或者数据1,在调试中我一度想使用CC2540提供的中断功能,可怎么也抓不到数据,不一会恍然大悟,数据是异步串行的,只要CC2540发出了开始信号,DHT11就开始发数据了,所以单步调试根本就抓不到数据。

下面为代码

#include<ioCC2540.h>
#include<stdio.h>

#include “dht11.h”

#define READ_PIN P1_0
#define CHECK_BIT 20

void delayMS(unsigned char ms)
{

  unsigned int count1;
  unsigned char msCount;
  
  for(msCount = 0; msCount<ms; msCount++)
    for(count1 =0;count1<3200;count1++)
        ;
  return;
}

void delayUS(unsigned char us)
{

  unsigned int count1;
  unsigned char usCount;
  
  for(usCount = 0; usCount<us; usCount++)
    for(count1 =0;count1<3;count1++)
        ;
  return;
}

unsigned char dht11HumidityRead(unsigned char *pHumidity, unsigned char *pTemperature)
{

  unsigned char dataIndex;
  unsigned char dataVal[5]={0};
  unsigned int dataTime;
  
  P1DIR |= 0X01;/*output mode*/
  READ_PIN = 0;
  delayMS(40);
  READ_PIN = 1;
  delayUS(2);
  P1DIR &= 0Xfe;/*read mode*/
  
  while(0==READ_PIN );
  while(1==READ_PIN );
  
  for(dataIndex=0; dataIndex<40; dataIndex++)
  {

    dataTime = 0; 
    while(0==READ_PIN );
    while(1==READ_PIN)
      dataTime++;
    if(dataTime>CHECK_BIT)
      dataVal[dataIndex/8] |= (0x80>>(dataIndex%8));
    else
      dataVal[dataIndex/8] &= (~(0x80>>(dataIndex%8)));
     
  }
  
  *pHumidity = dataVal[0];
  *pTemperature = dataVal[2];
  return 1;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187956.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号