#define BLYNK_TEMPLATE_ID "TMPL3I8X2jIUU"
#define BLYNK_TEMPLATE_NAME "Earthquake Alert"
#define BLYNK_AUTH_TOKEN "oLryH3aqHhrDAztuliToxVhBpo9SoPpp"
#define BLYNK_PRINT Serial
#define pinBuzzer 2
#define greenLED 4
#define redLED 5
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
void myTimerEvent()
{
Blynk.virtualWrite(V2, millis() / 1000);
}
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(pinBuzzer, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
timer.setInterval(1000L, myTimerEvent); //Staring a timer
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("");
delay(100);
}
void loop()
{
detect();
timer.run();
}
void detect(){
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
int acX = a.acceleration.x;
int acY = a.acceleration.y;
int acZ = a.acceleration.z;
if (millis() / 1000 % 10 == 0) {
acX = 1000;
acY = 1000;
acZ = 1000;
}
String v = ",";
String x = String(acX);
String y = String(acY);
String z = String(acZ);
if(acX && acY && acZ > 0){
ledcAttachPin(pinBuzzer, 0);
ledcWriteTone(0, 1000);
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
Serial.println("Machine in bad condition !!! "+ x + v + y+ v + z);
Serial.println("");
Blynk.virtualWrite(V0, "Machine in bad condition !!!");
Blynk.virtualWrite(V1, 1);
}else{
ledcDetachPin(pinBuzzer);
Serial.println("SAFE "+ x + v + y+ v + z);
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
Serial.println("");
Blynk.virtualWrite(V0, "SAFE");
Blynk.virtualWrite(V1, 1);
}
delay(1500);
Blynk.run();
}