Hi,
So I recently flew a model rocket with an Arduino based altimeter that I made as a payload. It is a Teensy 4.1 with a Adafruit MPL3115A2 to measure altitude. I also added a Jolly Logic altimeter 2 to compare readings. I got the data back and my homemade altimeter claimed a max altitude of 940 feet. The Jolly Logic altimeter claimed a max altitude of 888 feet. This seems like a big difference and due to the Jolly Logic altimeter being used in rocketry competitions around the world I think my
MPL3115A2 is at fault. I don't know why my altitude readings were so inaccurate and if anyone has any suggestions I would love to hear them!
Altitude data from flight
Altitude(ft):53.93
Altitude(ft):273.75
Altitude(ft):385.09
Altitude(ft):482.69
Altitude(ft):566.97
Altitude(ft):655.35
Altitude(ft):722.19
Altitude(ft):770.79
Altitude(ft):818.98
Altitude(ft):854.25
Altitude(ft):882.34
Altitude(ft):906.54
Altitude(ft):925.61
Altitude(ft):936.06
Altitude(ft):940.78
Altitude(ft):937.09
Altitude(ft):928.89
Altitude(ft):917.61
Altitude(ft):901.82
Altitude(ft):879.06
Altitude(ft):859.37
Altitude(ft):834.77
Altitude(ft):810.57
Altitude(ft):782.07
Altitude(ft):753.36
Altitude(ft):728.14
Altitude(ft):703.54
Altitude(ft):674.42
Altitude(ft):642.43
Altitude(ft):614.34
Altitude(ft):581.94
Altitude(ft):555.28
Altitude(ft):528.63
Altitude(ft):497.87
Altitude(ft):473.06
Altitude(ft):441.48
Altitude(ft):411.75
Altitude(ft):383.65
Altitude(ft):354.95
Altitude(ft):323.98
Altitude(ft):296.51
Altitude(ft):269.23
Altitude(ft):235.40
Altitude(ft):199.52
Altitude(ft):166.71
Altitude(ft):134.10
Altitude(ft):103.35
Altitude(ft):70.54
Altitude(ft):37.32
Code
type or paste code here
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
File mysensordata;
int chipSelect = BUILTIN_SDCARD;
float altitude_difference = 0;
float TimeKeeper=0;
int ledgrn = 13 ;
float Velocity = 0;
float altitudeoffset = 0;
#include "SparkFunMPL3115A2.h"
//Create an instance of the object
MPL3115A2 myPressure;
void setup()
{
pinMode (ledgrn,OUTPUT);
pinMode (10, OUTPUT);
Wire.begin(); // Join i2c bus
Serial.begin(9600); // Start serial for output
SD.begin(BUILTIN_SDCARD);
myPressure.begin(); // Get sensor online
//Configure the sensor
myPressure.setModeAltimeter(); // Measure altitude above sea level in meters
//myPressure.setModeBarometer(); // Measure pressure in Pascals from 20 to 110 kPa
myPressure.setOversampleRate(7); // Set Oversample to the recommended 128
myPressure.enableEventFlags(); // Enable all three pressure and temp event flags
float pressure = myPressure.readPressure();
float altitude = myPressure.readAltitudeFt();
altitudeoffset = (altitude);
float Altitude_true = altitude-altitudeoffset;
if(Altitude<= -10) {
digitalWrite(ledgrn, HIGH);
}
}
void loop()
{
mysensordata=SD.open("ttT.txt" , FILE_WRITE);
float pressure = myPressure.readPressure();
float Altitude_true = myPressure.readAltitudeFt() -altitudeoffset;
float (alt_past) = Altitude_true;
{
delay(50);
float pressure = myPressure.readPressure();
float Altitude_true = myPressure.readAltitudeFt()-altitudeoffset;
float (alt_present) = Altitude_true;
altitude_difference = alt_present - alt_past;
}
Velocity=((altitude_difference + 0.05)/0.333);
float temperature = myPressure.readTempF();
pressure = myPressure.readPressure();
Serial.println(Altitude_true, 2);
Serial.print(Velocity);
Serial.print(temperature, 2);
Serial.print(pressure, 2);
mysensordata.print(" Altitude(ft):");
mysensordata.print(Altitude_true, 2);
mysensordata.print("Pressure(Pa):");
mysensordata.print(pressure, 2);
mysensordata.print("Velocity is");
mysensordata.print(Velocity);
mysensordata.print(" Temp(c):");
mysensordata.println(temperature, 2);
mysensordata.close();
`Preformatted text````