Senzor barometrického tlaku BMP180 (označení modulu GY-68) od firmy Bosch je Arduino modul, který je levnější a méně přesnou variantou senzoru BMP085. Kromě přesnosti se ale jedná o téměř totožné senzory, takže i BMP180 umožňuje kromě měření tlaku taktéž měření teploty. S pomocí hodnot naměřených z obou senzorů pak lze získat také informace o aktuální nadmořské výšce. Modul BMP180 je tedy opět vhodný do různých zapojení, kdy je třeba měřit okolní barometrický tlak a současně s tím můžeme také měřit teplotu a ušetřit tak jeden modul. Podle informací výrobce je možné měřit tlak v rozsahu 300 až 1100 hPa (hekto Pascalů), což odpovídá po přepočtu nadmořské výšce +9000m až -500m. Typická přesnost je pak -4 až +2 hPa. Okolní teplotu je možné pomocí senzoru BMP180 měřit v rozsahu 0 až +65 stupňů Celsia s přesností ±2 °C.
Pro úspěšné propojení senzoru BMP180 s Arduino deskou je nutné propojit 4 vodiče. Propojíme SDA na pin A4, SCL na pin A5 (tyto piny platí pro I2C rozhraní Uno desky), GND na zem Arduina a VIN na pin +3V3. Oproti BMP085 je tedy nutné využít pouze napájení 3V3, jinak dojde ke zničení modulu.
Pro správné přeložení a nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu BMP085, která funguje také pro náš modul BMP180, návod jak na importování je uveden zde. Ukázkový kód obsahuje na začátku připojení potřebných knihoven a jako další krok inicializaci senzoru BMP180 z knihovny BMP085. Následně si vytvoříme konstantu korekce, která bude vysvětlena později. V podprogramu setup si pouze nastavíme rychlost komunikace po sériové lince a zapneme komunikaci se senzorem BMP180. V nekonečné smyčce loop pak postupně vytiskneme po sériové lince informace z připojeného senzoru. Jako první je vytištěna teplota ve stupních Celsia a následně je vypsán barometrický tlak. Do výpisu hodnoty jsem pak přímo započítal korekci, kdy toto číslo nejprve přičteme v milibarech (vynásobené 100) a celkový tlak pak vydělíme 100 pro získání tlaku v hekto Pascalech. Jako poslední je vypsána nadmořská výška, která se vypočte z naměřeného tlaku opět s připočtenou korekcí. Na konci programu se nachází už jen pauza pro přehlednější výpis.
// Senzor barometrického tlaku Bosch BMP180 // připojení knihoven Wire a BMP085 #include <Wire.h> #include <Adafruit_BMP085.h> // inicializace senzoru BMP180 z knihovny BMP085 Adafruit_BMP085 bmp180; // konstanta s korekcí měření v hPa int korekce = 32; void setup() { // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // zapnutí komunikace se senzorem BMP180 bmp180.begin(); } void loop() { // výpis teploty ve stupních Celsia Serial.print("Teplota: "); Serial.print(bmp180.readTemperature()); Serial.println(" stupnu Celsia"); // výpis barometrického tlaku v hekto Pascalech Serial.print("Barometricky tlak: "); Serial.print((bmp180.readPressure() + korekce*100)/100.00); Serial.println(" hPa"); // výpis nadmořské výšky při započítání // běžné hodnoty tlaku 1013,25 hekto Pascalů Serial.print("Nadmorska vyska prepoctena: "); Serial.print(bmp180.readAltitude(bmp180.readPressure() + korekce*100)); Serial.println(" metru "); Serial.println("------------------------------"); // pauza pro přehlednější výpis delay(2000); }
Po nahrání programu do Arduino desky s připojeným senzorem BMP180 dostaneme například tento výpis:
------------------------------ Teplota: 25.90 stupnu Celsia Barometricky tlak: 1026.18 hPa Nadmorska vyska prepoctena: 266.45 metru ------------------------------ Teplota: 25.90 stupnu Celsia Barometricky tlak: 1026.19 hPa Nadmorska vyska prepoctena: 266.70 metru ------------------------------ Teplota: 25.90 stupnu Celsia Barometricky tlak: 1026.17 hPa Nadmorska vyska prepoctena: 266.28 metru ------------------------------
Senzor barometrického tlaku a teploty BMP180 je v porovnání s dražší variantou BMP085 stále dobře použitelný, kdy bych doporučoval ho používat pouze jako senzor tlaku, protože přítomné teplotní čidlo nevyniká příliš velkou přesností. V porovnání s měřením teploty senzorem DHT22 se totiž výsledek liší i v několika stupních Celsia. A vzhledem k tomu, že pro výpočet nadmořské výšky je třeba jak tlaku, tak teploty, je výsledek zatížen poměrně velkou chybou. Jako poznámku bych rád uvedl svoji zkušenost, kdy po delším používání jsem při porovnání s hodnotami naměřeného tlaku meteorologickou stanicí v okolí zjistil konstantní rozdíl mezi mnou a stanicí naměřenou hodnotou tlaku. Tento konstantní rozdíl činil v mém případě 32 hPa, stačilo tedy tuto hodnotu vždy přičíst k mé naměřené a výsledkem byly hodnoty odpovídající udávaným meteorologickou stanicí. A pro ověření naměřené nadmořské výšky lze použít tuto mapu.
Seznam použitých komponent:
http://dratek.cz/arduino-vstupni-periferie/838-arduino-mereni-tlaku.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/1227-7-ks-mini-nepajive-pole-25-kontaktu-1458405292.html
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1063-arduino-vodice-samec-samec-40-kusu.html