#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Define DHT11 pin
#define DHTPIN 2
#define DHTTYPE DHT11
// Define L298N control pins
#define ENA_PIN 9
#define IN1_PIN 10
#define IN2_PIN 11
// Define I2C LCD address and dimensions (adjust if needed)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Common address is 0x27 or 0x3F
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("Temperature Based Fan Control");
// Initialize LCD
lcd.init();
lcd.backlight();
lcd.print("Initializing...");
// Initialize DHT sensor
dht.begin();
// Set L298N control pins as outputs
pinMode(ENA_PIN, OUTPUT);
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
// Set initial motor direction (optional, can be fixed)
digitalWrite(IN1_PIN, HIGH);
digitalWrite(IN2_PIN, LOW);
// Stop the fan initially
analogWrite(ENA_PIN, 0);
lcd.clear();
}
void loop() {
// Read temperature every 2 seconds
delay(1000);
float temperature = dht.readTemperature();
// Check if reading was successful
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.print("DHT Error!");
return;
}
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
// Control fan speed based on temperature
int fanSpeed = 0;
if (temperature > 30) {
fanSpeed = 255; // Full speed
} else if (temperature > 28) {
fanSpeed = 180; // Medium speed
} else if (temperature > 26) {
fanSpeed = 100; // Low speed
} else {
fanSpeed = 0; // Fan off
}
// Set fan speed using PWM (0-255)
analogWrite(ENA_PIN, fanSpeed);
Serial.print("Fan Speed: ");
Serial.println(fanSpeed);
// Display temperature and fan speed on LCD
lcd.clear();
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Fan: ");
if (fanSpeed > 0) {
lcd.print(map(fanSpeed, 0, 255, 0, 100)); // Display speed as percentage
lcd.print("%");
} else {
lcd.print("OFF");
}
}