#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
// MPU6050 Object
Adafruit_MPU6050 mpu;
// Vibration Threshold (adjust as needed)
const float vibrationThreshold = 18; // in g
void setup() {
Serial.begin(115200);
Serial.println("Initializing MPU6050...");
// Initialize MPU6050
if (!mpu.begin()) {
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
while (true); // Halt if MPU6050 is not detected
}
Serial.println("MPU6050 initialized successfully!");
// Configure sensor range (optional)
mpu.setAccelerometerRange(MPU6050_RANGE_2_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("MPU6050 configuration complete!");
}
void loop() {
// Create an event object to hold sensor data
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Read accelerometer values
float accelX = a.acceleration.x; // X-axis acceleration in m/s^2
float accelY = a.acceleration.y; // Y-axis acceleration in m/s^2
float accelZ = a.acceleration.z; // Z-axis acceleration in m/s^2
// Calculate vibration intensity (using magnitude)
float vibrationIntensity = sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ);
// Print accelerometer values and vibration intensity
Serial.print("Accel X: ");
Serial.print(accelX);
Serial.print(" m/s^2, Accel Y: ");
Serial.print(accelY);
Serial.print(" m/s^2, Accel Z: ");
Serial.print(accelZ);
Serial.print(" m/s^2, Vibration Intensity: ");
Serial.print(vibrationIntensity);
Serial.println(" m/s^2");
// Check for vibration threshold
if (vibrationIntensity > vibrationThreshold) {
Serial.println("Vibration Alert: Threshold Exceeded!");
}
delay(500); // Delay to avoid flooding the serial monitor
}