#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
const int ledPin = 13;
const int buzzerPin = 12;
const float smallQuake = 0.5;
const float mediumQuake = 0.8;
const float largeQuake = 1.2;
float prevAccel = 0;
unsigned long lastCheck = 0;
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
mpu.initialize();
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
if (mpu.testConnection()) {
Serial.println("MPU6050 connected.");
} else {
Serial.println("MPU6050 connection failed.");
}
}
void loop() {
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
float accelX = ax / 16384.0;
float accelY = ay / 16384.0;
float accelZ = az / 16384.0;
float totalAccel = sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ);
Serial.print("Total Accel: ");
Serial.println(totalAccel);
float delta = totalAccel - prevAccel;
if (delta > 0.3 && millis() - lastCheck > 500) {
Serial.println("⚠️ PERINGATAN: Guncangan mendekat!");
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 800, 200);
delay(200);
digitalWrite(ledPin, LOW);
lastCheck = millis();
}
if (totalAccel > largeQuake) {
Serial.println("‼️ Guncangan BESAR!");
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 1000, 500);
delay(500);
noTone(buzzerPin);
digitalWrite(ledPin, LOW);
} else if (totalAccel > mediumQuake) {
Serial.println("⚠️ Guncangan SEDANG!");
digitalWrite(ledPin, HIGH);
tone(buzzerPin, 1000, 300);
delay(300);
digitalWrite(ledPin, LOW);
} else if (totalAccel > smallQuake) {
Serial.println("🔸 Guncangan KECIL");
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, LOW);
noTone(buzzerPin);
}
prevAccel = totalAccel;
delay(100);
}