Smart Environmental Monitoring System

Project: Smart Environmental Monitoring System



Objective:

To build an environmental monitoring system that can track water quality, air pollution, motion, and obstacles in real-time using various sensors. The system can be deployed both in water bodies and in urban areas to detect pollution, monitor changes in the environment, and provide real-time data to improve urban planning and environmental conservation.


---


Key Components & Purpose:


1. Water Level Sensor:

   - Purpose: Measure water levels in rivers, oceans, or urban drainage systems to monitor for flooding or drought conditions.


2. Temperature Sensor:

   - Purpose: Track environmental or water temperatures, which is vital for climate monitoring and water ecosystem health.


3. Fire Sensor:

   - Purpose: Detect any fire hazards, especially in dry or forested areas. It can help in early wildfire detection.


4. Obstacle Sensor:

   - Purpose: Used in autonomous navigation for robots to avoid obstacles in water or urban environments.


5. MQ2 Gas Sensor:

   - Purpose: Detect gas leaks or measure air quality (e.g., carbon monoxide or methane), ensuring safety in urban areas.


6. Motion Sensor:

   - Purpose: Monitor human or animal movement in specific areas, such as near industrial sites or in marine environments.


7. IR Sensor:

   - Purpose: Used for proximity sensing, which can be helpful in detecting objects in front of the robot or monitoring water surface debris.


8. Light Sensor:

   - Purpose: Measure light intensity, useful in monitoring conditions in underwater or heavily polluted urban areas.


9. Micro SD Card Module:

   - Purpose: Store data logs locally, which can be later retrieved for detailed analysis.


10. Arduino Nano / Arduino UNO:

    - Purpose: Act as the main control unit to process data from all sensors and communicate with other modules.


11. Powerbank Sensor:

    - Purpose: Monitor power consumption and ensure uninterrupted operation of the system using power banks.


12. Solar Panel:

    - Purpose: Provide renewable energy to power the system, especially when deployed in remote locations or on water surfaces.


13. Power Bank Module:

    - Purpose: Store energy from the solar panel to power the system when solar energy is not available (e.g., at night).


14. DC Voltage Meter:

    - Purpose: Monitor the system's energy usage, allowing for optimization of power consumption.


15. Battery (x3):

    - Purpose: Provide backup power for the system when the solar panel is not enough.


16. Servo:

    - Purpose: Control mechanical movement, such as rotating a camera or moving parts of the robot to adjust sensors.


17. Lights/Buzzers:

    - Purpose: Act as indicators or alerts in case of hazardous conditions, like gas leaks or fires.


18. Breadboard:

    - Purpose: Facilitate prototyping by allowing easy connections between components.


---


Additional Components (Optional):


1. Moisture Sensor:

   - Purpose: Monitor soil moisture, which can be useful for urban greenery, parks, or even coastal regions.


2. pH Sensor:

   - Purpose: Track water acidity levels, crucial for monitoring pollution and marine health in the oceans or rivers near Busan.


---


Design Overview:


- System Layout:

   - The system consists of two primary setups: one designed for monitoring water bodies (rivers, lakes, oceans) and one designed for urban areas.

   - The water monitoring unit would include the water level sensor, temperature sensor, MQ2 gas sensor, and pH sensor, along with the solar panel for power.

   - The urban monitoring unit would include the fire sensor, motion sensor, and obstacle sensor to navigate around city streets or parks, while monitoring air pollution and fire hazards.

  

- Data Logging & Communication:

   - Each unit will be equipped with the Micro SD Card module to log sensor data locally.

   - Optionally, a wireless communication module (e.g., LoRa or GSM) can be added for real-time data transmission to a cloud server, allowing remote monitoring.


---


Operation:


1. Real-time Data Collection:

   - The system will collect real-time data on water levels, temperature, gas concentration, and motion.

   - The data is processed using the Arduino controllers and stored locally on the SD card for future analysis or transmitted wirelessly to a central server.


2. Alert Mechanism:

   - In the event of an abnormal reading (e.g., high gas levels, fire detection, or rapid water level rise), the system will trigger lights/buzzers as an alert.

   - Optionally, the system can send alerts to a remote monitoring station using GSM or WiFi modules.


3. Energy Management:

   - Solar panels will provide continuous power during the day, while power banks and batteries will ensure that the system runs through the night or during periods of low sunlight.


---


Potential Applications:


- Busan Coastal Monitoring: 

   - Deploying this system in coastal areas can provide valuable data on water pollution, temperature changes, and marine conditions.

  

- Urban Waste Management:

   - The system can monitor air quality and fire hazards in industrial areas, providing real-time feedback to the city authorities.


- Educational Use:

   - The project can serve as a practical example of environmental science and robotics for students, offering hands-on experience in how technology can solve real-world problems.


---


Future Expansion:


- Integrating AI for predictive analysis (e.g., predicting flood risks based on water levels).

- Expanding sensor arrays to monitor more environmental parameters like humidity, sound levels, and turbidity in water.

- Building a mobile app to visualize data in real-time for city officials, researchers, or citizens.


Code:

// Include necessary libraries

#include <SD.h>                  // For Micro SD card module

#include <SPI.h>                 // For SD card communication

#include <DHT.h>                 // For temperature and humidity sensor

#include <Servo.h>               // For controlling the servo motor


// Define sensor pins

#define WATER_LEVEL_PIN A0       // Analog pin for water level sensor

#define TEMPERATURE_PIN A1       // Analog pin for temperature sensor

#define MQ2_PIN A2               // Analog pin for gas sensor (MQ2)

#define LIGHT_SENSOR_PIN A3      // Analog pin for light sensor

