دسته‌بندی

تحلیل و بررسی کتابخانه DFROBOT Max30102

نوشته شده توسط معین صابری

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


نصب کتابخانه DFROBOT MAX30102


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

  1. ابتدا فایل فشرده کتابخانه را با کلیک بر روی این لینک و انتخاب گزینه code->zip دانلود کنید.
  2. فایل را با گلیک و انتخاب گزینه extract here، از حالت فشرده خارج کنید.
  3. این فایل را در مسیر نصب آردوینو و در فولدر libraries، قرار دهید. مسیر نصب آردوینو معمولا در درایو C و در قسمت program files قرار دارد.

توجه: پس از خارج سازی فایل دانلود شده از حالت فشرده، با کلیک بر روی فولدر unzip شده، می بایست تصویر زیر مشاهده گردد.

نصب کتابخانه سنسور MAX30102 پروژه پالس اکسی متر - دیجی اسپارک

 


نکات فنی و بردهای مورد پشتیبانی کتابخانه DFROBOT MAX30102


پس از نصب کتابخانه، نوبت به تحلیل فنی و بردهای مورد پشتیبانی می رسد. از آنجاییکه سنسور MAX30102 از پروتکل I2C پشتیبانی می کند، بنابراین از این کتابخانه می توانید در بردهای آردوینو و ESP استفاده نمایید. در کنار این، توجه داشته باشید که شما از این کتابخانه می توانید سنسورهای دیگری، غیر از سنسور توسعه داده شده توسط DFROBOT را راه اندازی کنید. جهت استفاده از این کتابخانه، می بایست سنسور را به پایه های I2C سخت افزاری متصل کنید. این پایه ها در بردهای مختلف مطابق جدول زیر است.

شماره پایه ها نام برد
GPIO5->SCL

GPIO4->SDA

ESP8266
A4->SDA

A5->SCL

UNO
A4->SDA

A5->SCL

MEGA

 

توجه داشته باشید که سنسورهای MAX30102 موجود در ایران، با برد بنفش رنگ عملکرد دقیق و صحیح با بردهای ESP با تغذیه ۲٫۶ ولت دارند. از این رو دقت نظر لازم را در نظر داشته باشید.

 


توابع کلیدی کتابخانه DFROBOT MAX30102


پس از نصب و بررسی نکات فنی، نوبت به تحلیل و بررسی توابع کتابخانه می رسد. جدول زیر شرح این توابع را معرفی می کند. توجه داشته باشید که در این جدول ورودی ها از چپ به راست، شماره های ۱ به بعد را به خود اختصاص می دهند.

شرح ورودی تابع
به کمک این تابع سنسور راه اندازی می شود. توجه داشته باشید که هر دو ورودی این تابع اختیاری است. اما ورودی اول اشاره گر به پورت I2C است. شما می توانید پورت i2C را به صورت نرم افزاری تعریف کنید و سپس در این ورودی به آن اشاره کنید.

ورودی دوم مربوط به آدرس سنسور است. آدرس پیشفرض سنسور برابر با ۰x57 است.

خروجی تابع از نوع بولین بوده که در صورت عدم راه اندازی، مقدار false در خروجی قرار می گیرد.

ورودی اول اشاره گر به پورت I2C

ورودی دوم آدرس پورت I2C

bool begin(TwoWire *pWire = &Wire, uint8_t i2cAddr = MAX30102_IIC_ADDRESS)
 

-ورودی اول: میزان شدت نور LED مادون قرمز ماژول، این مقدار بین ۰ الی ۲۵۵ قابلی تنظیم است. با قرار گیری روی ۲۵۵ جریان مصرفی ۵۰ میلی آمپر خواهد شد.

-ورودی دوم: نرخ میانگیری نمونه ها، به کمک این مقدار، تعداد دفعاتی که می بایست نمونه ها جهت میان گیری خوانده شوند، تعیین می شود. به کمک این روش، داده ها خوانده و سپس میانگین گیری م یشوند. این امر سبب افزایش دقت خ.واهد شد.مقدار پیشفرض ۴ است.

 

-ورودی سوم: در این پارامتر مد LED تعیین می شود. این LED هم به صورت نور و هم به صورت IR می تواند فعال باشد.

 

-ورودی چهارم:  در این پارامتر نرخ نمونه برداری تعیین می شود. مقدار پیشفرض ۴۰۰ نمونه در ثانیه است.

 

-ورودی پنجم: در این پارامتر مقدار عرض پالس LED مادون قرمز تعیین می شود. مقدار پیشفرض بر روی بیشینه است.

 

 

-ورودی ششم: به کمک این پارامتر، م یتوانید دقت اندازه گیری ADC داخلی سنسور را تعیین کنید. این مقدار به صورت پیشفرض ۴۰۹۶(۲ به توان۱۲، یعنی ۱۲ بیتی است)

ورودی های این تابع تنظیمات مربوط به عملکرد سنسور را تعیین می کنند. ستون بعدی این ورودی ها را شرح می دهد. void sensorConfiguration(uint8_t ledBrightness = 0x1F, uint8_t sampleAverage = SAMPLEAVG_4, \

uint8_t ledMode = MODE_MULTILED, uint8_t sampleRate = SAMPLERATE_400, \

uint8_t pulseWidth = PULSEWIDTH_411, uint8_t adcRange = ADCRANGE_4096);

