#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <WiFi.h>
#include <HTTPClient.h>
Adafruit_MPU6050 mpu;
HTTPClient http;
int ledPin = 13;
void setup(void) {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
while (!Serial)
delay(10); // Aguarda a abertura da porta serial
Serial.print("Conectando-se ao Wi-Fi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
digitalWrite(ledPin, HIGH);
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Serial.println("");
delay(100);
}
void sendAlert() {
http.begin("http://15.228.12.218/api/send-alert?message=So%20ti%C3%A3o%20caiu");
int httpCode = http.GET();
Serial.print("HTTP Code: ");
Serial.println(httpCode);
delay(10000);
}
void loop() {
sensors_event_t event;
mpu.getAccelerometerSensor()->getEvent(&event);
// Converte as leituras para valores em g
float accelerationX = event.acceleration.x;
float accelerationY = event.acceleration.y;
float accelerationZ = event.acceleration.z;
// Cálculo da magnitude da aceleração em g
float magnitude = sqrt(accelerationX * accelerationX +
accelerationY * accelerationY +
accelerationZ * accelerationZ);
Serial.print("Magnitude:");
Serial.print(magnitude);
Serial.print("\nAcceleration X: ");
Serial.print(accelerationX);
Serial.print(", Y: ");
Serial.print(accelerationY);
Serial.print(", Z: ");
Serial.print(accelerationZ);
Serial.println(" m/s^2");
static boolean fallDetected = false;
static unsigned long lastFallTime = 0;
const float thresholdFall = 10; // Limite para detecção de queda m/s^2
const unsigned long fallDuration = 1000; // Duração da queda em milissegundos
if (!fallDetected) {
// Verifica se a magnitude da aceleração está acima do limite de queda (em g)
if (magnitude > thresholdFall) {
// Queda detectada, marque o tempo
lastFallTime = millis();
fallDetected = true;
}
} else {
// Se uma queda foi detectada, verifique se houve desaceleração
if (magnitude < thresholdFall) {
// Verifica se a queda durou o tempo mínimo necessário
if (millis() - lastFallTime >= fallDuration) {
// Queda confirmada, realize a ação desejada aqui
Serial.println("Queda detectada!");
sendAlert();
// Você pode adicionar sua ação de saída aqui, como acender um LED ou enviar um sinal Wi-Fi
fallDetected = false; // Reinicie a detecção de queda
}
}
}
Serial.println("");
delay(500);
}