In this example we look at the MS5611 barometric pressure sensor
This barometric pressure sensor is optimized for altimeters and variometers with an altitude resolution of 10 cm. The sensor module includes a high linearity pressure sensor and an ultra-low power 24 bit ΔΣ ADC with internal factory calibrated coefficients. It provides a precise digital 24 Bit pressure and temperature value and different operation modes that allow the user to optimize for conversion speed and current consumption. A high resolution temperature output allows the implementation of an altimeter/thermometer function without any additional sensor.
features
- High resolution module, 10 cm
- Fast conversion down to 1 ms
- Low power, 1 µA (standby < 0.15 µA)
- QFN package 5.0 x 3.0 x 1.0 mm3
- Supply voltage 1.8 to 3.6 V
- Integrated digital pressure sensor (24 bit ΔΣ ADC)
- Operating range: 10 to 1200 mbar, -40 to +85 °C
- I2C and SPI interface up to 20 MHz
- No external components (Internal oscillator)
- Excellent long term stability
Connection
Wemos | Module connection |
3.3v | Vcc |
Gnd | Gnd |
SCL | SCL |
SDA | SDA |
Code
This example is adapted from the https://github.com/jarzebski/Arduino-MS5611 library
[codesyntax lang=”cpp”]
#include <Wire.h> #include <MS5611.h> MS5611 ms5611; double referencePressure; void setup() { Serial.begin(9600); // Initialize MS5611 sensor Serial.println("Initialize MS5611 Sensor"); while(!ms5611.begin()) { Serial.println("Could not find a valid MS5611 sensor, check wiring!"); delay(500); } // Get reference pressure for relative altitude referencePressure = ms5611.readPressure(); // Check settings checkSettings(); } void checkSettings() { Serial.print("Oversampling: "); Serial.println(ms5611.getOversampling()); } void loop() { // Read raw values uint32_t rawTemp = ms5611.readRawTemperature(); uint32_t rawPressure = ms5611.readRawPressure(); // Read true temperature & Pressure double realTemperature = ms5611.readTemperature(); long realPressure = ms5611.readPressure(); // Calculate altitude float absoluteAltitude = ms5611.getAltitude(realPressure); float relativeAltitude = ms5611.getAltitude(realPressure, referencePressure); Serial.println("--"); Serial.print(" rawTemp = "); Serial.print(rawTemp); Serial.print(", realTemp = "); Serial.print(realTemperature); Serial.println(" *C"); Serial.print(" rawPressure = "); Serial.print(rawPressure); Serial.print(", realPressure = "); Serial.print(realPressure); Serial.println(" Pa"); Serial.print(" absoluteAltitude = "); Serial.print(absoluteAltitude); Serial.print(" m, relativeAltitude = "); Serial.print(relativeAltitude); Serial.println(" m"); delay(1000); }
[/codesyntax]
Output
Open the serial monitor and you will see something like this
Temp = 25.85 *C
Pressure = 101704 Pa
absoluteAltitude = -31.51 m, relativeAltitude = -0.75 m
—
Temp = 27.66 *C
Pressure = 101710 Pa
absoluteAltitude = -32.00 m, relativeAltitude = -1.24 m
—
Temp = 28.35 *C
Pressure = 101703 Pa
absoluteAltitude = -31.42 m, relativeAltitude = -0.66 m
—
Temp = 27.80 *C
Pressure = 101693 Pa
absoluteAltitude = -30.59 m, relativeAltitude = 0.17 m
—
Temp = 27.47 *C
Pressure = 101687 Pa
absoluteAltitude = -30.09 m, relativeAltitude = 0.66 m
Link
GY-63 MS5611-01BA03 Precision MS5611 Atmospheric Pressure Sensor Module Height Sensor Module