This circuit is designed to monitor environmental conditions that could indicate a potential landslide. It includes an Arduino Nano microcontroller interfaced with various sensors and modules, including a soil moisture sensor, a vibration sensor (SW-420), an accelerometer (ADXL345), and a GSM module (SIM800L) for sending SMS alerts. The circuit also features visual indicators (LEDs) and an audible alert (buzzer).
#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 risk of a landslide, and triggering alerts accordingly. It uses the Arduino Nano's analog and digital pins to interface with the sensors and the SoftwareSerial library to communicate with the GSM module. The accelerometer's tilt data is used alongside the soil moisture and vibration sensor readings to assess the landslide risk. Alerts are visually indicated by LEDs and audibly by the buzzer. SMS alerts are sent using the GSM module when a potential landslide is detected.