#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address to 0x27 for a 16 chars and 2 line display
const int tempPin = A0;
const int pirPin = 2;
const int trigPin = 3;
const int echoPin = 4;
const int ledTemp = 5;
const int ledMotion = 6;
const int ledDistance = 7;
void setup() {
pinMode(tempPin, INPUT);
pinMode(pirPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledTemp, OUTPUT);
pinMode(ledMotion, OUTPUT);
pinMode(ledDistance, OUTPUT);
Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Smart Home System");
}
void loop() {
// Temperature Monitoring
int tempReading = analogRead(tempPin);
float voltage = tempReading * 5.0;
voltage /= 1024.0;
float temperatureC = (voltage - 0.5) * 100;
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.println(" C");
if (temperatureC > 30) {
digitalWrite(ledTemp, HIGH);
} else {
digitalWrite(ledTemp, LOW);
}
// PIR Motion Detection
int motionDetected = digitalRead(pirPin);
if (motionDetected == HIGH) {
digitalWrite(ledMotion, HIGH);
Serial.println("Motion Detected!");
delay(5000); // LED stays on for 5 seconds
digitalWrite(ledMotion, LOW);
delay(1200); // Inhibit time
}
// Distance Measurement with Ultrasonic Sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distanceCm = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distanceCm);
Serial.println(" cm");
if (distanceCm < 10) {
digitalWrite(ledDistance, HIGH);
} else {
digitalWrite(ledDistance, LOW);
}
// Display on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatureC);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distanceCm);
lcd.print(" cm");
delay(1000);
}