خانه >> آردوینو >> مدار اندازه گیری ضربان قلب با سنسور KY-039

مدار اندازه گیری ضربان قلب با سنسور KY-039

مدار اندازه گیری ضربان قلب
مدار اندازه گیری ضربان قلب

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

سنسور اندازه گیری ضربان قلب
سنسور اندازه گیری ضربان قلب

این سنسور در واقع شدت نور مادون قرمز رو به صورت آنالوگ برای ما تعیین میکنه . با استفاده از ورودی ADC اعدادی از ۰ تا ۱۰۲۴  رو به ما میده .

با قرار گرفتن انگشت بین LED مادون قرمز و گیرنده مادون قرمز با کم و زیاد شدن جریان خون در انگشت مقدار نور عبوری از انگشت هم تغییر میکنه . ما با اندازه گیری تعداد این تغیرات در واحد زمان ضربان قلب رو محاسبه میکنیم . 🙂

 

قطعات مورد نیاز برای ساخت مدار اندازه گیری ضربان قلب

برد آردوینو  Arduino UNO

ماژول سنسور تشخیص ضربان قلب KY-039

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

اگر ما فقط مقادیر خروجی سنسور رو ترسیم کنیم ، چیزی مثل شکل زیر رو داریم :

ضربان قلب
ضربان قلب

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

توی این شکل میتونیم ضربان قلب رو ببینیم 🙂 . الگوی ریز دندونه اره ای که توی شکا میبینید به خاطر منابع دیر نور مادون قرمز به مجود میاد .

اینجا میبینیم که بین مقادیر پایین و پالا تفاوت محسوسی وجود داره و با محاسبه این مقادیر در واحد زمان میتونیم ضربان قلب در دقیقه رو به دست بیاریم .

آزمایش عملی توضیحات بالا در مورد سنسور ضربان قلب KY-039 

اینجا کدهای ساده ای رو مینویسیم که هرمقداری رو که از سنسور تشخیص ضربان قلب KY-039   دریافت میکنیم به صورت خام به  ما نشون بده . مثل همون شکل اول .

 

این کد چیزی شبیه  شکل زیر رو به ما میده :

این شکل از طرق سریال مانیتور  Arduino IDE  نمایش داده میشه و از حروجی سریال برد آردوینو با بادریت ۹۶۰۰ دریافت میشه . برای اینکار از تابع ()Serial.print استفاده کردیم که مقادیر رو میگیره و در سریال مانیتور رسم میکنه . میبینید که مقادیر بسیار زیاد و دندانه دار است چون که مقادیر دریافتی از ۳۶۰ تا ۳۸۳ متفاوت است و فقط اعداد صحیح هستند .

هموارسازی و صافکردن شکل موج خروجی در مدار اندازه گیری ضربان قلب

برای داشتن خروجی صاف باید از آخرین ۲۰ مقدار خروجی سنسور تشخیص ضربان قلب KY-039 میانگین بگیریم .

خب برای اینکار ابتدا تعیین میکنیم که از چه تعداد اعداد دریافتی میخوایم میانگین بگیریم .

#define samp_siz 20

سپس یک آرایه میسازیم .

int reads[samp_siz];

کدهای زیر از جدیدترین مقادیری که از سنسور دریافت میکنه میانگین میگیره، مقادیر رو در یه آرایه ۲۰ تایی ذخیره میکنه. به این صورت که هربار با دریافت جدیدترین مقدار از سنسور اون رو جایگزین قدیمیترین مقدار آرایه میکنه.

همانطور که میدونیم میانگین چند عدد از جمع اعداد تقسیم بر تعداد آنها بدست میآید float(sum) / samp_size
قدیمیترین مقدار رو از مجموع مقادیر کم میکنه و بجاش جدیدترین مقدار خونده شده از سنسور رو با مجموع مقادیر جمع میکنه
همچنین مقدار جدید رو در آرایه جایگزین مقدار قدیمی میکنه ، بعدش میانگین رو بدست میاره . هربار یکی به مقدار ptr اضافه میشه که تعیین کننده عنصر آرایه هست .

