تحلیل کتابخانه

تحلیل و بررسی کتابخانه PulseSensorPlayground.h

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

سنسور ضربان قلب Pulse Sensor، یکی از سنسورهای پرکاربرد در زمینه سنجش میزان ضربان قلب افراد است. این سنسور به سادگی با انواع بردهای آردوینو ،ESP و سایر میکروکنترلرها نظیر ARM قابل راه اندازی است. خروجی این سنسور نسبت به ضربان قلب، تغییر می کند. پیشتر در رابطه با راه اندازی این سنسور و نمایش داده ها در پلتفرم Things Speak، در این آموزش به طور کامل بحث شده است. در این آموزش به بررسی کتابخانه Pulse Sensor جهت راه اندازی و کار با این سنسور می پردازیم. به کمک این کتابخانه می توان به سادگی، میزان ضربان قلب را سنجید و به صورت نمودار در خروجی سریال، نمایش داد.  این کتابخانه گسترده وسیعی از میکروکنتترلرها، اعم از STM(تحت آردوینو)، ARDUINO و ESP را در بر می گیرد. این آموزش ضمن معرفی، الزامات و شرح توابع، به ارائه مثالی از کاربرد خواهد پرداخت. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


نصب کتابخانه PulseSensorPlayground.h


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

Analyze the PulseSensorPlayground.h library

 

با کلیک بر روی گزنیه Manage Libraries، می توانید وضعیت کتابخانه های نصب شده و لیستی از کتابخانه های جدید و بروز را مشاهده کنید. این مورد در تصویر زیر، قابل مشاهده است.

Analyze the PulseSensorPlayground.h library

 

مطابق فلش قرمز رنگ تصویر فوق، در کادر جستجو، با تایپ نام کتابخانه، می توان آن را یافته و سپس نصب نمود. در اینجا ما عبارت “PulseSensor” را تایپ می کنیم. پس از چند لحظه، کتابخانه زیر نمایش داده می شود. در اینجا با کلیک بر روی عبارت install، کتابخانه نصب خواهد شد.

Analyze the PulseSensorPlayground.h library

 

پس از اینکه کتابخانه با موفقیت نصب شد، نوبت به استفاده از آن می رسد. به همین منظور، ابتدا به بررسی الزامات فنی و بردهای مورد پشتیبانی کتابخانه PulseSensor می پردازیم. پس از آن، به معرفی توابع کلیدی و کاربردی پرداخته و در نهایت با ارائه مثالی، به نحوه استفاده از توابع در پروژه های عملی خواهیم پرداخت.

 


برد و ماژول های سازگار


در این بخش به بررسی بردها و ماژول های سازگار با کتابخانه PulseSensor می پردازیم. پیش از هر چیز، در نظر اشته باشید که ولتاژ خروجی این سنسور بین ۰ الی میزان تغذیه متصل به سنسور بوده، اما معولا ولتاژ خروجی، به اندازه نصف ولتاژ تغذیه خواهد بود. کتابخانه PulseSensor، با بردها و ماژول های زیر می تواند مرتبط شود.

  • برد آردوینو UNO
  • برد آروینو MEGA
  • برد های مبتنی بر ESP8266
  • بردهای مبتنی بر ESP32
  • میکروکنترلر ATtiny85
  • بردهای STM32 نظیر Nucleo، Discovery، Maple و…

توجه۱: بردهای STM32، تحت آردوینو قابل پشتیبانی توسط این کتابخانه هستند.

توجه۲: این کتابخانه جهت برخی محاسبات، از تایمرهای داخلی میکروکنترلرها استفاده می کند. برای برد آردوینو، تایمر ۱ در این کتابخانه استفاده می شود. از این رو، دقت نظر لازم را در نظر داشته باشید.

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

 


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


در این قسمت به بررسی توابع کلیدی و کاربردی کتابخانه Pulse Sensor می پردازیم. این توابع به همراه شرح جزییات در جدول زیر لیست شده اند. در نظر داشته باشید که ورودی های توابع، از سمت چپ به راست، به ترتیب اعداد یک به بعد را به خود اختصاص می دهند. به عبارت دیگر، سمت چپ ترین ورودی، ورودی شماره یک خواهد بود.

تابع ورودی ها شرح
void blinkOnPulse(int blinkPin, int sensorIndex = 0) ورودی اول: یکی از پایه های GPIO برد

ورودی دوم: شماره سنسور

 

به کمک این تابع می توانید با قرار LED بر روی پایه تنظیم شده در ورودی اول، به ازای تشخیص هر پالس، LED چشمک بزند

ورودی دوم در حالت عادی ۰ است. این ورودی جهت تنظیم اتصال چند سنسور است.

int getBeatsPerMinute(int sensorIndex = 0) شماره سنسور(برای اتصال یک سنسور، شماره را ۰ قرار دهید) خروجی این تابع تعداد ضربان قلب بر دقیقه را بر می گرداند
int getLatestSample(int sensorIndex = 0) شماره سنسور این تابع آخرین مقدار آنالوگ خوانده شده را بر می گرداند. این مقدار بین ۰ الی ۱۰۲۳ خواهد بود.
int getInterBeatIntervalMs(int sensorIndex = 0) شماره سنسور این تابع مقدار IBI را به صورت میلی ثانیه در خروجی قرار می دهد.

