#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
// Pins
const int FAN_LED = 2;
const int LIGHT_LED = 4;
const int DOOR_LED = 5;
const int BUZZER = 18;
// Variables
int16_t ax, ay, az;
bool fanOn = false;
bool lightOn = false;
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
pinMode(FAN_LED, OUTPUT);
pinMode(LIGHT_LED, OUTPUT);
pinMode(DOOR_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
mpu.initialize();
if (!mpu.testConnection()) {
Serial.println("MPU6050 failed");
while (1);
}
}
void loop() {
mpu.getAcceleration(&ax, &ay, &az);
// 🔥 JSON Output for Dashboard
Serial.print("{");
Serial.print("\"ax\":"); Serial.print(ax); Serial.print(",");
Serial.print("\"ay\":"); Serial.print(ay); Serial.print(",");
Serial.print("\"az\":"); Serial.print(az); Serial.print(",");
Serial.print("\"fan\":"); Serial.print(fanOn ? "true" : "false"); Serial.print(",");
Serial.print("\"light\":"); Serial.print(lightOn ? "true" : "false");
Serial.println("}");
// Gesture control
if (ax < -10000) {
fanOn = true;
digitalWrite(FAN_LED, HIGH);
} else if (ax > 10000) {
fanOn = false;
digitalWrite(FAN_LED, LOW);
}
if (ay > 12000) {
lightOn = true;
digitalWrite(LIGHT_LED, HIGH);
} else if (ay < -12000) {
lightOn = false;
digitalWrite(LIGHT_LED, LOW);
}
// Door stable
if (abs(ax) < 1000 && abs(ay) < 1000 && abs(az - 16384) < 1000) {
digitalWrite(DOOR_LED, HIGH);
} else {
digitalWrite(DOOR_LED, LOW);
}
// Shake buzzer
if (abs(ax) > 15000 || abs(ay) > 15000 || abs(az - 16384) > 8000) {
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
delay(200);
}