#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
Adafruit_MPU6050 mpu;
const int ledPin = 13; // Pin for the LED
bool fallDetected = false;
unsigned long previousMillis = 0;
const long interval = 5000; // Time interval for simulating fall (5 seconds)
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// Initialize MPU6050 (simulated)
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
mpu.setAccelerometerRange(MPU6050_RANGE_2_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("MPU6050 ready!");
}
void simulateNormalMovement(sensors_event_t &a) {
// Simulate normal standing/moving accelerometer values
a.acceleration.x = 0.0;
a.acceleration.y = 0.0;
a.acceleration.z = 9.8; // Simulating normal gravity in Z-axis
}
void simulateFall(sensors_event_t &a) {
// Simulate fall by modifying accelerometer values drastically
a.acceleration.x = random(3, 5); // Random high acceleration in X-axis
a.acceleration.y = random(3, 5); // Random high acceleration in Y-axis
a.acceleration.z = random(0, 1); // Low Z value simulating a sudden drop
}
void loop() {
unsigned long currentMillis = millis();
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Simulate fall every 5 seconds (interval)
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (fallDetected) {
Serial.println("Simulating normal movement...");
simulateNormalMovement(a);
fallDetected = false;
} else {
Serial.println("Simulating fall...");
simulateFall(a);
fallDetected = true;
}
}
// Print accelerometer values to Serial Monitor
Serial.print("Accel X: ");
Serial.print(a.acceleration.x);
Serial.print(", Accel Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Accel Z: ");
Serial.println(a.acceleration.z);
// Fall detection logic based on simulated values
if (abs(a.acceleration.x) > 3 || abs(a.acceleration.y) > 3 || abs(a.acceleration.z) < 0.5) {
Serial.println("Fall detected!");
digitalWrite(ledPin, HIGH); // Turn on LED when fall is detected
} else {
digitalWrite(ledPin, LOW); // Turn off LED if no fall is detected
}
delay(500); // Adjust as needed for smooth simulation
}