Arduino Uno Humidity Sensor (DHT11): Precision Environmental Control
Professional DHT11 digital humidity and temperature sensor integration with Arduino Uno through single-wire bidirectional protocol on digital pin 2. NTC thermistor and capacitive humidity element provide ±5% RH (20-80%) and ±2°C (-40 to 80°C) measurements updated every 1Hz.
40-bit serial data packet contains integral humidity, decimal humidity, integral temperature, decimal temperature, and checksum. Arduino generates 18ms start signal initiating 80μs response pulse followed by 40-bit data transmission with 50μs bit timing.
Complete Environmental Monitoring Components
- Arduino UNO R3 microcontroller development board
- DHT11 Digital Humidity & Temperature Sensor Module
- Male-to-male jumper wires (minimum 3 pieces)
- Solderless breadboard for prototyping
- 4.7kΩ pull-up resistor (DHT11 data line)
- External 12V DC power supply (optional)
Precision Single-Wire Hardware Integration
DHT11 VCC (Pin 1): Arduino 5V power rail (3.3-5.5V range)
DHT11 DATA (Pin 2): Arduino Digital Pin 2 + 4.7kΩ pull-up to VCC
DHT11 NC (Pin 3): Not connected
DHT11 GND (Pin 4): Arduino GND rail
Critical 4.7kΩ pull-up ensures reliable 5V logic levels. 1Hz maximum polling rate prevents bus contention.
// Arduino Uno DHT11 Humidity & Temperature Sensor - Professional Implementation
// Digital Pin 2: DHT11 single-wire data bus
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int statusLed = 13;
void setup() {
Serial.begin(9600);
pinMode(statusLed, OUTPUT);
dht.begin();
Serial.println("=== DHT11 Environmental Monitor Initialized ===");
Serial.println("Humidity(%) | Temperature(°C) | Heat Index(°C)");
digitalWrite(statusLed, HIGH);
delay(2000);
digitalWrite(statusLed, LOW);
}
void loop() {
// 2 second sampling interval
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
// Validate readings
if (isnan(humidity) || isnan(temperature)) {
Serial.println("*** SENSOR READ ERROR - Check wiring/4.7k pull-up ***");
digitalWrite(statusLed, HIGH);
return;
}
digitalWrite(statusLed, LOW);
// Formatted output
Serial.print("Humidity: ");
Serial.print(humidity, 1);
Serial.print("% | Temperature: ");
Serial.print(temperature, 1);
Serial.print("°C | Heat Index: ");
Serial.print(heatIndex, 1);
Serial.println("°C");
}
Arduino IDE Professional Development Environment
Install Adafruit DHT Sensor Library (Tools → Manage Libraries → 'DHT sensor library'). Verify 4.7kΩ pull-up resistor on data line. Upload maintaining stable 5V power.
Serial Monitor (9600 baud) displays humidity, temperature, and heat index every 2 seconds. Status LED blinks on read errors.
Advanced Environmental Control & Threshold Alarms
// Industrial HVAC Controller - Humidity & Temperature Regulation
const int humidifierRelay = 7;
const int heaterRelay = 8;
const int coolerRelay = 9;
const float humiditySetpoint = 45.0;
const float humidityHysteresis = 5.0;
const float tempSetpoint = 22.0;
const float tempHysteresis = 2.0;
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Humidity control
if(humidity < (humiditySetpoint - humidityHysteresis)) {
digitalWrite(humidifierRelay, HIGH); // Activate humidifier
Serial.println("HUMIDIFIER ON - Low humidity");
} else if(humidity > (humiditySetpoint + humidityHysteresis)) {
digitalWrite(humidifierRelay, LOW);
Serial.println("HUMIDIFIER OFF - High humidity");
}
// Temperature control
if(temperature < (tempSetpoint - tempHysteresis)) {
digitalWrite(heaterRelay, HIGH);
digitalWrite(coolerRelay, LOW);
} else if(temperature > (tempSetpoint + tempHysteresis)) {
digitalWrite(coolerRelay, HIGH);
digitalWrite(heaterRelay, LOW);
}
Serial.print("RH:");
Serial.print(humidity,1);
Serial.print("% T:");
Serial.print(temperature,1);
Serial.println("°C");
delay(2000);
}
DHT11 Single-Wire Protocol Timing
Arduino 18ms LOW start → DHT11 80μs LOW response → 40-bit data (50μs LOW + 26-70μs HIGH per bit). Integral/decimal humidity/temperature recombined: Humidity = int_hum * 10 + dec_hum.
Industrial Environmental Monitoring Applications
- Precision greenhouse climate control (40-70% RH, 18-26°C)
- HVAC system humidity compensation and dehumidification
- Wine cellar temperature/humidity stability (55-75% RH, 12-15°C)
- Server room condensation prevention (>40% RH alarm)
// Environmental Data Logger with 4 DHT11 Sensors
#include <SD.h>
const int chipSelect = 10;
DHT dht1(2, DHT11), dht2(3, DHT11), dht3(4, DHT11), dht4(5, DHT11);
void setup() {
SD.begin(chipSelect);
dht1.begin(); dht2.begin(); dht3.begin(); dht4.begin();
}
void loop() {
File dataFile = SD.open("envlog.csv", FILE_WRITE);
if(dataFile) {
dataFile.print(millis());
dataFile.print(",");
dataFile.print(dht1.readHumidity()); dataFile.print(",");
dataFile.print(dht1.readTemperature()); dataFile.print(",");
dataFile.print(dht2.readHumidity()); dataFile.print(",");
dataFile.println(dht2.readTemperature());
dataFile.close();
}
delay(5000);
}
// Thermal Comfort Analysis - PMV/PPD Calculation Proxy
void loop() {
float rh = dht.readHumidity();
float t = dht.readTemperature();
float heatIndex = dht.computeHeatIndex(t, rh, false);
String comfort;
if(heatIndex < 22) comfort = "COLD";
else if(heatIndex > 27) comfort = "HOT";
else comfort = "COMFORTABLE";
Serial.print("Heat Index: ");
Serial.print(heatIndex,1);
Serial.print("°C | Comfort: ");
Serial.println(comfort);
}
DHT11 Technical Performance Specifications
Humidity: 20-80% RH ±5%, 0-100% range; Temperature: 0-50°C ±2°C, -40 to 80°C range; 1Hz update; 0.8mA measuring, 40-50μA standby; 3.3-5.5V; 1mA max current.
Production Deployment Requirements
- 4.7kΩ pull-up mandatory on data line
- Minimum 2s delay between readings
- ±5% RH accuracy 20-80%, degrades outside range
- Check checksum validation prevents corrupt data
- Multiple sensors require staggered polling
Field Calibration Protocol
Salt chamber verification (75% RH LiCl), psychrometer comparison, manufacturer traceability. Recalibrate annually or after thermal shock exposure.