This circuit is designed around an Arduino Nano microcontroller and includes a variety of sensors and modules to detect environmental conditions that may indicate a potential landslide. The circuit features a soil moisture sensor, a vibration sensor (SW-420), an accelerometer (ADXL345), a GSM module (SIM800L) for sending SMS alerts, a buzzer for audible alerts, and three LEDs (red, yellow, green) to visually indicate the status of the system. The circuit is powered by a 5V battery.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <SoftwareSerial.h>
// Pin definitions
#define SOIL_SENSOR_PIN A0
#define VIBRATION_SENSOR_PIN 2
#define BUZZER_PIN 3
#define GREEN_LED 4
#define YELLOW_LED 5
#define RED_LED 6
// Threshold values
#define MOISTURE_THRESHOLD 500 // Soil moisture threshold
#define VIBRATION_THRESHOLD 100 // Vibration sensor threshold
#define TILT_THRESHOLD 15.0 // Tilt threshold (degrees)
// Initialize accelerometer
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
// GSM module connected to pins D7 (TX) and D8 (RX)
SoftwareSerial gsm(7, 8);
void setup() {
// Pin Modes
pinMode(SOIL_SENSOR_PIN, INPUT);
pinMode(VIBRATION_SENSOR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
// Initialize Serial and GSM
Serial.begin(9600);
gsm.begin(9600);
// Initialize Accelerometer
if (!accel.begin()) {
Serial.println("No ADXL345 detected, check wiring.");
while (1);
}
accel.setRange(ADXL345_RANGE_16_G); // Set range for the accelerometer
}
void loop() {
int moistureLevel = analogRead(SOIL_SENSOR_PIN);
int vibration = digitalRead(VIBRATION_SENSOR_PIN);
sensors_event_t event;
accel.getEvent(&event);
float tilt = atan2(event.acceleration.y, event.acceleration.x) * 180 / PI;
// Print sensor readings
Serial.print("Soil Moisture: ");
Serial.println(moistureLevel);
Serial.print("Vibration: ");
Serial.println(vibration);
Serial.print("Tilt: ");
Serial.println(tilt);
// Landslide detection logic
if (moistureLevel > MOISTURE_THRESHOLD || vibration > VIBRATION_THRESHOLD || abs(tilt) > TILT_THRESHOLD) {
// Trigger alert
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, LOW);
sendSMS("Warning: Possible landslide detected!");
delay(2000);
} else if (moistureLevel > MOISTURE_THRESHOLD || abs(tilt) > (TILT_THRESHOLD / 2)) {
// Moderate alert
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
} else {
// Normal status
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
}
delay(1000); // Delay to avoid rapid triggering
}
// Function to send SMS alerts
void sendSMS(String message) {
gsm.println("AT+CMGF=1"); // Set SMS mode to text
delay(1000);
gsm.println("AT+CMGS=\"+91xxxxxxxxxx\""); // Replace with the recipient's phone number
delay(1000);
gsm.println(message);
delay(100);
gsm.println((char)26); // ASCII code of CTRL+Z to send the message
delay(1000);
}
This code is responsible for reading sensor data, determining the landslide risk level, and triggering alerts accordingly. It uses the Arduino Nano's built-in analog and digital I/O pins to interface with the sensors and modules. The sendSMS
function is used to send an SMS alert when a potential landslide is detected.