Libraries :
- Adafruit BMP280 Library (for BMP280)
- Adafruit Sensor Library MPU6050 by Electronic Cats (or MPU6050_simple)
- SD Library (part of Arduino IDE)
Code:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <SD.h>
#include <MPU6050_light.h>
// BMP280 setup
Adafruit_BMP280 bmp;
// MPU6050 setup
MPU6050 mpu(Wire);
// SD card setup
const int chipSelect = 10;
void setup() {
Serial.begin(9600);
Wire.begin();
// BMP280 initialization
if (!bmp.begin(0x76)) {
Serial.println(„BMP280 not detected!“);
while (1);
}
// MPU6050 initialization
if (mpu.begin() != 0) {
Serial.println(„MPU6050 not detected!“);
while (1);
}
mpu.calcGyroOffsets();
// SD card initialization
if (!SD.begin(chipSelect)) {
Serial.println(„SD Card initialization failed!“);
while (1);
}
Serial.println(„SD Card initialized.“);
}
void loop() {
// BMP280 – Measure altitude
float altitude = bmp.readAltitude(1013.25); // Adjust sea level pressure as needed
// MPU6050 – Measure tilt and acceleration
mpu.update();
float accX = mpu.getAccX();
float accY = mpu.getAccY();
float accZ = mpu.getAccZ();
float angleX = mpu.getAngleX();
float angleY = mpu.getAngleY();
float angleZ = mpu.getAngleZ();
// Save data to SD card
File dataFile = SD.open(„data.txt“, FILE_WRITE);
if (dataFile) {
dataFile.print(„Altitude: „);
dataFile.print(altitude);
dataFile.print(“ m, AccX: „);
dataFile.print(accX);
dataFile.print(“ m/s^2, AccY: „);
dataFile.print(accY);
dataFile.print(“ m/s^2, AccZ: „);
dataFile.print(accZ);
dataFile.print(“ m/s^2, AngleX: „);
dataFile.print(angleX);
dataFile.print(„°, AngleY: „);
dataFile.print(angleY);
dataFile.print(„°, AngleZ: „);
dataFile.println(angleZ);
dataFile.close();
} else {
Serial.println(„Error opening data.txt“);
}
delay(100); // Adjust sampling rate as needed
}