IBI فاصله زمانی بین دو ضربان است.

    boolean sawStartOfBeat(int sensorIndex = 0) شماره سنسور در صورتیکه ضربان قلب تشخیص داده شود، خروجی این تابع true و در غیر اینصورت false خواهد بود.
   void setSerial(Stream &output) ورودی جهت تعیین پورت سریال به کمک این تابع، خروجی سنسور ر سریال مانیتور نمایش داده خواهد شد. برای ورودی این تابع می توان ازSerial، Serial1 و یا سریال های نرم افزای استفاده نمود.
 int getPulseAmplitude(int sensorIndex = 0)

 

شماره سنسور این تابع، دامنه شکل موج فعلی را در خروجی قرار می دهد.
void setThreshold(int threshold, int sensorIndex = 0); ورودی اول: تنظیم مقدار آستانه

ورودی دوم: شماره سنسور

این تابع مقدار آستانه جهت اندازه گیری مقادیر را تنظیم می کند. به کمک این تابع می توانید تعیین کنید که از چه مقداری به بالا در ورودی آنالوگ، ورودی ها خوانده شود. مقدار پیشفرض ۵۵۰ است.

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

 


اجرای یک برنامه نمونه


در این قسمت به بررسی یک برنامه نمونه می پردازیم. در این برنامه، میزان ضربان قلب از سنسور خوانده شده و در سریال مانیتور نمایش داده می شود.

#define USE_ARDUINO_INTERRUPTS true   //به کمک این متغیر استفاده از وقفه ها فعال می شود. این عمل سبب افزایش سرعت خواهد شد. کتابخانه پالس از تایمر ۱ جهت زمانبندی و سایر محاسبات استفاده می کند.
#include <PulseSensorPlayground.h>    //قرار دادن کتابخانه pulse در برنامه
const int PulseWire = 0;       // با این متغیر، پایه ای از ورودی آنالوگ که به کابل دیتا سنسور متصل می شود، تعین می گردد.
const int LED13 = 13;          // تعیین پایه برای LED چشمک زن، به این پایه یک LED به همراه یک مقاومت حدودا ۲۰۰ اهمی متصل م یکنیم. با تشخیص هر پالس از سنسور، این LED چشمک خواهد زد.
int Threshold = 550;           // تعیین مقدار آستانه، مقدار پیش فرض ۵۵۰ بوده و به کمک این متغیر، مقادیر آنالوگی که بیش از مقدار آستانه باشند، خوانده می شوند.
                               
PulseSensorPlayground pulseSensor;  // ایجاد یک شی از کلاس ضربان قلب


void setup() {   

  Serial.begin(9600);        
  pulseSensor.analogInput(PulseWire);     //به کمک این تابع، پایه ای که خروجی سنسور به آن متصل است تعیین می شود. 
  pulseSensor.blinkOnPulse(LED13);       //به کمک این تابع، LED چشمک زن وابسته به ضربانتنظیم می شود.
  pulseSensor.setThreshold(Threshold);    //تنظیم مقدار آستانه
   if (pulseSensor.begin()) {
    Serial.println("ُSensor is ready to work");  
    Serial.flush();
  }
}



void loop() {

 int myBPM = pulseSensor.getBeatsPerMinute();  //خواندن میزان ضربان قلب و ذخیره مقدار خروجی در متغیر myBPM اتوجه داشته باشید که چنانچه شماره سنسور در ورودی قرار نگیرد، پیشفرض صفر خواهد بود

if (pulseSensor.sawStartOfBeat()) {            //در صورتیکه ضربان تشخیص داده شود وارد شرط می شویم. در این تابع هم عدم قرار دادن شماره سنسور، پیشفرض صفر خواهد بود.
 Serial.println("♥: "); 
 Serial.flush();
 Serial.print("BPM: ");    
 Serial.flush();                    
 Serial.println(myBPM);   
 Serial.flush();                      
}

  delay(20);                  

}

 


 قطعات سازگار با PulseSensor


  1. سنسور ضربان قلب
  2. انواع برد آردوینو
  3. انواع بردهای ESP
  4. انواع بردهای ARM
  5. انواع نمایشگرهای OLED

جمع بندی


در این آموزش به بررسی کتابخانه PulsSensor جهت راه اندازی و کار با سنسور ضربان قلب پرداختیم. این سنسور که یکی از ابزارهای کاربردی جهت پایش ضربان قلب است، به سادگی با بردهای آردوینو، ESP و حتی میکروکنترلرهای ARM نیز راه اندازی می شود. کتابخانه PulseSensor دارای طیف سیعی از توابع جهت تعامل و دریافت داده از سنسور ضربان قلب می باشد. در این آموزش به بررسی این توابع، عملکردو شرح هریک پرداخته ایم. در نهایت با ارائه مثالی از کاربرد، نحوه استفاده از این تابع را در یک نمونه برنامه، بررسی کرده ایم.

 

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

 

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

معین صابری

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

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

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