چگونه سنسور فشار و ارتفاع MS5611 را به آردوینو متصل کنیم؟

اگر میخواهید بدانید هواپیمای کنترلی شما تا چه ارتفاعی صعود کرده، بلندی گذرگاه کوهستانی را چقدر است، یا در آخرین پیادهروی خود شما و همراهانتان تا چه ارتفاعی رفتید؛ ماژول بارومتریک/آلتیمتر ارزانقیمت MS5611 میتواند این نیازها را برآورده کند.
مروری بر سخت افزار
هستهٔ این ماژول را یک حسگر فشار بارومتریک کوچک، بسیار سریع، دقیق، کممصرف و کمنویز از شرکت MEAS Switzerland با نام MS5611 تشکیل میدهد.

MS5611 قادر است فشار بارومتریک را در محدودهٔ 10 mbar تا 1200 mbar اندازهگیری کند و دقت مطلق آن در بازهٔ فشار 450 تا 1100 mbar برابر ±1.5 mbar است. خارج از این بازه، دقت تضمین شده برابر ±2.5 mbar است.
این حسگر برای کاربردهای آلتیمتر و واریومتر بهینه شده و رزولوشن فشار آن 0.012 mbar است که تقریباً به معادل ارتفاعی حدود 10 cm (4″) تبدیل میشود.
MS5611 دارای یک حسگر دمای داخلی روی چیپ است که برای جبران تغییرات محیطی و کالیبراسیون اندازهگیریها به کار میرود. این حسگر دمایی، دمای die را در محدودهٔ -40˚C تا +85˚C اندازه میگیرد و دقت آن ±0.8˚C اعلام شده است.
نیاز تغذیه
ماژول شامل یک رگولاتور دقیق MIC5205 با خروجی 3.3V و مبدل سطح ولتاژ است، بنابراین میتوانید آن را بدون نگرانی به میکروکنترلرهای با سطح منطقی 3.3V یا 5V متصل کنید.

در حین اندازهگیری، MS5611 کمتر از 1.4mA مصرف میکند و در حالت آمادهبهکار مصرف آن کمتر از 0.15µA است. این مصرف پایین امکان استفاده در دستگاههای باتریمحور مانند گجتهای پوشیدنی یا ساعتهای هوشمند را فراهم میکند.
رابطهای دیجیتال
MS5611 از دو رابط I2C و SPI پشتیبانی میکند. پین PS (Protocol Select) تعیین میکند کدام رابط فعال باشد.

طی کشیدن پین PS به LOW رابط SPI انتخاب میشود و با کشیدن PS به HIGH رابط I2C انتخاب میشود. روی ماژول یک مقاومت pull-up به مقدار 1K وجود دارد که این پین را به صورت پیشفرض HIGH نگه میدارد، بنابراین حالت پیشفرض ماژول I2C است.
I2C
در حالت I2C، سنسور از دو آدرس جداگانه پشتیبانی میکند: 0x77 و 0x76. این قابلیت اجازه میدهد دو ماژول MS5611 روی یک باس I2C قرار گیرند یا از برخورد آدرس با دستگاه دیگر جلوگیری شود.

پین CSB تعیینکنندهٔ آدرس I2C ماژول است. این پین دارای یک مقاومت pull-down داخلی 2.2K است. بنابراین اگر پین CSB را بدون اتصال رها کنید، آدرس پیشفرض 0x77 خواهد بود و اگر آن را به VCC متصل کنید خط به حالت HIGH کشیده شده و آدرس به 0x76 تغییر میکند.
SPI
سنسور قابلیت ارتباط از طریق SPI را نیز دارد. برای فعالسازی رابط SPI، پین PS را به زمین متصل کنید.
مشخصات فنی
مشخصات کامل ماژول به شرح زیر است:
| تغذیه | 3.3V تا 5.5V |
| مصرف جریان | ~1.4mA (هنگام اندازهگیری) |
| ~0.15µA (در حالت standby) | |
| بازهٔ اندازهگیری فشار | 10 تا 1200 mbar |
| دقت مطلق فشار | ±1.5 mbar |
| رزولوشن ADC | 24 bit |
| بازهٔ دما | -40˚C تا +85˚C |
| دقت دما | ±0.8˚C |
برای جزئیات بیشتر به سند دیتاشیت مراجعه کنید.
MS5611 Datasheet
پیناوت ماژول MS5611
در این بخش نگاهی به نام و عملکرد پایههای ماژول میاندازیم.

