Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO-Based Temperature and Humidity Monitor with DHT11 Sensor and I2C LCD Display

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Temperature and Humidity Monitor with DHT11 Sensor and I2C LCD Display

Circuit Documentation

Summary

This circuit is designed to measure temperature and humidity using a DHT11 sensor and display the readings on a 16x2 I2C LCD. The circuit is controlled by an Arduino UNO, which reads data from the DHT11 sensor and updates the LCD display accordingly. A resistor is used to ensure proper operation of the DHT11 sensor.

Component List

DHT11 Humidity and Temperature Sensor

Resistor

Arduino UNO

16x2 I2C LCD

Wiring Details

DHT11 Humidity and Temperature Sensor

Resistor

Arduino UNO

16x2 I2C LCD

Code Documentation

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>

// Initialize the LCD with the I2C address (usually 0x27 or 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Define the DHT sensor pin and type
#define DHTPIN 9
#define DHTTYPE DHT11

// Initialize the DHT sensor
DHT dht(DHTPIN, DHTTYPE);

unsigned long startTime;
float previousTemperature = NAN;

void setup() {
  // Initialize the LCD
  lcd.begin(16, 2);
  lcd.backlight();
  
  // Print a message to the LCD
  lcd.print("Initializing...");

  delay(500);
  
  // Initialize the start time
  startTime = millis();

  // Initialize the DHT sensor
  dht.begin();

  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);

  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
}

void loop() {
  // Calculate the elapsed time in milliseconds
  unsigned long elapsedTime = millis() - startTime;
  
  // Convert elapsed time to seconds with one decimal place
  float elapsedTimeSec = elapsedTime / 1000.0;
  
  // Read temperature as Celsius
  float temperature = dht.readTemperature();
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(temperature)) {
    lcd.setCursor(0, 0);
    lcd.print("Error reading");
    return;
  }
  
  // Only update the display if the temperature has changed
  if (temperature != previousTemperature) {
    // Clear the first row
    lcd.setCursor(0, 0);
    lcd.print("                "); // Clear the first row by printing spaces
    
    // Set the cursor to the first row, first column
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    
    // Clear the second row
    lcd.setCursor(0, 1);
    lcd.print("                "); // Clear the second row by printing spaces
    
    // Set the cursor to the second row, first column
    lcd.setCursor(0, 1);
    
    // Print the temperature to the LCD
    lcd.print(temperature);
    lcd.print(" C");
    
    // Update the previous temperature
    previousTemperature = temperature;
  }
  
  // Add a small delay to avoid flickering
  delay(50);
}

This code initializes the LCD and DHT11 sensor, reads the temperature from the sensor, and displays it on the LCD. The display is only updated if the temperature changes, and a small delay is added to avoid flickering.