DHT11数字温湿度传感器是一款市面上使用比较多的温度和湿度传感器,本篇文章飘易就利用Arduino来获取DHT11传感器的温度和湿度。
【DHT11产品参数】
湿度测量范围:5%~95%RH(0-50℃温度补偿)
温度测量范围:-20~+60℃
湿度测量精度:±5.0%RH
温度测量精度:±2.0℃
响应时间:<5s
【DHT11产品特点】
全量程标定,单线数字输出
相对湿度和温度一体测量
全量程标定,无需重新标定即可互换使用
超快响应时间
单线制数字接口(最简单的系统集成,超低的价格)
超小尺寸(12X15.5X5.5mm)
高可靠性
优化的长期稳定性
低功耗
【电气特性】
VDD=5V,T =25℃,除非特殊标注
参数 | 条件 | min | typ | max | 单位 |
供电 | DC | 3.3 | 5 | 5.5 | V |
供电电流
| 测量 | 0.5 | 2.5 | mA | |
平均 | 0.2 | 0.5 | mA | ||
待机 | 100 | 150 | uA | ||
采样周期 | 秒 | 1 | 次 |
【应用领域】
暖通空调、测试及检测设备、汽车、数据记录器、消费品、自动控制、气象站、家电、湿度调节器、医疗、除湿器等。
【电路接线图】
【Arduino 编写程序】
先定义引脚,DHT11的数据引脚连接arduino的2号数字口:
#define DHPIN 2
编写函数:
// 获取温湿度 String wenshidu(void) { unsigned int loopCnt; int chr[40] = {0};//创建数字数组,用来存放40个bit unsigned long time; bgn: //设置2号接口模式:输出 pinMode(DHPIN, OUTPUT); // 启动信号 // 输出低电平20ms(>18ms) // 输出高电平40μs digitalWrite(DHPIN, LOW); delay(20); digitalWrite(DHPIN, HIGH); delayMicroseconds(40); digitalWrite(DHPIN, LOW); // 设置2号接口模式:输入 pinMode(DHPIN, INPUT); // 高电平响应信号 loopCnt = 10000; while (digitalRead(DHPIN) != HIGH) { if (loopCnt-- == 0) { // 如果长时间不返回高电平,重头开始 goto bgn; } } // 低电平响应信号 loopCnt = 30000; while (digitalRead(DHPIN) != LOW) { if (loopCnt-- == 0) { // 如果长时间不返回低电平,重头开始 goto bgn; } } // 开始读取bit1-40的数值 for (int i = 0; i < 40; i++) { while (digitalRead(DHPIN) == LOW) {} //当出现高电平时,记下时间“time” time = micros(); while (digitalRead(DHPIN) == HIGH) {} //当出现低电平,记下时间,再减去刚才储存的time //得出的值若大于50μs,则为‘1’,否则为‘0’ //并储存到数组里去 if (micros() - time > 50) { chr[i] = 1; } else { chr[i] = 0; } } //湿度,8位的bit,转换为数值 int humi = chr[0] * 128 + chr[1] * 64 + chr[2] * 32 + chr[3] * 16 + chr[4] * 8 + chr[5] * 4 + chr[6] * 2 + chr[7]; int humix = chr[8] * 128 + chr[9] * 64 + chr[10] * 32 + chr[11] * 16 + chr[12] * 8 + chr[13] * 4 + chr[14] * 2 + chr[15];// 湿度小数 String h = String() + humi + "." + humix; //温度,8位的bit,转换为数值 int temp = chr[16] * 128 + chr[17] * 64 + chr[18] * 32 + chr[19] * 16 + chr[20] * 8 + chr[21] * 4 + chr[22] * 2 + chr[23]; int tempx = chr[24] * 128 + chr[25] * 64 + chr[26] * 32 + chr[27] * 16 + chr[28] * 8 + chr[29] * 4 + chr[30] * 2 + chr[31];// 温度小数 String t = String() + temp + "." + tempx; //校对码,8位的bit,转换为数值 //int tol = chr[32] * 128 + chr[33] * 64 + chr[34] * 32 + chr[35] * 16 + chr[36] * 8 + chr[37] * 4 + chr[38] * 2 + chr[39]; // 返回温度和湿度 return t + "," + h; }
好了,本文到此完结了。