#include <Wire.h>
#include <MPU6050.h>
#include <LiquidCrystal_I2C.h> // Library untuk LCD dengan koneksi I2C
MPU6050 mpu;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, 16 kolom dan 2 baris
const int relayPin = 2; // Pin untuk mengontrol relay
const int buzzerPin = 3; // Pin untuk mengontrol buzzer
const int threshold = 500; // Ambang batas untuk mendeteksi gempa, sesuaikan sesuai kebutuhan Anda
void setup() {
Serial.begin(9600);
pinMode(relayPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Inisialisasi sensor MPU6050
Wire.begin();
mpu.initialize();
// Verifikasi koneksi sensor MPU6050
Serial.println(mpu.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
// Inisialisasi LCD
lcd.init();
lcd.backlight(); // Aktifkan backlight LCD
// Menampilkan pesan selamat datang
lcd.setCursor(0, 0);
lcd.print("Gempa Detector");
delay(2000);
lcd.clear();
}
void loop() {
// Baca data akselerometer
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
// Hitung total percepatan
int totalAcceleration = abs(ax) + abs(ay) + abs(az);
// Cek apakah total percepatan melebihi ambang batas
if (totalAcceleration > threshold) {
Serial.println("Gempa terdeteksi!");
// Aktifkan relay
digitalWrite(relayPin, HIGH);
// Aktifkan buzzer
digitalWrite(buzzerPin, HIGH);
delay(500); // Durasi bunyi buzzer (0.5 detik)
digitalWrite(buzzerPin, LOW);
delay(500); // Tunggu sebentar sebelum mengaktifkan buzzer kembali
// Tunggu beberapa detik sebelum mematikan relay
delay(5000);
digitalWrite(relayPin, LOW);
// Tampilkan pesan pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gempa Terdeteksi!");
delay(2000);
lcd.clear();
} else {
// Jika tidak ada gempa yang terdeteksi
delay(1500); // Tambahkan delay sebelum pesan "Gempa tidak terdeteksi"
Serial.println("Gempa tidak terdeteksi");
// Tampilkan pesan pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Gempa Tidak");
lcd.setCursor(0, 1);
lcd.print("Terdeteksi");
delay(2000);
lcd.clear();
}
delay(100); // Delay untuk mengurangi beban CPU
}