#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MPU6050.h>
#include <DHT.h>
#define DHTPIN 7
#define DHTTYPE DHT22
#define BUZZER 12
#define LED 13
LiquidCrystal_I2C lcd(0x27, 16, 2);
MPU6050 mpu;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Wire.begin();
lcd.begin(16, 2);
lcd.backlight();
pinMode(BUZZER, OUTPUT);
pinMode(LED, OUTPUT);
dht.begin();
mpu.initialize();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("QuakeEye Ready");
for (int i = 0; i < 3; i++) {
lcd.setCursor(7, 1);
lcd.print("O");
delay(400);
// half-close
lcd.setCursor(7, 1);
lcd.print("-");
delay(200);
lcd.setCursor(7, 1);
lcd.print("_");
delay(300);
}
lcd.setCursor(7, 1);
lcd.print("O");
delay(300);
lcd.clear();
unsigned long startTime = millis();
while (millis() - startTime < 4000) {
lcd.setCursor(0, 0);
lcd.print("CALIBRATING.");
delay(400);
lcd.setCursor(0, 0);
lcd.print("CALIBRATING..");
delay(400);
lcd.setCursor(0, 0);
lcd.print("CALIBRATING...");
delay(400);
lcd.setCursor(0, 0);
lcd.print("CALIBRATING ");
delay(400);
}
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("CALIBRATION");
lcd.setCursor(6, 1);
lcd.print("DONE");
for (int i = 0; i < 2; i++) {
digitalWrite(LED, HIGH);
tone(BUZZER, 1000);
delay(300);
digitalWrite(LED, LOW);
noTone(BUZZER);
delay(300);
}
lcd.clear();
}
void loop() {
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
int X = ax / 100;
int Y = ay / 100;
int Z = az / 100;
int hum = (int)dht.readHumidity();
int temp = (int)dht.readTemperature();
lcd.setCursor(0, 0);
lcd.print("X:");
lcd.print(X);
lcd.print(" Y:");
lcd.print(Y);
lcd.print(" Z:");
lcd.print(Z);
lcd.print(" ");
if (X >= 0 && X <= 0 && Y >= 0 && Y <= 0 && Z >= 0 && Z <= 0)
{
noTone(BUZZER);
digitalWrite(LED, LOW);
lcd.setCursor(0, 1);
lcd.print("Safe ");
lcd.print("H:");
lcd.print(hum);
lcd.print("% T:");
lcd.print(temp);
lcd.print((char)223);
lcd.print("C");
}
else {
tone(BUZZER, 1000);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("EARTHQUAKE");
String frames[] = {"< ALERT >", "<<ALERT>>", "> ALERT <", ">>ALERT<<"};
int ledStates[] = {HIGH, HIGH, LOW, LOW}; // LED state for each frame
for (int i = 0; i < 2; i++) { // repeat animation twice
for (int j = 0; j < 4; j++) {
lcd.setCursor(4, 1);
lcd.print(frames[j]);
digitalWrite(LED, ledStates[j]);
delay(200);
}
}
noTone(BUZZER);
delay(100);
}
delay(500);
}
Comments