文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

LinkIt ONE如何連結大氣壓力感測器?

作者:陸向陽

 

2011年2月Motorola推出Xoom平板電腦,2014年Apple發表iPhone 6/iPhone 6 Plus智慧型手機,這兩者有何特點?那就是:都內建了大氣壓力感測器(Barometer Sensor)。

大氣壓力感測器可以感應大氣壓力,進而推算出您目前所處位置的高度,也可簡稱高度感測器。不過不太幸運的,目前行動裝置配備這項感測器後的應用仍不多,多數用來協助導航或運動記錄,例如您的車是在平面道路上開或是在高架道路上開,導航指示便會不同,或是有人喜好運動,嘗試記錄這次滑雪,滑出去的最高高度到多少?有無破自己個人紀錄?

本文也來教導如何讓LinkIt ONE能連結、運用大氣壓力感測器,雖然過往的應用多與GPS結合,但或許各位還會有許多更佳的妙用。

筆者是使用Grove Starter Kit for LinkIt ONE中所包含的高度感測器,它是Bosch Sensortec公司的BMP180。不過,在筆者之前的網路示範、書籍示範用的是BMP085,是同公司不同型款的感測器。筆者稍微查了一下,推測可能Bosch期望用BMP180取代BMP085。

若將BMP085的程式拿來連結、感測BMP180的話,還是可以得到數據,但卻是錯誤的數據,筆者得到的是數據是:筆者正處於17,000公尺以上的高度,這可比聖母峰的8,848公尺還高啊!而且攝氏超過100度(BMP085與BMP180都是兼具溫度感測功效的大氣壓力感測器),除非是在三溫暖烤箱,否則筆者大概是被煮熟烤乾了!

Step 1: 接上I2C介面

言歸正傳,第一步先把BMP180接上LinkIt ONE,但必須是接I2C介面,不是接一般的GPIO介面,也非UART介面,如下圖的2種接法都可以。BMP180已經在內部將感測到的類比信號轉換成數位,並透過I2C介面輸出,因此也稱為數位壓力感測器(Digital Pressure Sensor)。

把BMP180接上LinkIt ONE的兩種接法。

把BMP180接上LinkIt ONE的兩種接法。

Step 2: 導入範例程式

進一步的,把範例程式導入,先到本網址把.zip壓縮檔下載回來後解壓縮到Arduino IDE軟體的library資料夾內,之後開啟執行Arduino IDE。

筆者用的是1.5.7版Arduino IDE,還沒有很徹底完成介面中文化,各位請選File/Examples/Grove_Barometer_Sensor-Master/Barometer_Sensor。

注意唷!在這個選項前若已經解壓縮過往的BMP085範例程式到Arduino IDE的library資料夾內,則會提前出現「Barometer_Sensor」選項,但那是給BMP085用的,選了它,且載入執行,就會出現筆者前述的「攝氏破100度、高度破1萬公尺」的錯誤。

BMP180-menu2

選擇正確的Barometer_Sensor選項。

Step 3: 開啟Serial Monitor

載入後,將COM埠從Debug埠切換成MODEM埠,再去開啟Serial Monitor(新版的LinkIt ONE SDK不需要切換COM埠),就可以看到如下圖的攝氏26度、100284Pa大氣壓力、0.9896相對大氣壓力,以及87公尺的高度(筆者測試時約位於12樓高)。

開啟Serial Monitor會顯示溫度及高度。

開啟Serial Monitor會顯示溫度及高度。

附帶一提的,無論是BMP085或BMP180的範例程式,顯示訊息中的「相對大氣壓力,Related」都寫成「Ralated」,這是個小小Bug,無傷大雅。

以上是最快速見效的高度感測器連線法,若進一步研究程式,其實新舊範例程式差異不大,都是呼叫兩個C語言的含括頭檔(.h),一是Barometer.h,另一是Wire.h,差別主要在Barometer.h,仔細看該檔才能看出連結不同款高度感測器的差異。至於Wire.h只是呼叫用來進行I2C介面的傳輸通訊,幾乎不用改變。

最後再附上感測器的簡單說明,以及範例程式頁面的說明,供各位參考:

陸向陽

陸向陽

從電子科系畢業後,即以媒體人的角色繼續這段與「電子科技」的不解之緣。歷任電子技術專書作者、電子媒體記者、分析師等角色,並持續寫作不殆。近來投入Arduino、Raspberry Pi等開放硬體的研究與教程介紹。
陸向陽

上一篇: | 下一篇:

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO