#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Existing Pins
const int ldrPin = A0;
const int relayPin = 5;
// New Pins
const int trigPin = 2;
const int echoPin = 3;
const int buzzerPin = 4;
const int lightThreshold = 500;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(ldrPin, INPUT);
pinMode(relayPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(relayPin, LOW);
digitalWrite(buzzerPin, LOW);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Eco-Security OS");
delay(2000);
lcd.clear();
}
// Function to calculate distance using the Ultrasonic sensor
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2; // Calculate distance in cm
}
void loop() {
int lightLevel = analogRead(ldrPin);
long distance = getDistance();
// Update Top Row: Display both Light and Distance
lcd.setCursor(0, 0);
lcd.print("Lvl:");
lcd.print(lightLevel);
lcd.print(" Dist:");
lcd.print(distance);
lcd.print("cm "); // Extra spaces to clear old text
// Update Bottom Row & System Logic
lcd.setCursor(0, 1);
if (lightLevel > lightThreshold) {
// IT IS DARK - Activate smart zones
if (distance > 200) {
// Zone 1: Far away (Save energy)
digitalWrite(relayPin, LOW);
digitalWrite(buzzerPin, LOW);
lcd.print("Mode: ECO-SLEEP ");
}
else if (distance >= 50 && distance <= 200) {
// Zone 2: Normal presence (Turn on light)
digitalWrite(relayPin, HIGH);
digitalWrite(buzzerPin, LOW);
lcd.print("Mode: AUTO-LAMP ");
}
else if (distance < 50) {
// Zone 3: Breach (Trigger Alarm)
lcd.print("Mode: INTRUDER! ");
digitalWrite(relayPin, HIGH);
digitalWrite(buzzerPin, HIGH);
delay(100);
digitalWrite(relayPin, LOW);
digitalWrite(buzzerPin, LOW);
delay(100);
return; // Skip the normal delay to create a fast strobe/beep effect
}
} else {
// IT IS DAYTIME - Turn everything off
digitalWrite(relayPin, LOW);
digitalWrite(buzzerPin, LOW);
lcd.print("Mode: DAYTIME ");
}
delay(250);
}Loading
st-nucleo-c031c6
st-nucleo-c031c6