Arduino Uno DHT11 Humidity Sensor: Professional Environmental Monitoring

Complete Arduino Uno DHT11 temperature and humidity sensor implementation using digital pin 2 single-wire protocol. ±5% RH accuracy 20-80% range, ±2°C temperature precision, 1Hz sampling with industrial HVAC control, greenhouse automation, and data logging applications.

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.

Program: Arduino Uno DHT11 - Complete Humidity & Temperature Monitoring
// 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

Program: Arduino Uno DHT11 - HVAC Control with Relay Output
// 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)
Program: Arduino Uno DHT11 - Data Logging & Multi-Sensor Array
// 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);
}
Program: Arduino Uno DHT11 - Comfort Index & Alert System
// 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.