MS5611-01b / Gy-63 Basınç Sensörü Arduino İle Kullanımı
Bu modülümüz tek tarafı kapalı atmosferik basınç sensöründen oluşturulmaktadır. Metalık 2 delikli görülen sensör içerisinde kapalı bir diyafram arkasında 1atmosfer basınç değerinde sabit bir hava bulunmaktadır ve dış ortamdaki basınç değişimine göre tek yönlü basınç ölçümü yapmaktadır. Dış ortamda, günlük hayatta havanın yüksekliklerdeki basınç değerleri sürekli değişmektedir. örneğin bir masanın 10cm üstü ile 10 cm altındaki basınç farklıdır ve bu basınç aralıklarındaki sıcaklık ta basınca bir etkendir. Bu yazımda sıcaklık ile doğru orantılı hesaplama yapacak bir yazılımı sizinle paylaşacağım. Fakat modül üzerindeki sıcaklık sensörü seramik türde bir sensör olduğu için aşşağı yukarı sıcaklık dengelenene kadar basınç değişiklik gösterdiğini görebilirsiniz. Bunlara ek olarak da 25cm'lik sensörün hata payı mevcuttur.
Gelelim sensörün kütüphane dosyasına:
MS5611-GY63 Kütüphane dosyamızı buradan indirebiliriz. İndirdiğimiz dosyanın içerisindeki klasörü Bilgisayarım -> Belgeler -> Arduino -> Libraries klasörüne çıkartalım
Daha sonra Arduino IDE programını açarak aşşağıdaki kodu kullanabiliriz;
#include <MS5611.h>
#define MOVAVG_SIZE 32
MS5611 baro;
int32_t pressure; // Baskal olarak basınç değeri
const float sea_press = 101325; // Paskal olarak deniz seviyesi değeri
int32_t temperature;
float movavg_buff[MOVAVG_SIZE];
int movavg_i=0;
void setup() {
baro = MS5611();
baro.begin();
for(int i=0; i<MOVAVG_SIZE; i++) {
movavg_buff[i] = baro.getPressure();
}
Serial.begin(115200);
}
void loop() {
pressure = (baro.getPressure());
pushAvg(pressure);
pressure=getAvg(movavg_buff, MOVAVG_SIZE);
temperature = (baro.getTemperature());
Serial.println(getAltitude(pressure,temperature)); //Bu kısımda yükseklik değerini ekrana yazdırıyoruz. Seri çiziciyi açarak yükseklik grafik verisini görebiliriz.
}
float getAltitude(float press, float temp) {
return ((pow((sea_press / press), 1/5.257) - 1.0) * (temp*0.01 + 273.15)) / 0.0065;
}
void pushAvg(float val) {
movavg_buff[movavg_i] = val;
movavg_i = (movavg_i + 1) % MOVAVG_SIZE;
}
float getAvg(float * buff, int size) {
float sum = 0.0;
for(int i=0; i<size; i++) {
sum += buff[i];
}
return sum / size;
}