پروژه سنسور MS5611 با Arduino

هدف ما از انجام این پروژه چیست؟

هدف این پروژه، اتصال و استفاده از سنسور فشار MS5611 توسط آردوینو می‌باشد که می‌توان برای اندازه‌گیری و پایش فشار و ارتفاع در محیط‌های مختلف استفاده شود. این سنسور قادر است فشار محیط را تشخیص داده و مقادیر دقیق فشار و ارتفاع را ارائه دهد، که آن را برای کاربردهایی مانند اندازه‌گیری ارتفاع در پروژه‌های هوانوردی، پیش‌بینی وضعیت آب‌وهوایی و نظارت بر فشار در محیط‌های حساس مناسب می‌سازد. کاربران می‌توانند با خواندن مقادیر این سنسور سیستم‌هایی توسعه دهند که به تغییرات فشار و ارتفاع واکنش نشان دهند و در نتیجه کارایی و دقت سیستم را بهبود بخشند.

در این آموزش چه چیزهایی یاد میگیریم؟

  • چگونه سنسور MS5611 را به آردوینو وصل کنید و ارتباط SPI را راه‌اندازی کنید.
  • کتابخانه‌ای را برای استفاده با آردوینو تغییر بدهید و بیشتر با نحوه کار داده‌های SPI آشنا بشوید.
  • چگونه میزان فشار و ارتفاع محیط را از سنسور بخوانید و از این داده‌ها برای کاربردهای واقعی استفاده کنید.
  • پروژه‌هایی مثل اندازه‌گیری ارتفاع در پروژه‌های هوانوردی، پیش‌بینی وضعیت آب‌وهوایی و نظارت بر فشار را با این سنسور اجرا کنید و مهارت‌های عملی برای ساخت سیستم‌های واکنش‌گرا بر اساس تغییرات فشار یاد بگیرید.

این آموزش به شما کمک می‌کند سنسور را به درستی راه‌اندازی کنید و داده‌ها را به صورت لحظه‌ای با آردوینو بخوانید.

برای شروع این پروژه به چه چیزهایی نیاز داریم؟

برای اجرای این پروژه به سخت‌افزار و نرم‌افزار نیاز داریم. عناوین این سخت‌افزارها و نرم‌افزارها در جدول زیر به شما ارائه شده است و می‌توانید با کلیک بر روی هر یک، آن را تهیه/دانلود کرده و برای شروع آماده شوید.

سخت افزارهای مورد نیازنرمافزارهای مورد نیاز
Arduino ProgrammerArduino 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 های سنسور در این بخش تعریف شده است :

C
/************************************************
 *              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 استفاده می شود:

C
 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 مشاهده نمود.

C
 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 ، کانفیک سنسور و دریافت داده از سنسور اعلان شده است:

C
 /********************************************************
   *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 می باشد،تعریف شده است:

C
GebraBit_MS5611 MS5611;

در بخش بعدی کد نوشته شده، با استفاده از تابع GB_MS5611_initialize(&MS5611_Module) ، ماژول GebraBit MS5611 را مقدار دهی می کنیم و در نهایت در قسمت while برنامه ،داده را از سنسور خوانده و مقادیر فشار و دما و ارتفاع به طور پیوسته دریافت میشود:

C
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:

C
#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 را باز کرده و می توانید خروجی های سنسور را مشاهده کنید 

با نظرات خود به تیم جبرا در بهبود کیفیت کمک کنید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

سبد خرید
پیمایش به بالا