DTH11学习
传感器基本知识
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,相比于 其它传感器,DHT11 既能检测温度又能检测湿度,不过相对来说精确度会低些,其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为 20%~90% 。
2.传感器的学习
1).传感器的接线
2).代码部分
int DHpin = 8; byte dat[5]; byte read_data() { byte data; for(int i=0; i<8; i++) { if(digitalRead(DHpin) == LOW) { while(digitalRead(DHpin) == LOW); delayMicroseconds(30);//等待50us; if(digitalRead(DHpin) == HIGH) //判断高电平的持续时间,以判定数据是‘0’还是‘1’; data |= (1<<(7-i)); //高位在前,低位在后 while(digitalRead(DHpin) == HIGH); //数据‘1’,等待下一位的接收; } } return data; } void start_test() { digitalWrite(DHpin,LOW); //拉低总线,发开始信号; delay(30); //延时要大于 18ms,以便 DHT11 能检测到开始信号; digitalWrite(DHpin,HIGH); delayMicroseconds(40); //等待DHT11 响应; pinMode(DHpin,INPUT); while(digitalRead(DHpin) == HIGH); delayMicroseconds(80); //DHT11 发出响应,拉低总线 80us; if(digitalRead(DHpin) == LOW); delayMicroseconds(80); //DHT11 拉高总线 80us 后开始发送数据; for(int i=0;i<4;i++) //接收温湿度数据,校验位不考虑; dat[i] = read_data(); pinMode(DHpin,OUTPUT); digitalWrite(DHpin,HIGH); //发送完一次数据后释放总线,等待主机的下一次开 始信号; } void setup() { Serial.begin(9600); pinMode(DHpin,OUTPUT); } void loop() { start_test(); Serial.print("Current humdity = "); Serial.print(dat[0], DEC); //显示湿度的整数位; Serial.print('.'); Serial.print(dat[1],DEC); //显示湿度的小数位; Serial.println('%'); Serial.print("Current temperature = "); Serial.print(dat[2], DEC); //显示温度的整数位; Serial.print('.'); Serial.print(dat[3],DEC); //显示温度的小数位; Serial.println('C'); delay(700); }
3).实验数据