#include "DHTesp.h"
#include <LiquidCrystal.h>
// Pin definitions
const int DHT_PIN = 15;
#define RELAY_PIN 14 // Relay control pin for heating
#define PIN_FAN_HIGH 13 // Relay control pin for high-speed fan
// Define temperature thresholds
const float TEMP_MIN = 37.5; // Minimum temperature
const float TEMP_MAX = 38.0; // Maximum temperature
// Initialize the LCD
LiquidCrystal lcd(19, 23, 18, 21, 5, 12);
// Initialize the DHT sensor
DHTesp dhtSensor;
void setup() {
// Start serial communication
Serial.begin(115200);
// Set up the DHT sensor
dhtSensor.setup(DHT_PIN, DHTesp::DHT11);
// Initialize the LCD with 16 columns and 2 rows
lcd.begin(16, 2);
// Initialize relay and fan pins
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Ensure the heating relay is off
pinMode(PIN_FAN_HIGH, OUTPUT);
digitalWrite(PIN_FAN_HIGH, HIGH); // Ensure the fan relay is off
// Print a welcome message to the LCD
lcd.print("Initializing...");
delay(2000);
lcd.clear();
}
void loop() {
// Get temperature and humidity data
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Check for sensor errors
if (isnan(data.temperature) || isnan(data.humidity)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.print("Sensor Error");
delay(2000);
return; // Exit loop early if sensor fails
}
// Print temperature and humidity to Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
// Print temperature and humidity to LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 1) + "C");
lcd.setCursor(0, 1);
lcd.print("Hum: " + String(data.humidity, 1) + "%");
// Heating control
if (data.temperature < TEMP_MIN) {
digitalWrite(RELAY_PIN, LOW); // Turn heating ON
Serial.println("Heating: ON");
} else if (data.temperature > TEMP_MAX) {
digitalWrite(RELAY_PIN, HIGH); // Turn heating OFF
Serial.println("Heating: OFF");
}
// Fan control
if (data.temperature > TEMP_MAX + 1) {
digitalWrite(PIN_FAN_HIGH, LOW); // Turn high-speed fan ON
Serial.println("Fan: High Speed");
} else {
digitalWrite(PIN_FAN_HIGH, HIGH); // Turn high-speed fan OFF
Serial.println("Fan: OFF");
}
delay(2000); // Wait 2 seconds before repeating
}