هدف ما از انجام این پروژه چیست؟
هدف این پروژه، اتصال و استفاده از سنسور فشار MS5611 توسط آردوینو میباشد که میتوان برای اندازهگیری و پایش فشار و ارتفاع در محیطهای مختلف استفاده شود. این سنسور قادر است فشار محیط را تشخیص داده و مقادیر دقیق فشار و ارتفاع را ارائه دهد، که آن را برای کاربردهایی مانند اندازهگیری ارتفاع در پروژههای هوانوردی، پیشبینی وضعیت آبوهوایی و نظارت بر فشار در محیطهای حساس مناسب میسازد. کاربران میتوانند با خواندن مقادیر این سنسور سیستمهایی توسعه دهند که به تغییرات فشار و ارتفاع واکنش نشان دهند و در نتیجه کارایی و دقت سیستم را بهبود بخشند.
در این آموزش چه چیزهایی یاد میگیریم؟
- چگونه سنسور MS5611 را به آردوینو وصل کنید و ارتباط SPI را راهاندازی کنید.
- کتابخانهای را برای استفاده با آردوینو تغییر بدهید و بیشتر با نحوه کار دادههای SPI آشنا بشوید.
- چگونه میزان فشار و ارتفاع محیط را از سنسور بخوانید و از این دادهها برای کاربردهای واقعی استفاده کنید.
- پروژههایی مثل اندازهگیری ارتفاع در پروژههای هوانوردی، پیشبینی وضعیت آبوهوایی و نظارت بر فشار را با این سنسور اجرا کنید و مهارتهای عملی برای ساخت سیستمهای واکنشگرا بر اساس تغییرات فشار یاد بگیرید.
این آموزش به شما کمک میکند سنسور را به درستی راهاندازی کنید و دادهها را به صورت لحظهای با آردوینو بخوانید.
برای انجام این پروژه به چه چیزهایی نیاز داریم؟
همانطور که احتمالا میدانید برای انجام این پروژه به سخت افزارها و نرم افزارهایی نیاز داریم. عناوین این سخت افزارها و نرم افزارها در جدول زیر در اختیارتان قرار داده شده که میتوانید با کلیک روی هرکدام از آنها، آنها را تهیه/دانلود کنید و برای شروع آماده شوید.
سخت افزارهای مورد نیاز
|
نرم افزارهای مورد نیاز
|
---|---|
Arduino UNO
|
ابتدا مانند تصویر زیر ماژول GebraBit MS5611 را به صورت زیر به آردوینو متصل می کنیم:
سپس کتابخانه GebraBit MS5611 را دانلود و به نرم افزار آردوینو اضافه کنید.
کتابخانه های مورد نیاز
|
---|
اگر نمیدانید چطور کتابخانههای GebraBit را به آردوینو اضافه کنید، به لینک آموزشی زیر مراجعه کنید.
نحوه افزودن کتابخانه های GebraBit به آردوینو
کتابخانه و درایور MS5611
GebraBit علاوه بر طراحی ماژولار سنسورها و آی سی های مختلف ، پیشرو در ارائه انواع کتابخانه های ساختاریافته و مستقل از سخت افزار به زبان C، جهت سهولت کاربران در راه اندازی و توسعه نرم افزاری آنها نیز بوده است.
بدین منظور پس از تهیه هر یک از ماژول های GebraBit ، کاربر می تواند با مراجعه به بخش آموزش ماژول مربوطه، کتابخانه مختص به آن ماژول که حاوی فایل .h و .cpp (Header and Source) و یک برنامه نمونه آموزشی تحت سخت افزار های GebraBit STM32F303, GebraBit ATMEGA32A یا Arduino می باشد را دانلود کند.
تمامی توابع و Structure های تعریف شده در کتابخانه ، با جزئیات کامل، کامنت گذاری شده و تمامی پارامتر های دریافتی در آرگومان توابع و مقادیر بازگشتی از آنها ، به اختصار توضیح داده شده است.با توجه به مستقل از سخت افزار بودن کتابخانه ها،کاربر به راحتی می تواند آن را در هر یک از کامپایلر های دلخواه اضافه کرده و با میکروکنترلر و برد توسعه مورد علاقه خود، آن را توسعه دهد.
فایل هدر GebraBit_MS5611.h
در این فایل بر اساس دیتاشیت سنسور یا ای سی ، تمامی آدرس رجیسترها، مقادیر هریک از رجیسترها به صورت Enumeration تعریف شده است.همچنین بدنه سنسور MS5611 و کانفیگ های مربوط به هریک از بلوک های داخلی سنسور MS5611 به صورت STRUCT با نام GebraBit_MS5611 نیز تعریف شده است.که نهایتا در محیط Debug Session تمامی کانفیگ های مربوط به هر بلوک به صورت Real Time قابل مشاهده است.
USER REGISTER MAP
نقشه رجیستری یا Command های سنسور در این بخش تعریف شده است :
1. #define MS5611_RESET (0x1E)
2. #define MS5611_PRESSURE_SAMPLING_START (0x40)
3. #define MS5611_TEMPERATURE_SAMPLING_START (0x50)
4. #define MS5611_ADC_READ (0x00)
5. #define MS5611_PROM_READ (0xA0)
Enum MS5611_Output_Sample_Rate
برای انتخاب OSR سنسور از مقادیر این enum استفاده می شود:
1. typedef enum Output_Sample_Rate
2. {
3. OSR_256 = 0x00 ,
4. OSR_512 = 0x02 ,
5. OSR_1024 = 0x04 ,
6. OSR_2048 = 0x06 ,
7. OSR_4096 = 0x08
8. } MS5611_Output_Sample_Rate;
struct MS5611
تمام ویژگی های سنسور، ضرایب کالیبراسیون و داده های سنسور در این Struct تعریف شده است و تمامی اطلاعات و کانفیگ اجرا شده بر روی سنسور در این Structure ذخیره شده و می توان تغییرات در هر بخش از سنسور را در محیط Debug Session مشاهده نمود.
1. typedef struct MS5611
2. {
3. uint8_t Register_Cache1;
4. MS5611_Output_Sample_Rate PRESSURE_SAMPLE_RATE;
5. MS5611_Output_Sample_Rate TEMPERATURE_SAMPLE_RATE;
6. uint8_t PROM_DATA[PROM_DATA_BUFFER_SIZE];
7. uint16_t FACTORY_DATA;
8. uint16_t C1;
9. uint16_t C2;
10. uint16_t C3;
11. uint16_t C4;
12. uint16_t C5;
13. uint16_t C6;
14. uint16_t CRC_SERIAL_CODE;
15. uint8_t ADC_DATA[ADC_DATA_BUFFER_SIZE];
16. uint32_t ADC_RAW_PRESSURE;
17. uint32_t ADC_RAW_TEMPERATURE;
18. int32_t DT;
19. int64_t T2;
20. int64_t OFF2;
21. int64_t SENS2;
22. int64_t OFF;
23. int64_t SENS;
24. float TEMPERATURE;
25. float PRESSURE;
26. double ALTITUDE;
27. }GebraBit_MS5611;
اعلان توابع
در پایان این فایل تمامی توابع جهت خواندن و نوشتن در رجیستر های MS5611 ، کانفیک سنسور و دریافت داده از سنسور اعلان شده است:
1. /********************************************************
2. *Declare Read&Write MS5611 Register Values Functions *
3. ********************************************************/
4. extern uint8_t GB_MS5611_Burst_Read(uint8_t regAddr,uint8_t *data, uint16_t byteQuantity);
5. extern uint8_t GB_MS5611_Write_Reg_Data(uint8_t regAddr);
6. /********************************************************
7. * Declare MS5611 Configuration Functions *
8. ********************************************************/
9. extern void GB_MS5611_Soft_Reset ( GebraBit_MS5611 * MS5611 );
10. extern void GB_MS5611_Read_PROM ( GebraBit_MS5611 * MS5611 );
11. extern void GB_MS5611_Pressure_Sample_Rate(GebraBit_MS5611 * MS5611 , MS5611_Output_Sample_Rate rate);
12. extern void GB_MS5611_Temperature_Sample_Rate(GebraBit_MS5611 * MS5611 , MS5611_Output_Sample_Rate rate);
13. extern void GB_MS5611_Start_Pressure_Sampling(GebraBit_MS5611 * MS5611);
14. extern void GB_MS5611_Start_Temperature_Sampling(GebraBit_MS5611 * MS5611);
15. extern void GB_MS5611_Read_ADC ( GebraBit_MS5611 * MS5611 ) ;
16. extern void GB_MS5611_Read_ADC_Raw_Pressure(GebraBit_MS5611* MS5611);
17. extern void GB_MS5611_Read_ADC_Raw_Temperature(GebraBit_MS5611* MS5611);
18. extern void GB_MS5611_initialize( GebraBit_MS5611 * MS5611 );
19. extern void GB_MS5611_Calculate_Temperature(GebraBit_MS5611* MS5611);
20. extern void GB_MS5611_Calculate_Temperature_Compensated_Pressure(GebraBit_MS5611* MS5611);
21. 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);
}
متن کد فایل آردوینو:
#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 را باز کرده و می توانید خروجی های سنسور را مشاهده کنید
در ادامه می توانید کتابخانه GebraBit_MS5611 , شماتیک و دیتاشیت ماژول را دانلود نمایید.
ویدیو خروجی برنامه:
ویدیو کارکرد ماژول به زودی آپلود می شود.