#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Define DHT sensor type and pin
#define DHTTYPE DHT11
#define DHTPIN 2
DHT dht(DHTPIN, DHTTYPE);
// Initialize LCD (16x2)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Define sensor and output pins
#define MQ135_PIN A0
#define IR_PIN 3
#define BUZZER_PIN 8
#define RED_LED 9
#define GREEN_LED 10
// Thresholds
#define GAS_THRESHOLD 300
#define TEMP_THRESHOLD 50
void setup() {
// Initialize LCD, DHT, and pins
lcd.begin(16,2);
lcd.backlight();
dht.begin();
pinMode(MQ135_PIN, INPUT);
pinMode(IR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Fire & Gas Alarm");
delay(2000);
lcd.clear();
}
void loop() {
// Read MQ135 gas sensor
int gasValue = analogRead(MQ135_PIN);
// Read DHT sensor
float temp = dht.readTemperature();
float hum = dht.readHumidity();
// Read IR sensor
bool flameDetected = digitalRead(IR_PIN);
// Display data on LCD
lcd.setCursor(0, 0);
lcd.print("Gas: ");
lcd.print(gasValue);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print("C");
// Normal operation (Green LED ON)
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER_PIN, LOW);
// Check gas levels
if (gasValue > GAS_THRESHOLD) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GAS ALERT!");
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
}
// Check temperature for fire
if (temp > TEMP_THRESHOLD || flameDetected) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FIRE ALERT!");
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
}
delay(500);
}