Hi, This is just what I am trying to build, I also am using an Arduino Nano, BMP280 and MPU6050.
But then I try to use an small OLED Display just to show the max altitude and speed.
I can't code, but I try to use ChatGPT to make the code
data logging on SD card sound like an good idea to add
Here is my test setup
View attachment 631479
Here's the code for our Pro-mini based Altimeter. It records altitude data in meters, converts it to feet and writes it to an SD card. I'll post pics later.
______________________________________
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define BMP_SDA 4 // BMP280 SDA pin
#define BMP_SCL 5 // BMP280 SCL pin
#define SD_CS 3 // SD card CS pin
int Counter = 1;
int altitudeF = 1;
Adafruit_BMP280 bmp; // Create BMP280 sensor object
File dataFile; // File object to write data
float maxAltitude = -9999.0; // Initialize the maximum altitude to a very low value
void setup() {
Serial.begin(9600);
while (!Serial)
; // Wait for serial connection
if (!bmp.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
Serial.print("Initializing SD card...");
if (!SD.begin(SD_CS)) {
Serial.println("SD card initialization failed!");
while (1);
}
Serial.println("SD card initialized successfully.");
dataFile = SD.open("data.csv", FILE_WRITE);
if (!dataFile) {
Serial.println("Error opening data.csv for writing.");
while (1);
}
Serial.println("Writing data to data.csv...");
dataFile.println("Counter, Altitude (m),Altitude (F),MaxAltitude (F),Temperature (Deg C),Pressure (hPa)");
dataFile.close(); //Save everything to SD
}
void loop() {
// Read temperature, pressure, and altitude from BMP280
float temperature = bmp.readTemperature();
float pressure = bmp.readPressure() / 100.0; // Convert Pa to hPa
float altitude = bmp.readAltitude(1018.5); // Assuming sea-level pressure of 1013.25 hPa
altitudeF = (altitude*3.25);
// Update maximum altitude if current altitude is higher
if (altitudeF > maxAltitude) {
maxAltitude = altitudeF;
}
// Print the data to serial monitor
Serial.print("Counter: " );
Serial.print(Counter);
Serial.print(" Altitude: (m)" );
Serial.print(altitude);
Serial.print(" Altitude: (Ft)" );
Serial.print(altitudeF);
Serial.print(" Max Altitude: (Ft) ");
Serial.print(maxAltitude);
Serial.print(" Temperature: Deg C ");
Serial.print(temperature);
Serial.print(" Pressure: kPa ");
Serial.println(pressure);
// Write the data to the SD card
dataFile = SD.open("data.csv", FILE_WRITE);
dataFile.print(Counter);
dataFile.print(",");
dataFile.print(altitude);
dataFile.print(",");
dataFile.print(altitudeF);
dataFile.print(",");
dataFile.print(maxAltitude);
dataFile.print(",");
dataFile.println(temperature);
// dataFile.print(",");
// dataFile.println(pressure);
dataFile.close(); //Save everything to SD
Counter = Counter + 1;
// Delay before taking the next reading
delay(100);
}