基於arduino的氣象站

2022-08-05 11:54:12 字數 2369 閱讀 7710

bmp180的簡介:

• 壓力範圍:300~1100hpa(海拔 9000 米~-500

米)• 電源電壓:

1.8v~3.6v(vdda), 1.62v~3

.6v(vddd)

• 尺寸:

3.6mmx3.8x0.93mm

• 低功耗:5μa,在標準模式

• 高精度:低功耗模式下,解析度為

0.06hpa(0.5

米)• 高線性模式下,解析度為

0.03hpa(0.25

米)• 含溫度輸出

• i2c 介面

• 溫度補償

• msl

.5ms

• 待機電流:

0.1μa

憑個人觀點,相比於溫溼度感測器dht11,實現的功能可能會更多一些,但不知道,兩者哪個精度會高一點。dht11是數字訊號輸入,bmp系列是模擬訊號輸入,但是我發現利用公式測算的海拔高度altitude時鐘為負值,不知道這是什麼情況,暫時且用fabs函式套上,轉換為絕對值。

年前tb了一個bmp180的感測器,想用arduino獲得實現的可能。當然bmp085也可以,我才用的庫就是bmp085的庫,當時網路上找不到bmp180的庫,甚至動用了某工具。還有,最近在國內似乎連不上arduino的庫管理器,於是我從github那獲得了庫檔案,連結在此:這個庫比較早,而且bmp085已經停產了,其中計算海拔的方法粗在錯誤)這個是專門用於bmp180的,不妨兩個都試一下,而且不用自己去推算海拔,有自己封裝的函式,直接就可以用了)

注意,利用以上公式求的是絕對海拔,誤差較大;相比之下,可以計算相對海拔,其計算原理下文詳細介紹。

接線方式:

arduino bmp180

----------------------vin vcc

gnd gnd

scl a5

sda a4

**:

1 #include 2 #include 3

sfe_bmp180 pressure;

4double baseline; //

baseline pressure56

void

setup()717

serial.println();

18 serial.println("

bmp180感測器初始化成功");

19}20else

2125 baseline =getpressure();

26 serial.print("

海平面氣壓: ");

27serial.print(baseline);

28 serial.println("百帕"

); 29}

3031

void

loop()

3253 delay(1000

);54}55

56double

getpressure()

5776

else serial.println("

error retrieving pressure measurement\n");

77}78else serial.println("

error starting pressure measurement\n");

79}80else serial.println("

error retrieving temperature measurement\n");

81}82else serial.println("

error starting temperature measurement\n");

83 }

工作原理:

1、首先感測器會進行一次重啟,之後才會正常工作;

2、內部先進行10次大氣壓的測量,然後計算平均值,作為基準壓強(baseline);

3、先測一次溫度,然後再測大氣壓,若大氣壓的值較為穩定則利用內部的封裝函式,直接求得(至於封裝函式是怎麼樣的就不去深究了),若大氣壓不穩定就會一直等待穩定的時候,因此不管怎麼設定delay,時間間隔都會有偏差;

4、輸出列印。

總結:**在example中就有隻是將多個示例結合為一個整體**。

目前只在arduino上進行搭建,未來還會繼續增加溫溼度感測器dht11;由於對軟串列埠、串列埠通訊等方面的不瞭解,無法在esp8266上實現一旦時機成熟最終會整體移植到esp8266、樹莓派上。