این تابع مقدار خوانده شده از سنسور مادون قرمز را در خروجی قرار می دهد. این سنسور پارامترهای پزشکی را از طریق نور مادن قرمز بدست آورده و محاسبه می کند. این تابع خروجی خام سنسور IR را در خروجی قرار می دهد. بدون ورودی uint32_t getIR(void)
این تابع دمای بدن را بر حسب سانتی گراد محاسبه کرده و به صورت عدد اعشاری در خروجی خود قرار می دهد. بدون ورودی float readTemperatureC();
این تابع دمای بدن را بر حسب فارنهایت  محاسبه کرده و به صورت عدد اعشاری در خروجی خود قرار می دهد. بدون ورودی   float readTemperatureF();
ورودی اول: میزان اکسیژن خون

 

ورودی دوم: در صورتیکه مقدار اکسیژن خون اندازه گیری شده مقداری معتبر باشد، این مقدار ۱ خواهد شد.

————–

ورودی سوم: میزان ضربان قلب

————–

ورودی چهارم: در صورتیکه مقدار ضربن قلب  اندازه گیری شده مقداری معتبر باشد، این مقدار ۱ خواهد شد.

 

ورودی های این تابع در حقیقت خروجی های آن هستند. این تابع پس از محاسبه پارامترهای پزشکی، آن ها را در ورودی ها قرار می دهد. void heartrateAndOxygenSaturation(int32_t* SPO2,int8_t* SPO2Valid,int32_t* heartRate,int8_t* heartRateValid);
به کمک این تابع می توانید سنسور را ریست نرم افزاری کنید. با ریست کردن سنسور، تمامی تنظیمات آن پاک خواهند شد. بدون ورودی   void softReset();
به کمک این تابع سنسور در حالت کم مصرف قرار می گیرد.

با فراخوانی این تابع تنظیمات حفظ شده و پاک نخواهند شد.

بدون ورودی   void shutDown();
به کمک این تابع سنسور از حالت خواب(کم مصرف) خارج می گردد. بدون ورودی void wakeUp()
به کمک این تابع، زمانی کاه بافر از داده ها پر باشد و داده جدیدی وارد شود، داده های جدید از خانه شماره ۰ شروع به پر شدن کرده و بافر را پر خواهند کرد. بدون ورودی void enableFIFORollover();
این تابع بازنویسی داده های جدید در بافر را زمانیکه بافر پر شده، متوقف می کند. بدین ترتیب اگر داده های جدید دریافت شوندو بافر پر باشد، داده های جدید در بافر نوشته نشده و این داده ها از دست خواهند رفت. بدون ورودی void disableFIFORollover()

 

در ادامه تحلیل و بررسی توابع کتابخانه، نوبت به اجرای یک نمونه برنامه می رسد. اما از آنجاییکه پیشتر در آموزشی به اجرای دقیق توابع و راه اندازی سنسور پرداخته ایم، با کلیک بر روی این لینک می توانید آموزش آن را به طور کامل مطالعه نمایید.

 


لوازم متناسب با کتابخانه


ماژول ESP8266-12E

ماژول مبدل SMD به DIP

ماژول سنسور پالس اکسی متر MAX30102

 


جمع بندی


در این آموزش به تحلیل و بررسی کتابخانه DFROBOT MAX30102 پرداختیم. به کمک این کتابخانه می توانیم به سادگی و بدون نیاز به پیچیدگی، سنسور پالس اکسی متر MAX30102 را راه اندازی کنیم. این کتابخانه دارای توابع متعدد جهت راه اندازی و کار با این سنسور است. به کمک این توابع می توانیم به سادگی و در سریعترین زمان ممکن، پارامترهای اکسیژن خون، ضربان قلب و دمای بدن را اندازه گیری نماییم.

 

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

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۸ دیدگاه

  • سلام مهندس ایا میشه همین کدها رو بجای ماژول esp برای مثال روی اردوینو نانو اجرا کرد و بدون خطا نتیجه گرفت ؟؟
    ( چون نوشته بودید یجا با یونو فک کنم مشکل حافظه هست )

  • سلام مهندس ایا میشه بجای ماژول esp از اردوینو uno یا nano استفاده کرد و همون کد هارو روی اردوینو اپلود کرد ؟؟

    • پیشنهاد می کنم از ESP حتما استفاده کنید، هم به دلیل حافظه بیشتر و هم به دلیل عدم وجود مشکل سطح منطقی،
      یک سوال
      آیا راه اندازی ESP برای شماسخت به نظر می رسد؟ دلیل اینکه تمایل به کار با ESP ندارید چیست؟

      • من تازه کارم و پروژه کارشناسیم یه جورایی شبیه ساخت پالس اکسیمتره.

        میخاستم اول یچیزی رو با خود اردوینو پیاده سازی کنم.
        برای همین گفتم بپرسم ایا میشه از خود اردوینو استفاده کرد و همین کدا رو روی اون پیاده سازی کرد یا خیر

        • بله اما مشکلاتی خواهید داشت، کمبود حافظه و عدم خواندن صحیح
          لطفا روی برد ESP تست و اجرا کنید.

  • سلام وقتتون بخیر
    من میخوام با stm32 مدل L راه بندازمش میخام بیینم اوکیه و اینکه چقدر حافظه لازم داره ؟