Bu projenin amacı nedir?
Bu projenin amacı, MS5611 barometrik basınç sensörünü çeşitli ortamlardaki atmosferik basıncı ve sıcaklığı ölçmek ve izlemek için bir Arduino ile arayüzlemektir. Sensör, hassas basınç ve sıcaklık okumaları sağlayarak irtifa ölçümü, hava durumu izleme ve navigasyon sistemleri gibi uygulamalar için idealdir. Kullanıcılar, ani şekilde verileri okuyarak basınç ve sıcaklıktaki değişikliklere dinamik olarak yanıt veren sistemler tasarlayabilir, dış mekan ve çevresel uygulamalarda işlevselliği ve güvenilirliği artırabilir.
Bu eğitimde neler öğreneceğiz?
- MS5611 sensörünü Arduino’ya bağlayın ve I2C veya SPI haberleşmesini sağlayın .
- Sensörle arayüz oluşturmak için mevcut bir kütüphaneyi kullanın veya özel kod yazın; böylece veri toplama protokolleri hakkındaki anlayışınızı geliştirin .
- Sensör kullanarak atmosferik basıncı ve sıcaklığı ölçün , gerçek zamanlı verileri pratik uygulamalar için yorumlayın .
- Yükseklik ölçümü , hava durumu izleme ve navigasyon sistemleri gibi projeler geliştirin ve çevresel koşullara dayalı tepkisel sistemler oluşturma konusunda uygulamalı deneyim kazanın .
Bu uygulamalı kılavuz, Arduino ile sensör entegrasyonu ve ani veri izleme konusunda bilgi sağlar.
Bu projeye başlamak için neye ihtiyacımız var?
bu projeyi gerçekleştirmek için bazı donanım ve yazılımlara ihtiyacımız var. Bu donanım ve yazılımların başlıkları aşağıdaki tabloda sizlere sunulmuştur ve her birinin üzerine tıklayarak hazırlayabilir/indirebilir ve başlamaya hazırlanabilirsiniz.
GEREKLİ DONANIM | GEREKLİ YAZILIM |
---|---|
Arduino Programmer | Arduino IDE – (Nasıl kurulur ?) |
Arduino Development Board- ( Arduino UNO ) | |
Gebra MS561101BA03-50 Barometrik Basınç Modülü |
GebraMS sizin kolaylığınız için çoğu arduino projesi için özel kütüphaneler hazırlamış
GebraMS’in hazırladığı kütüphanesini indirip Arduino IDE’nize eklemeniz gerekecek. (Gebra kütüphaneleri Arduino’ya nasıl eklenir)
Öncelikle aşağıdaki görselde görüldüğü gibi Gebra MS5611 modülümüzü Arduino UNO’ya şu şekilde bağlıyoruz:
Daha sonra Gebra MS5611 kütüphanesini indirip Arduino IDE’nize ekleyin.
Source Code
Projenin kütüphanesi (Library)
GebraMS, çeşitli sensör ve entegrelerin modüler tasarımına ek olarak, kullanıcıların yazılım kurma ve geliştirme işlemlerini kolaylaştırmak için C dilinde çeşitli yapılandırılmış ve donanımdan bağımsız kütüphaneler (Library) sağlamaya çalışır. Bu amaçla, kullanıcılar, istedikleri modülün kütüphanesini “.h” ve “.c” dosyasını (Başlık ve Kaynak) olarak indirebilirler.
GebraMS tarafından sağlanan projenin kütüphanesini projenize ekleyerek ( projeye dosya nasıl eklenir ) kodumuzu kolayca geliştirebiliriz. ilgili dosyaları projenin sonunda veya sağ tarafta ilgili sayfalar kısmında bulabilirsiniz
Kütüphanede tanımlanan tüm fonksiyonlar tüm detaylarıyla yorumlanmakta ve fonksiyonların argümanlarında alınan tüm parametreler ve dönüş değerleri kısaca açıklanmaktadır. Kütüphaneler donanımdan bağımsız olduğundan kullanıcı istediği compiler’e kolaylıkla kütüphaneyi ekleyebilir ve istediği mikroişlemci ve geliştirme kartı ile geliştirebilir.
USER REGISTER MAP
The registry map or sensor commands are defined in this section:
/************************************************
* USER REGISTER MAP *
***********************************************/
#define MS5611_RESET (0x1E)
#define MS5611_PRESSURE_SAMPLING_START (0x40)
#define MS5611_TEMPERATURE_SAMPLING_START (0x50)
#define MS5611_ADC_READ (0x00)
#define MS5611_PROM_READ (0xA0)
/*----------------------------------------------*
* USER REGISTER MAP End *
*----------------------------------------------*/
MS5611_Output_Sample_Rate Enum
The values of this enum are used to select the OSR of the sensor:
typedef enum Output_Sample_Rate
{
OSR_256 = 0x00 ,
OSR_512 = 0x02 ,
OSR_1024 = 0x04 ,
OSR_2048 = 0x06 ,
OSR_4096 = 0x08
} MS5611_Output_Sample_Rate;
MS5611 struct
All sensor properties, calibration coefficients and sensor data are defined in this “struct” and All the information and configuration implemented on the sensor are stored in this “structure” and you can see the changes in each part of the sensor in the “Debug Session” environment.
typedef struct MS5611
{
uint8_t Register_Cache1;
MS5611_Output_Sample_Rate PRESSURE_SAMPLE_RATE;
MS5611_Output_Sample_Rate TEMPERATURE_SAMPLE_RATE;
uint8_t PROM_DATA[PROM_DATA_BUFFER_SIZE];
uint16_t FACTORY_DATA;
uint16_t C1;
uint16_t C2;
uint16_t C3;
uint16_t C4;
uint16_t C5;
uint16_t C6;
uint16_t CRC_SERIAL_CODE;
uint8_t ADC_DATA[ADC_DATA_BUFFER_SIZE];
uint32_t ADC_RAW_PRESSURE;
uint32_t ADC_RAW_TEMPERATURE;
int32_t DT;
int64_t T2;
int64_t OFF2;
int64_t SENS2;
int64_t OFF;
int64_t SENS;
float TEMPERATURE;
float PRESSURE;
double ALTITUDE;
}GebraBit_MS5611;
Declaration of functions
At the end of this file, all the functions for reading and writing in MS5611 registers, sensor configuration and receiving data from the sensor are declared:
/********************************************************
*Declare Read&Write MS5611 Register Values Functions *
********************************************************/
extern uint8_t GB_MS5611_Burst_Read(uint8_t regAddr,uint8_t *data, uint16_t byteQuantity);
extern uint8_t GB_MS5611_Write_Reg_Data(uint8_t regAddr);
/********************************************************
* Declare MS5611 Configuration Functions *
********************************************************/
extern void GB_MS5611_Soft_Reset ( GebraBit_MS5611 * MS5611 );
extern void GB_MS5611_Read_PROM ( GebraBit_MS5611 * MS5611 );
extern void GB_MS5611_Pressure_Sample_Rate(GebraBit_MS5611 * MS5611 , MS5611_Output_Sample_Rate rate);
extern void GB_MS5611_Temperature_Sample_Rate(GebraBit_MS5611 * MS5611 , MS5611_Output_Sample_Rate rate);
extern void GB_MS5611_Start_Pressure_Sampling(GebraBit_MS5611 * MS5611);
extern void GB_MS5611_Start_Temperature_Sampling(GebraBit_MS5611 * MS5611);
extern void GB_MS5611_Read_ADC ( GebraBit_MS5611 * MS5611 ) ;
extern void GB_MS5611_Read_ADC_Raw_Pressure(GebraBit_MS5611* MS5611);
extern void GB_MS5611_Read_ADC_Raw_Temperature(GebraBit_MS5611* MS5611);
extern void GB_MS5611_initialize( GebraBit_MS5611 * MS5611 );
extern void GB_MS5611_Calculate_Temperature(GebraBit_MS5611* MS5611);
extern void GB_MS5611_Calculate_Temperature_Compensated_Pressure(GebraBit_MS5611* MS5611);
extern void GB_MS5611_Altitude(GebraBit_MS5611 * MS5611);
Gebra_MS5611.c kaynak dosyası
C dilinde yazılmış olan bu dosyada, tüm fonksiyonlar en ince ayrıntısına kadar yorum satırına alınmış ve fonksiyonların argümanlarında alınan tüm parametreler ve bunların döndürdüğü değerler açıkça açıklanmıştır, bu nedenle sadece açıklamalarla yetiniyoruz ve kullanıcıları daha fazla bilgi için doğrudan bu dosyaya bakmaya davet ediyoruz.
Arduino’da örnek program
Modülü Arduino’ya bağladıktan ve kütüphaneyi IDE’ye ekledikten sonra şu yola gidin: Dosya > Örnekler > GebraBit_MS5611 > Temp-Press-Alt
Örnek dosyanın açıklaması
Gebra MS5611 modülü tarafından gerekli olan enumlar ve işlevler yapılara eklendi. Bir sonraki bölümde, Gebra_MS5611 yapı tipinin MS5611 adlı bir değişkeni (bu yapı Gebra_MS5611 başlığındadır ve Gebra_MS5611 kütüphane açıklama bölümünde açıklanmıştır) Gebra MS5611 modülünün yapılandırması için tanımlanmıştır:
GebraBit_MS5611 MS5611;
Yazılı kodun bir sonraki kısmında GB_MS5611_initialize (&MS5611) kullanarak Gebra MS5611 modülünü ayarlıyoruz ve son olarak programın döngü kısmında sensörden veriler okunuyor ve Sensör değerleri sürekli olarak alınıyor:
void setup() {
Serial.begin(9600);
SPI.begin();
pinMode(SPI_CS_Pin, OUTPUT);
digitalWrite(SPI_CS_Pin, HIGH);
GB_MS5611_initialize(&MS5611);
Serial.println("MS5611 Initialized");
}
void loop() {
GB_MS5611_Calculate_Temperature(&MS5611);
Serial.print("Temperature: ");
Serial.print(MS5611.TEMPERATURE);
Serial.println(" °C");
GB_MS5611_Calculate_Temperature_Compensated_Pressure(&MS5611);
Serial.print("Pressure: ");
Serial.print(MS5611.PRESSURE);
Serial.println(" hPa");
GB_MS5611_Altitude(&MS5611);
Serial.print("Altitude: ");
Serial.print(MS5611.ALTITUDE);
Serial.println(" meters");
delay(1000);
}
The Sample file code text:
#include "GebraBit_MS5611.h"
GebraBit_MS5611 MS5611;
void setup() {
Serial.begin(9600);
SPI.begin();
pinMode(SPI_CS_Pin, OUTPUT);
digitalWrite(SPI_CS_Pin, HIGH);
GB_MS5611_initialize(&MS5611);
Serial.println("MS5611 Initialized");
}
void loop() {
GB_MS5611_Calculate_Temperature(&MS5611);
Serial.print("Temperature: ");
Serial.print(MS5611.TEMPERATURE);
Serial.println(" °C");
GB_MS5611_Calculate_Temperature_Compensated_Pressure(&MS5611);
Serial.print("Pressure: ");
Serial.print(MS5611.PRESSURE);
Serial.println(" hPa");
GB_MS5611_Altitude(&MS5611);
Serial.print("Altitude: ");
Serial.print(MS5611.ALTITUDE);
Serial.println(" meters");
delay(1000);
}
Arduino’nuzu bilgisayara bağlayın ve Arduino Kartınızı seçin
Ardından Örnek kodu doğrulayın ve yükleyin
Kodu yükledikten sonra seri monitörünü açın ve parlaklık değerlerini görebilirsiniz.