#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// ===== LCD =====
LiquidCrystal_I2C lcd(0x27, 20, 4);
// ===== DHT =====
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ===== Sensors =====
#define LDR_PIN A0
#define MQ2_PIN A1
// ===== RGB PINS =====
// Light RGB
#define LR 3
#define LG 4
#define LB 5
// AC RGB
#define AR 6
#define AG 7
#define AB 8
// Purifier RGB
#define PR 9
#define PG 10
#define PB 11
// ===== RELAY PINS =====
#define RELAY_LIGHT 12
#define RELAY_AC 13
#define RELAY_PURIFIER A2 // works as digital pin
// ===== Thresholds =====
int darkThreshold = 400;
float tempThreshold = 30.0;
int airThreshold = 300;
// ===== RGB Helper =====
void setRGB(int r, int g, int b, bool red, bool green, bool blue) {
digitalWrite(r, red);
digitalWrite(g, green);
digitalWrite(b, blue);
}
void setup() {
Serial.begin(9600);
// RGB pins
int rgbPins[] = {LR,LG,LB, AR,AG,AB, PR,PG,PB};
for (int i = 0; i < 9; i++) pinMode(rgbPins[i], OUTPUT);
// Relay pins
pinMode(RELAY_LIGHT, OUTPUT);
pinMode(RELAY_AC, OUTPUT);
pinMode(RELAY_PURIFIER, OUTPUT);
// Turn relays OFF (ACTIVE LOW)
digitalWrite(RELAY_LIGHT, HIGH);
digitalWrite(RELAY_AC, HIGH);
digitalWrite(RELAY_PURIFIER, HIGH);
dht.begin();
lcd.init();
lcd.backlight();
// System Ready → Pink
setRGB(LR,LG,LB, HIGH, LOW, HIGH);
setRGB(AR,AG,AB, HIGH, LOW, HIGH);
setRGB(PR,PG,PB, HIGH, LOW, HIGH);
lcd.setCursor(0,0);
lcd.print("System Ready");
delay(2000);
}
void loop() {
int ldrValue = analogRead(LDR_PIN);
int airValue = analogRead(MQ2_PIN);
float temp = dht.readTemperature();
// ===== LIGHT =====
bool lightON = ldrValue > darkThreshold;
digitalWrite(RELAY_LIGHT, lightON ? LOW : HIGH);
setRGB(LR,LG,LB, LOW, lightON, LOW);
// ===== AC =====
bool acON = temp >= tempThreshold;
digitalWrite(RELAY_AC, acON ? LOW : HIGH);
setRGB(AR,AG,AB, LOW, acON, LOW);
// ===== PURIFIER =====
bool purifierON = airValue >= airThreshold;
digitalWrite(RELAY_PURIFIER, purifierON ? LOW : HIGH);
setRGB(PR,PG,PB, LOW, purifierON, LOW);
// ===== LCD =====
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Light: ");
lcd.print(ldrValue);
lcd.setCursor(0,2);
lcd.print("Air: ");
lcd.print(airValue);
lcd.setCursor(0,3);
lcd.print("L:");
lcd.print(lightON ? "ON " : "OFF");
lcd.print(" AC:");
lcd.print(acON ? "ON " : "OFF");
lcd.print(" P:");
lcd.print(purifierON ? "ON" : "OFF");
delay(1500);
}
Air purifier
Light
Temperature sensor ( DHT22 )
Air conditioner
Gas sensor ( dust sensor ) , ( MQ2 )
Light sensor ( LDR )
Monitor