#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Set the LCD I2C address to 0x27 for a 20x4 display
int soilMoisturePin = 12; // Soil moisture sensor pin
int vibrationPin = 27; // Vibration sensor pin
int buzzerPin = 2; // Buzzer pin
int greenLEDPin = 17; // Green LED pin
int yellowLEDPin = 16; // Yellow LED pin
int redLEDPin = 4; // Red LED pin
int t_p = 5;
int e_p = 18;
float ss = 0.034;
long durn;
float dist_cm;
void setup() {
Serial.begin(115200);
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight of the LCD
pinMode(soilMoisturePin, INPUT);
pinMode(vibrationPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(greenLEDPin, OUTPUT);
pinMode(yellowLEDPin, OUTPUT);
pinMode(redLEDPin, OUTPUT);
pinMode(t_p, OUTPUT);
pinMode(e_p, INPUT);
lcd.setCursor(3,0);
lcd.print("DEVELOPMENT OF");
lcd.setCursor(3,1);
lcd.print("LANDSLIDE EARLY");
lcd.setCursor(3,2);
lcd.print("WARNING SYSTEM");
lcd.setCursor(6,3);
lcd.print("WITH IOT");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0); // Set cursor to the first position of the first line
lcd.print("Status : "); // Print initial status on LCD
lcd.setCursor(0, 1);
lcd.print("Moisture: ");
lcd.setCursor(0, 2);
lcd.print("Distance: ");
lcd.setCursor(0, 3);
lcd.print("Vibration: ");
}
void loop() {// Ultrasonic distance measurement
digitalWrite(t_p, LOW);
delayMicroseconds(2);
digitalWrite(t_p, HIGH);
delayMicroseconds(10);
digitalWrite(t_p, LOW);
durn = pulseIn(e_p, HIGH);
dist_cm = durn * ss / 2;
// Display distance on Serial Monitor
Serial.print("Distance: ");
Serial.print(dist_cm);
Serial.println(" cm");
// Display distance on LCD
lcd.setCursor(0, 2);
lcd.print("Distance : ");
lcd.print(dist_cm);
lcd.print(" cm");
int soilMoisture = analogRead(soilMoisturePin);
int mappedMoisture = map(soilMoisture, 0, 4095, 0, 100); // Map soil moisture to 0-100 range
int vibration = digitalRead(vibrationPin);
lcd.setCursor(0, 1); // Set cursor to the first position of the second line
lcd.print("Moisture : ");
lcd.print(mappedMoisture);
lcd.print("% "); // Print percentage and spaces to clear previous data
lcd.setCursor(0, 3); // Set cursor to the first position of the third line
lcd.print("Vibration: ");
lcd.print(vibration == 1 ? "Detected " : "None ");
// Display soil moisture and vibration on Serial Monitor
Serial.print("Moisture : ");
Serial.print(mappedMoisture);
Serial.print("% Vibration: ");
Serial.println(vibration == 1 ? "Detected" : "None");
if (mappedMoisture >= 80 && vibration == 1 || dist_cm <= 100 && vibration == 1) {
digitalWrite(greenLEDPin, LOW);
digitalWrite(yellowLEDPin, LOW);
lcd.setCursor(11, 0);
lcd.print("Unsafe ");
for (int i = 0; i < 5; i++){ // Blink the LED 5 times
digitalWrite(redLEDPin, HIGH); // Turn on the LED
tone(buzzerPin, 1000); // Activate the buzzer
delay(500); // LED and buzzer ON for 200 milliseconds
digitalWrite(redLEDPin, LOW); // Turn off the LED
noTone(buzzerPin); // Turn off the buzzer
delay(100); // LED and buzzer OFF for 200 milliseconds
}
}else if (mappedMoisture >= 80 && vibration == 0 || dist_cm <= 100 && vibration == 0){
digitalWrite(greenLEDPin, LOW);
digitalWrite(yellowLEDPin, LOW);
digitalWrite(redLEDPin, HIGH);
lcd.setCursor(11, 0);
lcd.print("Danger ");
}
if (mappedMoisture > 50 && mappedMoisture < 80 && vibration == 1 || dist_cm > 100 && dist_cm < 200 && vibration == 1) {
digitalWrite(greenLEDPin, LOW);
digitalWrite(redLEDPin, LOW);
lcd.setCursor(11, 0);
lcd.print("Danger ");
for (int i = 0; i < 5; i++) { // Blink the LED 5 times
digitalWrite(yellowLEDPin, HIGH); // Turn on the LED
tone(buzzerPin, 1000); // Activate the buzzer
delay(500); // LED and buzzer ON for 200 milliseconds
digitalWrite(yellowLEDPin, LOW); // Turn off the LED
noTone(buzzerPin); // Turn off the buzzer
delay(500); // LED and buzzer OFF for 200 milliseconds
}
}else if (mappedMoisture > 50 && mappedMoisture < 80 && vibration == 0 || dist_cm > 100 && dist_cm < 200 && vibration == 0){
digitalWrite(greenLEDPin, LOW); // Turn off the green LED
digitalWrite(yellowLEDPin, HIGH); // Turn on the yellow LED
digitalWrite(redLEDPin, LOW); // Turn off the red LED
lcd.setCursor(11, 0);
lcd.print("Alert ");
}
if (mappedMoisture > 20 && mappedMoisture < 50 && vibration == 1 || dist_cm > 200 && dist_cm < 300 && vibration == 1){
digitalWrite(greenLEDPin, HIGH);
digitalWrite(yellowLEDPin, LOW);
digitalWrite(redLEDPin, LOW);
lcd.setCursor(11, 0);
lcd.print("Alert ");
for (int i = 0; i < 5; i++){ // Blink the LED 5 times
digitalWrite(greenLEDPin, HIGH); // Turn on the LED
tone(buzzerPin, 1000); // Activate the buzzer
delay(1000); // LED and buzzer ON for 200 milliseconds
digitalWrite(greenLEDPin, LOW); // Turn off the LED
noTone(buzzerPin); // Turn off the buzzer
delay(1000); // LED and buzzer OFF for 200 milliseconds
}
}else if (mappedMoisture > 20 && mappedMoisture < 50 && vibration == 0 || dist_cm > 200 && dist_cm < 300 && vibration == 0){
digitalWrite(greenLEDPin, HIGH); // Keep the green LED constantly 0
digitalWrite(yellowLEDPin, LOW);
digitalWrite(redLEDPin, LOW);
lcd.setCursor(11, 0);
lcd.print("Stable ");
}
if (mappedMoisture <= 20 && dist_cm >= 300){
digitalWrite(greenLEDPin, HIGH);
digitalWrite(yellowLEDPin, LOW);
digitalWrite(redLEDPin, LOW);
lcd.setCursor(11, 0);
lcd.print("Safe ");
}
}