使用phyphox已經(jīng)有一段時(shí)間了,它里面帶了一個(gè)氣壓計(jì)實(shí)驗(yàn),但是是灰色的,即使你點(diǎn)擊它,它也只會(huì)提示這個(gè)實(shí)驗(yàn)不可用。據(jù)說(shuō)有氣壓計(jì)的手機(jī),要么是旗艦機(jī),要么是商務(wù)機(jī),據(jù)說(shuō)華為Mate上面就有,可是P系列上面就沒(méi)有。蘋(píng)果不了解。一個(gè)封閉的系統(tǒng)以安全自居,但是可玩性、開(kāi)放性和所帶來(lái)的創(chuàng)造的熱情與火花就差得遠(yuǎn)了。
phyphox團(tuán)隊(duì)隊(duì)長(zhǎng)塞巴斯蒂安(我記不住那人名字)好多個(gè)宣傳視頻里都有phyphox結(jié)合氣壓計(jì)的實(shí)驗(yàn),這里使用常用常見(jiàn)的GY68-BMP180氣壓傳感器在phyphox體外嫁接一個(gè)氣壓計(jì)——當(dāng)然,研究BMP180并不是為了phyphox,而是打算琢磨一下熱學(xué)實(shí)驗(yàn)。
這個(gè)記錄,是沒(méi)有規(guī)劃的。寫(xiě)哪算哪,只是整理。整理的原因,一方面BMP180有好幾款封裝,而且有的已經(jīng)不再受到官方支持,有的會(huì)在網(wǎng)上由微弱的力量支持著一些Arduino擴(kuò)展庫(kù),甚至還能看到51的、STM32的擴(kuò)展庫(kù)——因?yàn)槭情_(kāi)源的,所以用起來(lái)并不容易。這里整理的,都是我親自試驗(yàn)過(guò)的,要保證它們能用。此外,看起來(lái)簡(jiǎn)單的東西,往往并不簡(jiǎn)單,整理下來(lái),可備未來(lái)自己用,亦可為他人參照之。內(nèi)容只兩片,一為BMP180與國(guó)際壓強(qiáng)方程的應(yīng)用,另一為藍(lán)牙BLE與phyphox通訊。
BMP180氣壓傳感是最為常用常見(jiàn)的氣壓傳感器,如圖1。介紹它的文章特別多,挑幾個(gè)重點(diǎn)列在這里:壓強(qiáng)可測(cè)范圍300hPa至1100hPa(hPa百帕),高度可測(cè)范圍從海拔以下數(shù)百米至海拔9000米,分辨率可達(dá)0.03hPa(0.25米) 0.06hPa(0.5米),這和設(shè)置模型有關(guān)。
需特別注意的是,BMP180電源為3.3V,萬(wàn)不可將其與Arduino 5V相接,雖然有不少文章說(shuō)可以接5V,說(shuō)有穩(wěn)壓及電平轉(zhuǎn)換云云,未免于電子市場(chǎng)之極大豐富尚缺乏想象。
BMP180有溫度輸出和溫度補(bǔ)償功能,這在價(jià)格平易使用方便的傳感器里是不多見(jiàn)的。
先上測(cè)量數(shù)據(jù)。從最簡(jiǎn)單的場(chǎng)景開(kāi)始。
BMP180與Arduino連接完畢,直接測(cè)量家里室內(nèi)壓強(qiáng)和溫度(7樓):
BMP180直接放置在桌子上,壓強(qiáng)1000.49hPa,溫度26.01C。
舉到一臂高處,大約上升0.5cm,壓強(qiáng)顯示1000.45hPa,溫度顯示26.02C。
放在桌子下方,位置下降大約1.0米,壓強(qiáng)顯示1000.62hPa,溫度顯示25.90C。
這確實(shí)靈敏得令人難以置信?。?!
十分顯然,我們可以猜測(cè)phyphox氣壓計(jì)實(shí)驗(yàn)的原理了。我們知道,國(guó)際壓強(qiáng)方程為
其中h是海拔高度,P為當(dāng)前位置大氣壓,為海平面大氣壓強(qiáng),均以hPa為單位。那么,我們只要能夠知道就能夠讓BMP180向我們匯報(bào)高度了,去哪里得到呢?當(dāng)然最好的辦法是到地面測(cè)量一下,另一個(gè)辦法是到https://www.weatheronline.co.uk查詢(xún)實(shí)時(shí)海平面氣壓圖,如圖2,這個(gè)網(wǎng)站有中文。
我整理這些文字時(shí),我家里的氣壓已經(jīng)變化了,大約1001.50hPa,如圖3,于是
確實(shí)暴露了7樓的位置,比較符合實(shí)際。
但是這里面也有一些問(wèn)題:
(1)一個(gè)是從氣壓分布圖看,若北京海平面氣壓取1003hPa,那么得到的高度只有12米,這和BMP180強(qiáng)大的分辨率是不相符的;
(2)北京地區(qū)雖地處平原,但海拔也并非零米,大概是從地表面算起的。
(3)一個(gè)校準(zhǔn)的方法,是把h替換成,這樣從數(shù)據(jù)擬合里可以把提取出來(lái)。
這個(gè)小板需要自己焊排針,好在只有4根。然后按照以下的針腳對(duì)應(yīng)。圖省了。
BMP180> Arduino Uno
VIN > 3V3 #<------要超級(jí)小心,不能使用5V,還是要尊重DataSheet數(shù)據(jù)
GND > GND
SCL > A5
SDA > A4
有的動(dòng)了,有的還沒(méi)動(dòng),有的可能已經(jīng)沒(méi)興趣了。
(1)通過(guò)國(guó)際壓強(qiáng)方程得到壓強(qiáng)與海拔的正或逆的關(guān)系;
(2)嫁接到手機(jī),完成著名的phyphox手機(jī)壓強(qiáng)計(jì)電梯高度實(shí)驗(yàn);
(3)可以嘗試氣體三定律實(shí)驗(yàn),可簡(jiǎn)易完成PT關(guān)系
(4)實(shí)驗(yàn)測(cè)量阿伏伽德羅常數(shù)
條目式列舉如下。
(1)BMP180通訊方式是I2C,可以查看Arduino電路圖知道它與BMP180的接線(xiàn)方法;
(2)部分BMP180是5針、甚至6針的,似乎是過(guò)時(shí)的產(chǎn)品,它們的支持庫(kù)特別雜亂,且經(jīng) 常與wire庫(kù)沖突,盡量不用這些雜牌支持庫(kù);
(3)所有的支持庫(kù)里最好的,是Sparkfun的開(kāi)源支持庫(kù)BMP180_Breakout_Arduino_Library;
(4)電源電壓3.3V,沒(méi)有保證的情況下,先別用5V。
(5)本例代碼及解釋?zhuān)敿?xì)的,請(qǐng)自行去閱讀支持庫(kù)源碼。
#include <Wire.h>
#include <SFE_BMP180.h>
SFE_BMP180 bmp180;
void setup() {
Serial.begin(9600);
bool success = bmp180.begin();
if (success) {
Serial.println("BMP180 init success");
}
}
void loop() {
char status;
double T, P;
bool success = false;
status = bmp180.startTemperature();
if (status != 0) {
delay(1000);
status = bmp180.getTemperature(T);
if (status != 0) {
status = bmp180.startPressure(3);
if (status != 0) {
delay(status);
status = bmp180.getPressure(P, T);
if (status != 0) {
Serial.print("Pressure: ");
Serial.println(P);
Serial.println(" hPa");
Serial.print("Temperature: ");
Serial.print(T);
Serial.println(" C");
}
}
}
}
}
有了擴(kuò)展庫(kù)的支持,我們只需start和get去循環(huán)讀數(shù)就可以了。
聯(lián)系客服