#include <Wire.h>
#include <SPI.h>
#include <LoRa.h>
#include <Adafruit_BMP280.h>
#include <TinyGPS++.h>
#include <MPU6050.h>
// Definição dos pinos
#define LORA_SS_PIN 5
#define LORA_RST_PIN 14
#define LORA_DI0_PIN 2
#define SERVO_PIN 13
// Objetos dos sensores
Adafruit_BMP280 bmp;
TinyGPSPlus gps;
MPU6050 mpu;
// Variáveis globais
float initialAltitude = 0;
float maxAltitude = 0;
bool parachuteDeployed = false;
struct TelemetryData {
float altitude;
float temperature;
float pressure;
float latitude;
float longitude;
float acceleration;
bool parachuteStatus;
};
void setup() {
Serial.begin(115200);
// Inicializa LoRa
LoRa.setPins(LORA_SS_PIN, LORA_RST_PIN, LORA_DI0_PIN);
if (!LoRa.begin(915E6)) {
Serial.println("LoRa init failed!");
while (1);
}
// Inicializa BMP280
if (!bmp.begin()) {
Serial.println("BMP280 init failed!");
while (1);
}
// Configura o BMP280
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500);
// Inicializa MPU6050
mpu.initialize();
// Calibração inicial
initialAltitude = bmp.readAltitude(1013.25);
}
void loop() {
TelemetryData data;
// Leitura dos sensores
data.altitude = bmp.readAltitude(1013.25) - initialAltitude;
data.temperature = bmp.readTemperature();
data.pressure = bmp.readPressure();
// Atualiza altitude máxima
if (data.altitude > maxAltitude) {
maxAltitude = data.altitude;
}
// Verifica condições para ejeção do paraquedas
if (maxAltitude - data.altitude > 10 && !parachuteDeployed) {
deployParachute();
data.parachuteStatus = true;
parachuteDeployed = true;
}
// Transmite dados via LoRa
transmitData(data);
delay(100); // Ajuste conforme necessidade
}
void transmitData(TelemetryData data) {
LoRa.beginPacket();
LoRa.print(data.altitude);
LoRa.print(",");
LoRa.print(data.temperature);
LoRa.print(",");
LoRa.print(data.pressure);
LoRa.print(",");
LoRa.print(data.parachuteStatus);
LoRa.endPacket();
}
void deployParachute() {
// Código para acionar o servo do paraquedas
// Implementar lógica de segurança adequada
}