Czujnik Ciśnienia I Temperatury MS5611 - Dev/Jarzębski
Maybe your like
MS5611 jest czujnikiem ciśnienia atmosferycznego i temperatury firmy Measurement Specialties, charakteryzują się pomiarem ciśnienia w zakresie 10 ÷ 1200 hPa oraz temperatury w zakresie -40 ÷ 85°C.
Jego ogromną zaletą jest 24-bitowy przetwornik ADC, który pozwala na podstawie pomiaru ciśnienia określić wysokość z dokładnością do 10cm. Typowe napięcie zasilania to 1.8 ÷ 3.6 V przy poborze prądu wynoszącym zaledwie 1μA. W zależności od wybranej dokładności pomiaru (liczba wykonywanych próbek od 256 ÷ 4096), czas odpowiedzi układu wynosi 1 ÷ 10 ms.

Pełna karta katalogowa MS5611: https://www.jarzebski.pl/datasheets/MS5611.pdf
Obliczanie wysokości na podstawie pomiaru ciśnienia atmosferycznego
Znając ciśnienie jakie panuje na poziomie morza p0 (np.: 1013.25 hPa) oraz pomiar p, możemy określić aktualną wysokość, wyliczając ją z poniższego wzoru.

Zależność pomiędzy wysokością a ciśnieniem przedstawia poniższa charakterystyka, z której wynika, że zmiana ciśnienia Δp = 1 hPa odpowiada wysokości Δh = 8.43 m. Natomiast zmiana wysokości Δh = 10 m odpowiada zmianie ciśnienia Δp = 1 2hPa

Połączenie z Arduino
Na rynku istnieje kilka gotowych modułów z czujnikami MS5611, które różnią się one przede wszystkim poziomem napięcia zasilania. Najczęściej są to moduły zasilane napięciem 3.3V. W moim przypadku skorzystam z modułu IMU GY-86, który może być zasilany napięciem zarówno 5V jak i 3.3V. Jeśli zdecydujemy się na zasilanie 5V należy zwrócić szczególną uwagę na podłączenie do odpowiedniego pinu, podłączenie do pinu oznaczonego 3.3V może spowodować jego uszkodzenie. Pin oznaczony SCL (adapter) podłączamy do pinu A5 (Arduino), natomiast pin SDA (adapter) do pinu A4 (Arduino). Nie zapomnijmy również o masie GND.

Przykładowy program
Do obsługi modułów z układami MS5611 przygotowałem bibliotekę dla Arduino, którą można pobrać z repozytorium Git: https://github.com/jarzebski/Arduino-MS5611
- #include <Wire.h>
- #include <MS5611.h>
- MS5611 ms5611;
- double referencePressure;
- void setup()
- {
- Serial.begin(9600);
- // Inicjalizacja MS5611
- Serial.println("Inicjalizacja MS5611 Sensor");
- // Ultra high resolution: MS5611_ULTRA_HIGH_RES
- // (default) High resolution: MS5611_HIGH_RES
- // Standard: MS5611_STANDARD
- // Low power: MS5611_LOW_POWER
- // Ultra low power: MS5611_ULTRA_LOW_POWER
- while(!ms5611.begin(MS5611_HIGH_RES))
- {
- Serial.println("Nie mozna znalezc czujnika MS5611, sprawdz polaczenie!");
- delay(500);
- }
- // Pobieramy poczatkowe cisnienie do okreslenia wysokosci
- referencePressure = ms5611.readPressure();
- // Sprawdzamy ustawienia
- checkSettings();
- }
- void checkSettings()
- {
- Serial.print("Oversampling: ");
- Serial.println(ms5611.getOversampling());
- }
- void loop()
- {
- // Odczyt surowych wartosci
- uint32_t rawTemp = ms5611.readRawTemperature();
- uint32_t rawPressure = ms5611.readRawPressure();
- // Odczyt przekonwertowanych wartosci
- double realTemperature = ms5611.readTemperature();
- long realPressure = ms5611.readPressure();
- // Obliczanie wysokosci
- float absoluteAltitude = ms5611.getAltitude(realPressure);
- float relativeAltitude = ms5611.getAltitude(realPressure, referencePressure);
- // Wyswietlenie wynikow
- 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);
- }

Wizualizacja w Processing i kompensacja
Biblioteka pozwala również na obliczenie skompensowanych wartości dla temperatur poniżej 20°C i -15°C dodając do funkcji odczytujących parametr true. Poniżej znajduje się program, zwracający wyniki dla programu Processing, za pomocą którego będziemy mogli zobaczyć wyniki zarówno nieskompensowane jak i skompensowane.
- #include <Wire.h>
- #include <MS5611.h>
- MS5611 ms5611;
- void setup()
- {
- Serial.begin(115200);
- // Initialize MS5611 sensor
- // Ultra high resolution: MS5611_ULTRA_HIGH_RES
- // (default) High resolution: MS5611_HIGH_RES
- // Standard: MS5611_STANDARD
- // Low power: MS5611_LOW_POWER
- // Ultra low power: MS5611_ULTRA_LOW_POWER
- while(!ms5611.begin(MS5611_ULTRA_HIGH_RES))
- {
- delay(500);
- }
- }
- void loop()
- {
- // Odczyt wartosci nieskompensowanych
- double realTemperature = ms5611.readTemperature();
- long realPressure = ms5611.readPressure();
- double realAltitude = ms5611.getAltitude(realPressure);
- // Odczyt wartosci skompensowanych
- double realTemperature2 = ms5611.readTemperature(true);
- long realPressure2 = ms5611.readPressure(true);
- double realAltitude2 = ms5611.getAltitude(realPressure2);
- // Wyjscie
- Serial.print(realTemperature);
- Serial.print(":");
- Serial.print(realTemperature2);
- Serial.print(":");
- Serial.print(realPressure);
- Serial.print(":");
- Serial.print(realPressure2);
- Serial.print(":");
- Serial.print(realAltitude);
- Serial.print(":");
- Serial.print(realAltitude2);
- Serial.println();
- }

Prezentacja YouTube
Materiały dodatkowe
Biblioteka dla Arduino: https://github.com/jarzebski/Arduino-MS5611Pełna karta katalogowa MS5611: https://www.jarzebski.pl/datasheets/MS5611.pdf
Tag » Arduino Ms5611 Sketch
-
Arduino Atmospheric Tape Measure/ MS5611 GY63 GY86 ...
-
MS5611 - Arduino Reference
-
MS5611 Barometric Pressure & Temperature Sensor Arduino Library
-
Arduino Library For MS5611 Temperature And Pressure Sensor - GitHub
-
Interfacing MS5611 Barometric Pressure Sensor With Arduino
-
MS5611-01BA01 High Resolution Pressure Sensor With Arduino And ...
-
Arduino Atmospheric Tape Measure/ MS5611 GY63 ... - Trybotics
-
GY-63 MS5611 Pressure Temperature Sensor Module - ProtoSupplies
-
Create A Simple Barometer Using An ESP8266 And A MS5611 Sensor
-
HDC1080 And MS5611 Sensors - Arduino For STM32
-
Wavgat Gy-68 Gy-63 Bmp180 Bmp280 Gy68 Digital Barometric ...
-
MS5611-01BA Arduino Library: First Developments Results
-
Ms5611 Archives - WildLab