Adafruit MPL3115A2 not giving accurate readings

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````

Did you calibrate your sensor?

Sorry my bad I was reading the Jolly logic altimeter wrong, actual altitude is 932 feet. Thanks for the replies and sorry for my mistake.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.