پایههای تغذیه
VCC پایه تغذیه است. میتوانید آن را به خروجی 5V آردوینو متصل کنید.
GND زمین مشترک منبع تغذیه و منطق است.
پایههای منطقی در حالت SPI
SCL پایهٔ ساعت SPI است و ورودی به چیپ محسوب میشود.
SDA پایهٔ Serial Data In (MOSI) است و برای دادههایی که از میکروکنترلر به MS5611 ارسال میشود به کار میرود.
CSB پایهٔ Chip Select است. اگر چند MS5611 را به یک میکروکنترلر وصل میکنید، میتوانید پایههای SDA، SDO و SCL را به اشتراک گذاشته و برای هر ماژول یک پایهٔ CSB مجزا اختصاص دهید.
SDO پایهٔ Serial Data Out (MISO) است و دادهها را از MS5611 به میکروکنترلر ارسال میکند.
PS پین انتخاب پروتکل است. برای فعالسازی ارتباط SPI این پین را LOW کنید.
پایههای منطقی در حالت I2C
SCL همچنین خط ساعت I2C است؛ آن را به خط ساعت I2C میکروکنترلر متصل کنید.
SDA نیز خط دادهٔ I2C است؛ آن را به خط دادهٔ میکروکنترلر متصل کنید.
CSB تعیینکنندهٔ آدرس I2C ماژول است. در وضعیت بدون اتصال، آدرس پیشفرض 0x77 است و در صورت اتصال به VCC آدرس 0x76 خواهد شد.
PS پین انتخاب پروتکل است. آن را بدون اتصال رها کنید تا رابط I2C فعال باشد.
سیمکشی ماژول MS5611 به آردوینو
حالا که با ماژول آشنا شدیم، نوبت به اتصال آن به آردوینو میرسد.
ابتدا VCC را به منبع تغذیه متصل کنید؛ بازهٔ 3V تا 5V مناسب است. از همان ولتاژی استفاده کنید که منطق میکروکنترلرتان بر اساس آن است. برای اکثر آردوینوها این مقدار 5V است و برای دستگاههای با منطق 3.3V از 3.3V استفاده کنید. سپس GND را به زمین مشترک وصل کنید.
پایهٔ SCL را به خط ساعت I2C و SDA را به خط دادهٔ I2C آردوینو متصل کنید. توجه داشته باشید که مکان فیزیکی پایههای I2C در بردهای مختلف آردوینو متفاوت است. در بردهای دارای چینش R3، پایههای SDA و SCL در هدرهای کنار AREF قرار دارند و به ترتیب به عنوان A4 (SDA) و A5 (SCL) شناخته میشوند.
تصویر زیر سیمکشی را نشان میدهد.

پس از اتصال ماژول به آردوینو آمادهٔ نوشتن کد هستید.
نصب کتابخانه
برای خواندن دادهها از سنسور باید کتابخانهٔ MS5611 را نصب کنید. این کتابخانه در Arduino Library Manager موجود است.
برای نصب به مسیر Sketch > Include Library > Manage Libraries… بروید. صبر کنید تا Library Manager فهرست کتابخانهها را دانلود و فهرست نصبشدهها را بهروز کند.

در کادر جستجو عبارت “ms5611” را تایپ کنید و کتابخانه را نصب کنید.

WARNING EXPERIMENTAL:
نویسندهٔ Rob Tillart نسخهٔ تجربی MS5611_SPI را نیز نوشته است تا بهصورت SPI با MS5611 ارتباط برقرار کند. او متوجه شد که انتخاب پروتکل SPI بهنوعی باعث گرمشدن داخلی میشود که منجر به قرائتهای دمایی نادرست میگردد. به همین دلیل در این آموزش تنها رابط I2C پوشش داده شده است.
کد آردوینو — خواندن فشار و دما
در ادامه یک اسکچ سادهٔ آردوینو آورده شده است. آن را آپلود کنید و خروجی فشار و دما را در سریال مانیتور مشاهده خواهید کرد.
#include "MS5611.h"
MS5611 MS5611(0x77);
void setup() {
Serial.begin(115200);
while(!Serial);
if (!MS5611.begin()) {
Serial.println("MS5611 not found, check wiring!");
while (1);
}
}
void loop() {
MS5611.read();
Serial.print("Temperature: ");
Serial.print(MS5611.getTemperature(), 2);
Serial.print("\tPressure: ");
Serial.print(MS5611.getPressure(), 2);
Serial.println();
delay(1000);
} توجه کنید که برای مشاهدهٔ خروجی باید سریال مانیتور را روی 115200 baud تنظیم کنید.
خروجی سریال حاوی مقادیر فشار و دما خواهد بود. سنسور را کمی جابجا کنید و تغییرات مقادیر را مشاهده کنید.

توضیح کد
کد نسبتاً ساده است. در ابتدا کتابخانهٔ MS5611.h اضافه شده و یک شیء در فضای گلوبال ساخته میشود: MS5611 MS5611(0x77). دقت کنید که شیء با آدرس I2C بهعنوان پارامتر ساخته میشود.
#include <Wire.h> MS5611 MS5611(0x77);
در تابع setup، ارتباط سریال با کامپیوتر مقداردهی اولیه میشود و سپس تابع begin() فراخوانی میگردد.
تابع MS5611.begin() رابط I2C را مقداردهی کرده، شناسهٔ چیپ را بررسی میکند، سپس با ارسال soft-reset چیپ را ریست کرده و پس از بیدار شدن صبر میکند تا سنسور برای انجام کالیبراسیون اولیه آماده شود.
void setup() {
Serial.begin(115200);
while(!Serial);
if (!MS5611.begin()) {
Serial.println("MS5611 not found, check wiring!");
while (1);
}
} در حلقهٔ اصلی با فراخوانی MS5611.read() یک خواندن انجام میدهیم. بعد از آن میتوانیم از متدهای شیء MS5611 برای دسترسی به مقادیر استفاده کنیم.
MS5611.getTemperature() مقدار دما را برمیگرداند.
MS5611.getPressure() مقدار فشار بارومتریک را برمیگرداند.
void loop() {
MS5611.read();
Serial.print("Temperature: ");
Serial.print(MS5611.getTemperature(), 2);
Serial.print("\tPressure: ");
Serial.print(MS5611.getPressure(), 2);
Serial.println();
delay(1000);
}











