arduino学习笔记八 温湿度计
时间:2023-08-14 05:07:00
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术
温湿度传感技术保证了产品的高可靠性和优异的长期稳定性。传感器包括电阻感湿元件和电阻感湿元件NTC 测
高性能8温度元件 单片机连接。因此,该产品质量优良,响应超快,抗干扰能力强,性价比高
点。每个DHT11 传感器在极其精确的湿度校验室中校准。校准系数以程序的形式存储在中OTP 内存,传感器
这些校准系数应在检测信号处理过程中调用。单线串行接口使系统集成简单快捷。体积超小,极低
功耗,信号传输距离可达20 米以上,使其成为各种应用甚至最苛刻的应用场合的最佳选择。
DHT11 数字温湿度传感器模块3 针PH2.0 包装。连接方便。
性能描述
1. 供电电压:3-5.5V
2. 电流:最大2.5Ma
3. 温度范围:0-50℃ 误差±2℃
4. 湿度范围:20-90%RH 误差±5%RH
5. 响应时间: 1/e(63%) 6-30s
6. 分别测量分辨率 8bit(温度)、8bit(湿度)
7. 采样周期间隔不得小于1 秒钟
8. 模块尺寸:30x20mm
传感器时序
DATA 用于微处理器和 DHT11之间的通信和同步采用单总线数据格式,一次通信时间4ms数据分为小数部分和
整数部分,具体格式如下所示,当前小数部分用于未来扩展,现读为零.操作流程如下:
完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度数据 8bit湿度小数据
8bi温度整数据 8bit温度小数据
8bit校验和
当数据传输正确时,验证和数据等于8bit湿度数据 8bit湿度小数据 8bi温度整数据 8bit温度小数据结果最后8位。
用户MCU发送开始信号后,DHT从低功耗模式到高速模式,等待主机开始信号结束,DHT11发送响应信号,
送出40bit用户可以选择阅读部分数据并触发信号采集.从模式下,DHT如果没有接收到主机发送的开始信号,11接收到开始信号触发温湿度采集,DHT11不会主动采集温湿度.采集数据后,转换为低速模式。
模块的使用
将 DHT11 模块接到Arduino 传感器扩展板模拟口0
代码如下:
#define DHT11_PIN 0 // ADC0 接到模拟口0
byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i ){
while(!(PINC & _BV(DHT11_PIN))); // wait for 50us
delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN))
result |=(1<
while((PINC & _BV(DHT11_PIN))); // wait '1' finish
}
return result;
}
void setup()
{
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
Serial.begin(19200);
Serial.println("Ready");
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;
// start condition
// 1. pull-down i/o pin from 18ms
PORTC &= ~_BV(DHT11_PIN);
delay(18);
PORTC |= _BV(DHT11_PIN);
delayMicroseconds(40);
DDRC &= ~_BV(DHT11_PIN);
delayMicroseconds(40);
dht11_in= PINC & _BV(DHT11_PIN);
if(dht11_in){
Serial.println("dht11 start condition 1 not met");
return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN);
if(!dht11_in){
Serial.println("dht11 start condition 2 not met");
return;
}
delayMicroseconds(80);
// now ready for data reception
for (i=0; i<5; i )
dht11_dat[i] = read_dht11_dat();
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0] dht11_dat[1] dht11_dat[2] dht11_dat[3];
// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Current humdity = ");
Serial.print(dht11_dat[0], DEC);
Serial.print(".");
Serial.print(dht11_dat[1], DEC);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(dht11_dat[2], DEC);
Serial.print(".");
Serial.print(dht11_dat[3], DEC);
Serial.println("C ");
delay(2000);
}
编译代码后下载Arduino 打开串口助手可以看到实际测量的温度和湿度。
标签:PIN,arduino,温湿度,笔记,dat,BV,Serial,dht11,DHT11
来源: https://blog.csdn.net/qq_37631068/article/details/100678556