#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Initialize LCD (address 0x27, 16 columns, 2 rows)
LiquidCrystal_I2C lcd(0x27, 22, 21);
Servo motor1;
Servo motor2;
int pos = 0;
const int trigpin = 18;
const int echopin = 19;
const int photo_resistor = 36;
int bulb1 = 5;
int bulb2 = 27;
byte automatic[] = {
B00000,
B00000,
B01110,
B10001,
B10101,
B10001,
B01110,
B00000
};
void setup()
{
pinMode(trigpin, OUTPUT);
pinMode(echopin, INPUT);
motor1.attach(3); // Attach motor 1 to pin 3
motor2.attach(4); // Attach motor 2 to pin 4
motor1.write(pos);
motor2.write(pos);
lcd.createChar(0, automatic);
lcd.begin(16, 2);
lcd.setCursor(4, 0);
lcd.print("Complete");
lcd.setCursor(3, 1);
lcd.print("Automation");
lcd.write(byte(0));
delay(1000);
lcd.clear();
}
void loop()
{
long duration;
long distancecm;
// Get distance using the ultrasonic sensor
digitalWrite(trigpin, LOW);
delayMicroseconds(2);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
digitalWrite(trigpin, LOW);
duration = pulseIn(echopin, HIGH);
distancecm = (duration * 0.034) / 2;
int photo = analogRead(photo_resistor);
// Control bulbs based on light levels and distance
if (photo <= 425 && distancecm <= 305)
{
lcd.clear();
digitalWrite(bulb1, HIGH);
digitalWrite(bulb2, HIGH);
lcd.setCursor(0, 0);
lcd.print("BL1");
lcd.print(" BL2");
lcd.setCursor(0, 1);
lcd.print("100");
delay(400);
}
else if (photo > 425 && photo <= 517 && distancecm <= 305)
{
lcd.clear();
digitalWrite(bulb1, HIGH);
digitalWrite(bulb2, HIGH);
lcd.setCursor(0, 0);
lcd.print("BL1");
lcd.print(" BL2");
lcd.setCursor(0, 1);
lcd.print("75");
delay(400);
}
else if (photo > 517 && photo <= 574 && distancecm <= 305)
{
lcd.clear();
digitalWrite(bulb1, HIGH);
digitalWrite(bulb2, HIGH);
lcd.setCursor(0, 0);
lcd.print("BL1");
lcd.print(" BL2");
lcd.setCursor(0, 1);
lcd.print("50");
delay(400);
}
else if (photo > 574 && photo <= 630 && distancecm <= 305)
{
lcd.clear();
digitalWrite(bulb1, HIGH);
digitalWrite(bulb2, HIGH);
lcd.setCursor(0, 0);
lcd.print("BL1");
lcd.print(" BL2");
lcd.setCursor(0, 1);
lcd.print("25");
delay(400);
}
else if (photo > 630 && distancecm <= 305)
{
lcd.clear();
digitalWrite(bulb1, LOW);
digitalWrite(bulb2, LOW);
lcd.setCursor(0, 0);
lcd.print("BL1");
lcd.print(" BL2");
lcd.setCursor(0, 1);
lcd.print("OFF");
delay(400);
}
else if (distancecm > 305)
{
lcd.clear();
digitalWrite(bulb1, LOW);
digitalWrite(bulb2, LOW);
lcd.setCursor(3, 0);
lcd.print("System off");
lcd.setCursor(1, 1);
lcd.print("Nobody in Room");
delay(400);
}
}
void motoropen()
{
for (; pos <= 90; pos += 10)
{
motor1.write(pos);
motor2.write(pos);
delay(80);
}
}
void motorclose()
{
for (; pos >= 0; pos -= 10)
{
motor1.write(pos);
motor2.write(pos);
delay(80);
}
}