#define OBSTACLE_SENSOR_PIN 2    // Digital pin for obstacle sensor

#define FIRE_SENSOR_PIN 3        // Digital pin for fire sensor

#define MOTION_SENSOR_PIN 4      // Digital pin for motion sensor

#define IR_SENSOR_PIN 5          // Digital pin for IR sensor

#define BUZZER_PIN 8             // Digital pin for buzzer or alarm

#define LED_PIN 9                // Digital pin for LED indicator

#define SERVO_PIN 10             // PWM pin for Servo motor


// SD card configuration

#define SD_CS_PIN 10             // Chip select pin for the SD card module


// Initialize Servo

Servo myServo;


// DHT sensor settings (for Temperature & Humidity)

#define DHTTYPE DHT11

DHT dht(TEMPERATURE_PIN, DHTTYPE);


// Variables for storing sensor data

int waterLevel = 0;

float temperature = 0.0;

int gasLevel = 0;

int lightLevel = 0;

int fireStatus = 0;

int motionStatus = 0;

int obstacleStatus = 0;

int irStatus = 0;


// Variables for power management

bool powerStatus = true;

int batteryLevel = 100;  // Example: 100% charge initially


// Initialize SD card file

File dataFile;


// Setup function

void setup() {

  // Begin Serial communication

  Serial.begin(9600);


  // Initialize sensors and SD card module

  dht.begin();

  myServo.attach(SERVO_PIN);


  if (!SD.begin(SD_CS_PIN)) {

    Serial.println("SD Card initialization failed!");

    return;

  }

  Serial.println("SD Card initialized.");


  // Setup pin modes

  pinMode(WATER_LEVEL_PIN, INPUT);

  pinMode(TEMPERATURE_PIN, INPUT);

  pinMode(MQ2_PIN, INPUT);

  pinMode(LIGHT_SENSOR_PIN, INPUT);

  pinMode(OBSTACLE_SENSOR_PIN, INPUT);

  pinMode(FIRE_SENSOR_PIN, INPUT);

  pinMode(MOTION_SENSOR_PIN, INPUT);

  pinMode(IR_SENSOR_PIN, INPUT);

  pinMode(BUZZER_PIN, OUTPUT);

  pinMode(LED_PIN, OUTPUT);

}


// Function to read all sensors and log data

void logSensorData() {

  // Read sensors

  waterLevel = analogRead(WATER_LEVEL_PIN);

  temperature = dht.readTemperature();

  gasLevel = analogRead(MQ2_PIN);

  lightLevel = analogRead(LIGHT_SENSOR_PIN);

  obstacleStatus = digitalRead(OBSTACLE_SENSOR_PIN);

  fireStatus = digitalRead(FIRE_SENSOR_PIN);

  motionStatus = digitalRead(MOTION_SENSOR_PIN);

  irStatus = digitalRead(IR_SENSOR_PIN);


  // Print sensor data to serial monitor

  Serial.println("---- Sensor Data ----");

  Serial.print("Water Level: "); Serial.println(waterLevel);

  Serial.print("Temperature: "); Serial.println(temperature);

  Serial.print("Gas Level: "); Serial.println(gasLevel);

  Serial.print("Light Level: "); Serial.println(lightLevel);

  Serial.print("Obstacle Status: "); Serial.println(obstacleStatus);

  Serial.print("Fire Status: "); Serial.println(fireStatus);

  Serial.print("Motion Status: "); Serial.println(motionStatus);

  Serial.print("IR Status: "); Serial.println(irStatus);


  // Store data in SD card

  dataFile = SD.open("log.txt", FILE_WRITE);

  if (dataFile) {

    dataFile.print("Water Level: "); dataFile.println(waterLevel);

    dataFile.print("Temperature: "); dataFile.println(temperature);

    dataFile.print("Gas Level: "); dataFile.println(gasLevel);

    dataFile.print("Light Level: "); dataFile.println(lightLevel);

    dataFile.print("Obstacle Status: "); dataFile.println(obstacleStatus);

    dataFile.print("Fire Status: "); dataFile.println(fireStatus);

    dataFile.print("Motion Status: "); dataFile.println(motionStatus);

    dataFile.print("IR Status: "); dataFile.println(irStatus);

    dataFile.println("-----------------------");

    dataFile.close();

  } else {

    Serial.println("Error opening log file!");

  }

}


// Function to handle alerts (buzzer/light)

void handleAlerts() {

  if (fireStatus == HIGH || gasLevel > 500 || waterLevel > 800) { // Set thresholds as per requirement

    digitalWrite(BUZZER_PIN, HIGH);

    digitalWrite(LED_PIN, HIGH);

  } else {

    digitalWrite(BUZZER_PIN, LOW);

    digitalWrite(LED_PIN, LOW);

  }

}


// Loop function

void loop() {

  // Log sensor data every 5 seconds

  logSensorData();


  // Handle any alerts

  handleAlerts();


  // Adjust servo based on water level or other conditions

  if (waterLevel > 600) {

    myServo.write(90);  // Rotate to a certain position

  } else {

    myServo.write(0);   // Return to home position

  }


  // Simulate power status (can integrate with solar/power management)

  batteryLevel -= 1;  // Simulate battery consumption

  if (batteryLevel < 20) {

    powerStatus = false;  // Simulate low battery

  }


  // Pause for 5 seconds before the next reading

  delay(5000);

}


---


This plan combines the components you listed with a clear framework for environmental monitoring. You can adjust or expand the system as needed based on the project's scale or specific goals for Busan or other urban settings.

1 comment:

Powered by Blogger.