مثلا مقدار ptr از صفر شروع شده. عضو صفرم آرایه که قدیمیترین هست از مجموع کم میشه بجاش جدیدترین مقدار با مجموع مقادیر جمع میشه و همچنین جایگزین عضو صفرم میشه، بعد از محاسبه میانگین یکی به ptr اضافه میشه و دوباره …

Ptr %= samp_size

باقیمانده تقسیم ptr با samp_size رو حساب میکنه و میریزه داخل ptr ، به عبارتی کارش اینه که وقتی مقدار ptr به samp_size یعنی در اینجا به ۲۰ رسید صفر میشه و این روند دوباره تکرار میشه..

ضربان قلب واقعی 

با یه آرایه ۲۰ تایی و  ۹۶۰۰  baud rate سریال مانیتورشبیه شکل زیر رو خواهیم داشت .

در اینجا ضربان واقعی قلب رو میبینید به صورت یه منحنی که با شیب تندی بالا میره و با شیب کم پایین میاد . همونطور که گفتم این پارازیت های ریزی که در منحنی میبینید مزبوط به نور ها و امواج مادون قرمز موجود در محیط هست . همانطور که میدونیم نویز برق شهر ۵۰هرتز هست که در واقع دوره تناوبش میشه ۲۰میلی ثانیه که روی مدار اندازه گیری ضربان قلب ما تاثیر گذاشته .

هدف اینه که نویز حاصل از برق شهر رو حذف کنیم. فرض کن یه سیگنال خالص برق شهر داریم اگه ازش در ۲۰میلی ثانیه میانگین بگیریم جواب میشه صفر.
خوب حالا ما اینجا توی خروجیمون یه سیگنالی داریم که شامل نویز برق شهر+سیگنال اصلیه، که اگه ازش در ۲۰میلی ثانیه میاگین بگیریم نویز برق شهره ازش حذف میشه و سیگنال اصلی باقی میمونه.

توی این کد تابع millis میاد زمان فعلی رو بر حسب میلی ثاینه بر میگردونه که در متغیر start نگهش میداریم.
داخل یه حلقه مرتب مقادیر سنسور رو میگیریم و با هم جمع میکنیم تا زمانی که ۲۰میلی ثانیه بگذره یعنیstart+20.
داخل حلقه n++ هم تعداد دفعات خواندن مقدار از سنسور رو بهمون میده که برای بدست آوردن میانگین reader /=n بهش احتیاج داریم.

 

خب با این تغییر الان شکل زیر رو داریم 

تصحیح کدهای مدار اندازه گیری ضربان قلب

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

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

 

 

 

این خیلی خوب کار میکنه 🙂 🙂 🙂

LED کوچک روی برد آردوینو بر اساس ضربان قلب چشمک میزنه ، دلیلش سادست ، چون هربار که ضربانها رو تشخیص میده یه مقدار رو برای پورت سریال ارسال میکنه برای چاپ در سریال مانیتور . اگر انگشت حرکت کنه در خواندن مقادیر خطا پیش میاد .

پیشرفت های بعدی مدار اندازه گیری ضربان قلب

الان برنامه بر اساس سه ضربان آخر محاسبات رو انجام میده ، بهتر و مناسبتر اینه که بر اساس ۱۵ نوسان آخر محاسبه کنیم سپس میانگین بگیریم . ۵ تا از مقادیری که خیلی متفاوت هستند در نظر نمیگیریم و کنار میگذاریم و دوباره میانگین میگیریم . اینطوری یک ضربان قلب  خوب و ثابت و دقیق به دست میاریم .

 

شماتیک مدار 

شماتیک مدار تست ضربان قلب
مدار ضربان قلب با آردوینو

 

برنامه نهایی مدار اندازه گیری ضربان قلب

 

 

پایان

 

🙂 😉

درباره ی هادی ندائی

هادی ندائی
هادی ندائی

همچنین ببینید

آموزش الکترونیک

آموزش الکترونیک به زبان ساده

آموزش الکترونیک ، یادگیری الکترونیک بسیار ساده تر از چیزیست که شما فکر می کنید …

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

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

چهار + پانزده =