2016年6月18日

手機即時顯示壓力感測繪圖-水壓測量

延續之前的計畫  以手機藍牙接收Arduino感測器訊號,進行即時紀錄與繪圖,我繼續製作以手機顯示感測資訊的系統。這次是跟小p聊到測量水壓,就想到可以用氣壓感測器來測量。

我使用的是MPX4115a
有六隻腳,但用到的只有前三隻。第一隻腳上有一個小缺刻,可以用來辨識,
1.輸出電壓
2.GND
3.VCC,接5V

datasheet如下
http://www.farnell.com/datasheets/8723.pdf
可以量測15 to 115 kPa (2.2 to 16.7 psi),也就是0.15到1.13大氣壓,由於是用類比電壓來換算,所以解析度大約是9.9毫米水柱。換句話說,如果用來測水壓,誤差大概是一公分的水深。(舉例來說,如果想量20公分和21公分的水壓差異是沒辦法的,但是20公分和30公分是可以)

DSC05634


MPX4115a具有一個入氣孔,可以跟風管相連,把風管直接插入水中,就可以測量水壓了。
DSC05635



這有一段說明的影片



程式碼如下,為了讓波動的數據能平穩,所以收了100筆資料作平均再吐出來

void setup() {
    Serial.begin(9600);
}

void loop(){
    float pressure = readPressure(A0);
    float gwcm2 = pressure*0.0102; //單位是每平方公分幾克重
    float atm = pressure/101.325; //單位是atm

    /*Serial.println();
    Serial.print("Pressure = ");
    Serial.print(pressure);
    Serial.println(" pascals");
    Serial.print("Pressure = ");
    Serial.print(millibars);
    Serial.println(" millibars");
    */
    Serial.print("E");
    Serial.println(atm);
    delay(100);
}

/* Reads pressure from the given pin.
* Returns a value in Pascals
*/
float readPressure(int pin){
  float sum=0;
  for (int i=0; i < 100; i++){
    int pressureValue = analogRead(pin);
    float pressure=((pressureValue/1024.0)+0.095)/0.009;
     sum=pressure+sum;
   
  }
  float MeanP=sum/100;
  return MeanP;//單位是kPa
}