2011年8月19日 星期五

測試XOOM Barometer(氣壓計)

Jimmy's papa一直搞不懂MOTO為何要將Barometer(氣壓計)納入XOOM的Sensor規格中,有網友說爬山用得到,也有人說也許當初採買的物理偵測模組中剛好有Barometer,不過不管真相如何,光看最近新聞報導美國發生怪風吹垮大型演唱會舞台,或者是龍捲風冰雹到處肆虐,或許就美國人而言的確需要身邊的平板電腦或智慧型手機能適時提醒,周遭的氣候是否正在急遽的變化中

以下是簡單的氣壓偵測程式,測試的當下是1008.7 millibar(毫巴),標準大氣壓被定義為1013.25 millibar(毫巴),今天下午雲層還蠻厚的,典型的低氣壓天氣

package com.jimmyscratchlab.androidbarometer;


import com.jimmyscratchlab.androidbarometer.R;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class AndroidBarometerActivity extends Activity  {
    /** Called when the activity is first created. */
    
    private static final String TAG = "sensor";
    private  SensorManager sm;
    private TextView myTextView;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myTextView = (TextView) findViewById(R.id.value);
        sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        int sensorType = Sensor.TYPE_PRESSURE;
        sm.registerListener(myPressureListener,sm.getDefaultSensor(sensorType),SensorManager.SENSOR_DELAY_NORMAL);
        
    }
    
    final SensorEventListener myPressureListener = new SensorEventListener(){

        public void onSensorChanged(SensorEvent sensorEvent){
            
            if(sensorEvent.sensor.getType() == Sensor.TYPE_PRESSURE){
                Log.i(TAG,"onSensorChanged");
                
                java.text.DecimalFormat df = new java.text.DecimalFormat("#.#");
                String reading ="PRESSURE: "+ df.format( sensorEvent.values[0] )+"millibars";
                myTextView.setText(reading);
            }
            
        }

        public void onAccuracyChanged(Sensor sensor , int accuracy){
            Log.i(TAG, "onAccuracyChanged");
        }
    };
     
    public void onPause(){
        //此時需關掉sensor,否則會一直運作,直到電力耗盡
        sm.unregisterListener(myAccelerometerListener);
        super.onPause();
    }
    
}

寄件者 scratchlab

我查氣壓計相關資料順便查到一篇有趣的小文章,有個比較KUSO的版本,改天講給Jimmy聽

話說在比奇堡的泡芙阿姨海底駕駛訓練班,在舉行過期末考後,
泡芙阿姨老師打算將其中一名學生海綿寶寶的物理科答案評定為零分,而這名學生海綿寶寶卻堅決認為他應該得到滿分。
兩人互不相讓,沒有結果。
最後雙方達成協議,決定委請另一位公正且是比奇堡當地最有科學頭腦的松鼠珊迪老師來裁決。

  這位被委任的珊迪老師首先要了解一下試卷的內容,
原來,試卷上的的題目是這樣的:「試說明如何利用一具氣壓計測出海之霸餐廳的高度。」
那名學生的答案是:「將此氣壓計攜至海之霸餐廳頂端,繫上一長繩,然後將氣壓計垂放至街道上,再將其收回。
測量所用繩子之長度,則此長度即為海之霸餐廳之高度。」

  看完之後,他覺得這位學生海綿寶寶的回答完整而正確,的確有充足的理由得到滿分。
但這位珊迪老師繼而又想,高分應該代表這名學生海綿寶寶在物理學能力上的一種肯定,
而他的答案卻顯然不能證明如此,於是他建議給這位學生海綿寶寶另一次做答的機會。

  這一次,他有六分鐘的時間回答問題。泡芙阿姨老師並且一再提醒他,答案中必須包含深海物理學方面的知識。
過了五分鐘之後,他的答案仍然一片空白。珊迪老師問他說,是不是準備放棄了。
他抬起頭來回答說:「不,對於這個問題,我有許多不同的答案。我只是在思考一個最佳的答案。」

  在最後一分鐘裡,他一口氣寫完了答案。
他的回答是這樣的:「將氣壓計拿到海之霸餐廳門外,頭頂著氣壓計,吹起大泡泡包覆全身,用馬表計算泡泡到屋頂的時間。
然後利用亞特蘭提斯神奇泡泡浮力公式,即可算出海之霸餐廳的高度。」
泡芙阿姨老師看完答案後一陣苦笑,決定投降。而那位委任的珊迪老師,則給了這位學生海綿寶寶接近滿分的成績。

  在離開辦公室之時,那位受託的珊迪老師突然想起這名學生海綿寶寶曾提到他還有許多不同的答案,
於是又將他找來,問他到底是些什麼答案。
學生回答說:「沒錯。還有許多方法一樣可以測出海之霸餐廳的高度。
舉例來說,你可以在大晴天裡將氣壓計拿到室外,量出氣壓計及其影子的長度,
再量出建築物影子的長度。
利用簡單的比例關係,即可計算出建築物的高度。」

  聽完後,珊迪老師說:「很好,那其它的呢?」於是他又繼續回答說:
「有一個非常基本的計算法,我想你會喜歡的。只要拿著氣壓計沿著階梯而上,
一面沿著牆壁用氣壓計的長度為單位,畫下記號。
最後,計算一下這些記號的數目,即可得到海之霸餐廳的高度,這是一個非常直接的方法。
當然啦,如果你希望用一個較複雜的方法,可以將氣壓計繫於繩子的末端,當作鐘擺一般擺動。
然後分別在街道,以及樓頂測出其重力加速度,利用此差異即可求出海之霸餐廳的高度。」

  最後海綿寶寶下結論說,還有其它的方法可以解決此一問題。
也許最好的方法就是直接帶著氣壓計去敲海之霸餐廳的門。
當皮老闆出來應門時,對他說:「皮老闆先生,我這兒有個很棒的氣壓計,
如果你願意告訴我海之霸餐廳的高度,我就把氣壓計加上蟹堡秘方一併送給你。」

  這時候,珊迪老師忍不住問他說:「你難道真的不知道這個問題的正確解答嗎?」
他承認說知道,但他接著說:「從小到大,我已經厭倦老師不斷教導我們如何去思考,
如何去使用『科學的方法』,而不是教導我們去認識事物的構造與本質。
因此,我才以這種玩笑的方式來表達我的抗議。」

沒有留言:

張貼留言