Hello everyone,
I use a ms5611 pressure sensor to make an altimeter. In the datasheet I read that this sensor had an accuracy of +/- 10cm. But whatever the tests and the library used, I never reached this precision. I am rather around +/- 1m with my code.
#include <MS5611.h> //https://github.com/gronat/MS5611
#define MOVAVG_SIZE 32
MS5611 baro;
int32_t pressure; // in Pascal
//const float sea_press = 101325; // in Pascal
int32_t QNH; //Calcul du QNH en fonction de l'alti du GPS
int32_t temperature;
float movavg_buff[MOVAVG_SIZE];
int movavg_i=0;
//################### SETUP
void setup() {
// Start barometer
baro = MS5611();
baro.begin();
// populate movavg_buff before starting loop
for(int i=0; i<MOVAVG_SIZE; i++) {
movavg_buff[i] = baro.getPressure();
}
// Start serial (UART)
Serial.begin(115200);
delay(2);
// Read pressure pour calculer le QNH (Pascal)
pressure = (baro.getPressure());
pushAvg(pressure);
pressure=getAvg(movavg_buff, MOVAVG_SIZE);
QNH=sea_pressure(pressure,188);
return QNH;
}
//############################### LOOP
void loop() {
// Read pressure (Pascal)
pressure = (baro.getPressure());
pushAvg(pressure);
pressure=getAvg(movavg_buff, MOVAVG_SIZE);
// Read temperature (°C x100)
temperature = (baro.getTemperature());
// Print les data
//Serial.println(pressure);
//Serial.println(temperature);
//Serial.println(QNH);
Serial.println(getAltitude(pressure,temperature,QNH));
}
//################################# FONCTIONS
float getAltitude(float press, float temp, float sea_pressure) {
return ((pow((sea_pressure / press), 1/5.257) - 1.0) * (temp*0.01 + 273.15)) / 0.0065;
}
// Enregistre un echantillon de pression
void pushAvg(float val) {
movavg_buff[movavg_i] = val;
movavg_i = (movavg_i + 1) % MOVAVG_SIZE;
}
// Retourne la moyenne des echantillons de pression
float getAvg(float * buff, int size) {
float sum = 0.0;
for(int i=0; i<size; i++) {
sum += buff[i];
}
return sum / size;
}
// Calcul le QNH
float sea_pressure (float press, float GPS_alti){
return (press/pow(1-(GPS_alti/44330.0),5.255));}
Have you already obtained such precision +/-10cm ? Or at least better than +/- 1m?
Thank you very much