هدف ما از انجام این پروژه چیست؟
هدف این پروژه، اتصال و استفاده از سنسور فشار MS5611 توسط آردوینو میباشد که میتوان برای اندازهگیری و پایش فشار و ارتفاع در محیطهای مختلف استفاده شود. این سنسور قادر است فشار محیط را تشخیص داده و مقادیر دقیق فشار و ارتفاع را ارائه دهد، که آن را برای کاربردهایی مانند اندازهگیری ارتفاع در پروژههای هوانوردی، پیشبینی وضعیت آبوهوایی و نظارت بر فشار در محیطهای حساس مناسب میسازد. کاربران میتوانند با خواندن مقادیر این سنسور سیستمهایی توسعه دهند که به تغییرات فشار و ارتفاع واکنش نشان دهند و در نتیجه کارایی و دقت سیستم را بهبود بخشند.
در این آموزش چه چیزهایی یاد میگیریم؟
- چگونه سنسور MS5611 را به آردوینو وصل کنید و ارتباط SPI را راهاندازی کنید.
- کتابخانهای را برای استفاده با آردوینو تغییر بدهید و بیشتر با نحوه کار دادههای SPI آشنا بشوید.
- چگونه میزان فشار و ارتفاع محیط را از سنسور بخوانید و از این دادهها برای کاربردهای واقعی استفاده کنید.
- پروژههایی مثل اندازهگیری ارتفاع در پروژههای هوانوردی، پیشبینی وضعیت آبوهوایی و نظارت بر فشار را با این سنسور اجرا کنید و مهارتهای عملی برای ساخت سیستمهای واکنشگرا بر اساس تغییرات فشار یاد بگیرید.
این آموزش به شما کمک میکند سنسور را به درستی راهاندازی کنید و دادهها را به صورت لحظهای با آردوینو بخوانید.
برای شروع این پروژه به چه چیزهایی نیاز داریم؟
برای اجرای این پروژه به سختافزار و نرمافزار نیاز داریم. عناوین این سختافزارها و نرمافزارها در جدول زیر به شما ارائه شده است و میتوانید با کلیک بر روی هر یک، آن را تهیه/دانلود کرده و برای شروع آماده شوید.
سخت افزارهای مورد نیاز | نرمافزارهای مورد نیاز |
---|---|
Arduino Programmer | Arduino IDE |
Arduino Development Board- ( Arduino UNO ) | |
ماژول فشارسنج بارومتریک Gebra MS561101BA03-50 |
GebraMS برای راحتی شما، کتابخانههای ویژهای را برای اکثر پروژههای آردوینو آماده کرده است.
شما باید کتابخانه آماده شده توسط GebraMS را دانلود کرده و آن را به Arduino IDE خود اضافه کنید.
ابتدا مانند تصویر زیر ماژول GebraBit MS5611 را به صورت زیر به آردوینو متصل می کنیم:
سپس کتابخانه GebraBit MS5611 را دانلود و به نرم افزار آردوینو اضافه کنید.
سورس کد
کتابخانه پروژه (Library)
جبرابیت علاوه بر طراحی ماژولار انواع حسگرها و قطعات مجتمع، برای سهولت در نصب و توسعه نرمافزار توسط کاربران، مجموعهای از کتابخانههای ساختاریافته و مستقل از سختافزار را به زبان C ارائه میدهد. در این راستا، کاربران میتوانند کتابخانهی مربوط به ماژول مورد نظر خود را در قالب فایلهای “.h” و “.c” دانلود کنند.
با افزودن کتابخانهی ارائهشده توسط جبرابیت به پروژه (راهنمای افزودن فایل به پروژه)، میتوانیم بهراحتی کد خود را توسعه دهیم. فایلهای مربوطه را میتوانید در انتهای پروژه یا در بخش صفحات مرتبط در سمت راست مشاهده کنید.
تمام توابع تعریفشده در کتابخانه با جزئیات کامل توضیح داده شدهاند و کلیه پارامترهای ورودی و مقادیر بازگشتی هر تابع بهصورت مختصر شرح داده شده است. از آنجا که این کتابخانهها مستقل از سختافزار هستند، کاربر میتواند آنها را بهسادگی به کامپایلر دلخواه خود اضافه کرده و با میکروکنترلر یا برد توسعه مورد نظر خود استفاده کند.
USER REGISTER MAP
نقشه رجیستری یا Command های سنسور در این بخش تعریف شده است :
/************************************************
* 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
برای انتخاب OSR سنسور از مقادیر این enum استفاده می شود:
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
تمام ویژگی های سنسور، ضرایب کالیبراسیون و داده های سنسور در این Struct تعریف شده است و تمامی اطلاعات و کانفیگ اجرا شده بر روی سنسور در این Structure ذخیره شده و می توان تغییرات در هر بخش از سنسور را در محیط Debug Session مشاهده نمود.
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
در پایان این فایل تمامی توابع جهت خواندن و نوشتن در رجیستر های MS5611 ، کانفیک سنسور و دریافت داده از سنسور اعلان شده است:
/********************************************************
*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);
فایل سورس GebraBit_MS5611.cpp
در این فایل که به زبان ++C نوشته شده ، تمامی توابع با جزئیات کامل، کامنت گذاری شده و تمامی پارامتر های دریافتی در آرگومان توابع و مقادیر بازگشتی از آنها ، بطور واضح توضیح داده شده است.از این رو در این قسمت به همین توضیحات اکتفا کرده و کاربران را برای اطلاعات بیشتر به بررسی مستقیم از این فایل دعوت می کنیم.
برنامه نمونه در آردوینو
بعد از اتصال ماژول به آردوینو و اضافه کردن کتابخانه سنسور به نرم افزار آردوینو به مسیر زیر بروید و کد نمونه را باز کنید. File > Examples > GebraBit_APDS9306 > Luminosity
شرح فایل نمونه
اگر به ابتدای فایل main.c دقت کنید،متوجه می شوید که هدر GebraBit_MS5611.h برای دسترسی به ساختار ها ، Enum ها و توابع مورد نیاز ماژول GebraBit MS5611 ، اضافه شده است.در قسمت بعدی متغیری به نام MS5611_Module از نوع ساختار GebraBit_MS5611 (این ساختار در هدر GebraBit_MS5611 بوده و در بخش توضیحات کتابخانه GebraBit_MS5611توضیح داده شد) که برای پیکربندی ماژول GebraBit MS5611 می باشد،تعریف شده است:
GebraBit_MS5611 MS5611;
در بخش بعدی کد نوشته شده، با استفاده از تابع GB_MS5611_initialize(&MS5611_Module) ، ماژول GebraBit MS5611 را مقدار دهی می کنیم و در نهایت در قسمت while برنامه ،داده را از سنسور خوانده و مقادیر فشار و دما و ارتفاع به طور پیوسته دریافت میشود:
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);
}
آردوینو خود را به کامپیوتر متصل کنید و مدل و پورت آردوینو خود را انتخاب کنید.
سپس نمونه کد را ابتدا Verify و سپس Upload کنید
بعد از Upload کردن کد Serial Monitor را باز کرده و می توانید خروجی های سنسور را مشاهده کنید