Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO-Based Smart Soil Moisture and Vibration Monitoring System with MPU6050

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Smart Soil Moisture and Vibration Monitoring System with MPU6050

Circuit Documentation

Summary

This circuit integrates multiple sensors and actuators with an Arduino UNO microcontroller. The components include an MPU6050 accelerometer, a soil moisture sensor and module, a vibration sensor, a buzzer, and an LED. The Arduino UNO reads data from the sensors and controls the buzzer and LED based on the sensor inputs.

Component List

InvenSense MPU6050

LED: Two Pin (red)

Arduino UNO

Soil Moisture Sensor

SW-420 Vibration Sensor

Buzzer

Soil Moisture Module

Ceramic Capacitor

Wiring Details

InvenSense MPU6050

LED: Two Pin (red)

Arduino UNO

Soil Moisture Sensor

SW-420 Vibration Sensor

Buzzer

Soil Moisture Module

Ceramic Capacitor

Code Documentation

#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>

// Pin definitions
const int soilMoisturePin = A0; // Analog pin for soil moisture sensor
const int vibrationSensorPin = D3; // Digital pin for vibration sensor
const int buzzerPin = D4; // Digital pin for buzzer
const int ledPin = D5; // Digital pin for LED

// MPU6050 Accelerometer object
Adafruit_MPU6050 mpu;

void setup() {
  // Initialize serial communication
  Serial.begin(9600);

  // Initialize pin modes
  pinMode(vibrationSensorPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(ledPin, OUTPUT);

  // Initialize MPU6050
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1);
  }
  Serial.println("MPU6050 initialized!");

  // Optional: Configure MPU6050 settings
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
}

void loop() {
  // Read soil moisture
  int soilMoistureValue = analogRead(soilMoisturePin);
  int moisturePercent = map(soilMoistureValue, 1023, 0, 0, 100);

  // Read vibration sensor
  int vibrationDetected = digitalRead(vibrationSensorPin);

  // Read accelerometer data
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  // Display soil moisture
  Serial.print("Soil Moisture: ");
  Serial.print(moisturePercent);
  Serial.println("%");

  // Display vibration status
  if (vibrationDetected == HIGH) {
    Serial.println("Vibration Detected!");
    digitalWrite(buzzerPin, HIGH); // Activate buzzer
    digitalWrite(ledPin, HIGH);   // Turn on LED
  } else {
    digitalWrite(buzzerPin, LOW); // Deactivate buzzer
    digitalWrite(ledPin, LOW);   // Turn off LED
  }

  // Display accelerometer data
  Serial.print("Accel X: "); Serial.print(a.acceleration.x); Serial.print(" m/s^2, ");
  Serial.print("Y: "); Serial.print(a.acceleration.y); Serial.print(" m/s^2, ");
  Serial.print("Z: "); Serial.println(a.acceleration.z); Serial.println(" m/s^2");

  delay(1000);
}

This code initializes the sensors and reads data from them in the loop. It displays the soil moisture level, vibration status, and accelerometer data on the serial monitor. The buzzer and LED are activated when vibration is detected.