#include <WiFi.h>
#include <Wire.h>
#include <HTTPClient.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
// WiFi (Wokwi or real)
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak
String apiKey = "YOUR_API_KEY";
const char* server = "http://api.thingspeak.com/update";
// MPU6050
Adafruit_MPU6050 mpu;
// Variables
float speed = 0;
float dt = 0.1; // time interval
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
// WiFi connect
WiFi.begin(ssid, password);
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected!");
// MPU6050 init
if (!mpu.begin()) {
Serial.println("MPU6050 not found!");
while (1);
}
Serial.println("MPU6050 Ready!");
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
float accX = a.acceleration.x;
float accY = a.acceleration.y;
float accZ = a.acceleration.z;
float gyroX = g.gyro.x;
float gyroY = g.gyro.y;
float gyroZ = g.gyro.z;
// 🚗 TURN DETECTION
String turn = "Straight";
if (gyroZ > 1.2) turn = "Right";
else if (gyroZ < -1.2) turn = "Left";
// 🚨 BRAKING
String brake = "No Brake";
if (accY < -6) brake = "Hard Brake";
else if (accY < -3) brake = "Normal Brake";
// ⚠️ TILT (Roll & Pitch)
float roll = atan2(accY, accZ) * 180 / PI;
float pitch = atan2(-accX, sqrt(accY*accY + accZ*accZ)) * 180 / PI;
String tilt = "Normal";
if (abs(roll) > 25 || abs(pitch) > 25) tilt = "Tilt Detected";
// 🔄 ORIENTATION CHANGE
String orientation = "Stable";
if (abs(gyroX) > 1.5 || abs(gyroY) > 1.5)
orientation = "Changed";
// ⚡ SPEED (approx)
speed = speed + (accY * dt);
// 📊 Print data
Serial.println("----- DATA -----");
Serial.print("Turn: "); Serial.println(turn);
Serial.print("Brake: "); Serial.println(brake);
Serial.print("Tilt: "); Serial.println(tilt);
Serial.print("Orientation: "); Serial.println(orientation);
Serial.print("Speed: "); Serial.println(speed);
// 🌐 Send to ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = server;
url += "?api_key=" + apiKey;
url += "&field1=" + String(accX);
url += "&field2=" + String(accY);
url += "&field3=" + String(gyroZ);
url += "&field4=" + String(speed);
url += "&field5=" + String(roll);
url += "&field6=" + String(pitch);
http.begin(url);
int httpCode = http.GET();
Serial.print("HTTP: ");
Serial.println(httpCode);
http.end();
}
delay(15000); // ThingSpeak limit
}