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 pull up the data line of the DHT11 sensor.
#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 DHT11 sensor and the 16x2 I2C LCD. It reads the temperature from the DHT11 sensor and displays it on the LCD. The display is updated only when the temperature changes to avoid unnecessary flickering.