====== TEMPERATURE + HUMIDITY (DHT11) ====== {{:projets:atb:sensor_temp_humid:dht11-pinout-for-three-pin-and-four-pin-types-2.jpg?direct&400|}} ===== CHARACTERISTICS ===== * Operating Voltage 3.3V to 5.5V * Humidity measurement range 20% to 90% RH * Humidity measurement accuracy ±5% RH * Humidity measurement resolution 1% RH * Temperature measurement range 0ºC to 50ºC [32ºF to 122ºF] * Temperature measurement accuracy ±2ºC * Temperature measurement resolution 1ºC * Signal transmission range 20m ===== ARDUINO WIRING ===== {{:projets:atb:sensor_temp_humid:arduino-dht11-tutorial-3-pin-dht11-wiring-diagram.png?direct&400|}} ===== HOT TO USE A DHTXX ===== * https://learn.adafruit.com/dht/using-a-dhtxx-sensor ===== CODE SAMPLES ===== #include dht DHT; #define DHT11_PIN 7 void setup(){ } void loop(){ int chk = DHT.read11(DHT11_PIN); delay(1000); } int DHpin = 8; // input/output pin byte dat[5]; byte read_data() { byte i = 0; byte result = 0; for (i = 0; i < 8; i++) { while (digitalRead(DHpin) == LOW); // wait 50us delayMicroseconds(30); //The duration of the high level is judged to determine whether the data is '0' or '1' if (digitalRead(DHpin) == HIGH) result |= (1 << (8 - i)); //High in the former, low in the post while (digitalRead(DHpin) == HIGH); //Data '1', waiting for the next bit of reception } return result; } void start_test() { digitalWrite(DHpin, LOW); //Pull down the bus to send the start signal delay(30); //The delay is greater than 18 ms so that DHT 11 can detect the start signal digitalWrite(DHpin, HIGH); delayMicroseconds(40); //Wait for DHT11 to respond pinMode(DHpin, INPUT); while(digitalRead(DHpin) == HIGH); delayMicroseconds(80); //The DHT11 responds by pulling the bus low for 80us; if(digitalRead(DHpin) == LOW) delayMicroseconds(80); //DHT11 pulled up after the bus 80us to start sending data; for(int i = 0; i < 5; i++) //Receiving temperature and humidity data, check bits are not considered; dat[i] = read_data(); pinMode(DHpin, OUTPUT); digitalWrite(DHpin, HIGH); //After the completion of a release of data bus, waiting for the host to start the next signal } void setup() { Serial.begin(9600); pinMode(DHpin, OUTPUT); } void loop() { start_test(); Serial.print("Humdity = "); Serial.print(dat[0], DEC); //Displays the integer bits of humidity; Serial.print('.'); Serial.print(dat[1], DEC); //Displays the decimal places of the humidity; Serial.println('%'); Serial.print("Temperature = "); Serial.print(dat[2], DEC); //Displays the integer bits of temperature; Serial.print('.'); Serial.print(dat[3], DEC); //Displays the decimal places of the temperature; Serial.println('C'); byte checksum = dat[0] + dat[1] + dat[2] + dat[3]; if (dat[4] != checksum) Serial.println("-- Checksum Error!"); else Serial.println("-- OK"); delay(1000); }