前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DHT11湿度传感器开发「建议收藏」

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

作者头像
全栈程序员站长
发布2022-11-10 13:57:18
4160
发布2022-11-10 13:57:18
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月29日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档