آموزش آردوینوپروژه های آردوینو

اتصال سنسور ضربان قلب به آردوینو (آموزش جامع)

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

قطعات لازم

  1. آردوینو Uno
  2. سنسور ضربان قلب
  3. نمایشگر OLED
  4. سیم های جامپر
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

قبلا در پروژه دیگری همین سنسور را به آردوینو متصل کرده و با استفاده از ThingSpeak مقادیر را به صورت آنلاین نشان دادیم.

سنسور ضربان قلب

سنسور ضربان قلب 3 پایه دارد : VCC، GND و پایه خروجی آنالوگ.

سنسور ضربان قلب

  • VCC: این پایه، پایه تغذیه ماژول سنسور است.
  • GND: این پایه، پایه زمین ماژول سنسور است.
  • Signal: این پایه، پایه سیگنال خروجی آنالوگ ماژول سنسور است.

نحوه کار سنسور ضربان قلب

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

نحوه کار سنسور ضربان قلب

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

اجزای سنسور ضربان قلب

اجزای سنسور ضربان قلب

در قسمت جلویی سنسور، فوتودیود و IR LED ها را برای تشخیص ضربان قلب داریم. در پشت سنسور هم، یک تقویت کننده عملیاتی (op-amp) برای تامین بهره مدار و یک دیود برای محافظت مدار در برابر ولتاژ معکوس داریم. به این شکل مدار از تخلیه الکترواستاتیکی و ولتاژ معکوس حفظ میشود.

چند خازن و مقاومت هم به عنوان فیلترهای RC به مداراضافه شده تا نویزها کاهش یابند.

سوالات متداول درباره ماژول سنسور نبض و ضربان قلب

1-آیا ماژول سنسور ضربان قلب بی خطر است؟

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

2-آیا میتوان سنسور ضربان قلب را در مصارف پزشکی به کار گرفت؟

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

3-آیا سنسور ضربان قلب برای تمام سنین و همه رنگ پوست ها قابل استفاده است؟

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

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

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

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

مدار ماژول سنسور ضربان قلب، شامل چندین المان ضروری است. در ابتدا، یک خازن فیلتر 10 میکروفارادی داریم که به دنبال آن یک LED سبز و یک مقاومت R 740 موجود است. این مقاومت نقش محدود کننده جریان را برای ماژول بازی میکند.

مدار، توان خود را از یک دیود دریافت میکند که خودش 2 وظیفه دارد : محافظت از مدار دربرابر ولتاژ معکوس و در امان نگاه داشتن آن از حالت گذرا.

توان بین دو المان کلیدی تقسیم میشود : تقویت کننده عملیاتی MCP6001  و تراشه سنسور فوتودیود APDS-9008

تراشه سنسور یک سیگنال خروجی دارای نویز و اعوجاج با دامنه کم تولید میکند. فیلترهای RC پایین گذر، نویز سیگنال را حذف کرده و op-ampها سیگنال فیلترشده را تقویت میکنند تا آماده پردازش در میکروکنترلر شود.

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

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

پایه های VCC (تغذیه) و GND (زمین) سنسور ضربان قلب را به ترتیب به پایه 5V و GND آردوینو متصل کنید.

سپس پایه Analog OUT سنسور را به یکی از پایه های ورودی آنالوگ آردوینو متصل کنید. ( مثل پایه A0)

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

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

int a = 0;
int lasta = 0;
int lastb = 0;
int LastTime = 0;
int ThisTime;
bool BPMTiming = false;
bool BeatComplete = false;
int BPM = 0;

متغیرهای صحیح (int) و بولی استفاده شده در برنامه را تعریف میکنیم.

متغیرهای a، lasta،lastb برای دنبال کردن مقادیر مربوط به نمایشگرOLED است. (که از کد شما حذف شده است.)

متغیرهای LastTime وThisTime برای اندازه گیری فواصل زمانی برای محاسبه BPM (ضربان در هر دقیقه) هستند.

BPMTiming و BeatComplete   پرچم هایی (از نوع بولین) برای کنترل BPM محاسبه شده هستند و درنهایت، خود متغیر BPM، ضربان قلب اندازه گیری شده را در خود ذخیره میکند.

#define UpperThreshold 520
#define LowerThreshold 510

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

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

void setup() {
  Serial.begin(9600);
}

تابع ()setup یک بار در شروع کار آردوینو فراخوانی میشود. ارتباط سریال را با نرخ باد 9600 آغاز میکند و میتوانیم داده را از آردوینو به سریال مانیتور در IDE آردوینو بفرستیم.

void loop() {
  ThisTime = millis();
  int value = analogRead(0);

تابع ()loop، شامل برنامه اصلی بوده و بعد از تابع setup() به طور مداوم اجرا میشود. در ابتدا، زمان لحظه فعلی را با استفاده از تابع ()milis همان طور که معلوم است بر حسب میلی ثانیه ذخیره میکند و سپس داده آنالوگ را به کمک تابع ()analogRead از پایه A0 آردوینو میخواند.

int b = 60 - (value / 16);

در اینجا، متغیر b را براساس داده آنالوگ خوانده شده درقسمت قبلی، محاسبه میکند.

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

 if (value > UpperThreshold) {
    if (BeatComplete) {
      BPM = ThisTime - LastTime;
      BPM = int(60 / (float(BPM) / 1000));
      BPMTiming = false;
      BeatComplete = false;
      tone(8, 1000, 250);
    }
    if (BPMTiming == false) {
      LastTime = millis();
      BPMTiming = true;
    }
  }

این بخش از کد بررسی میکند که آیا داده آنالوگ خوانده شده از سنسور، از UpperThreshold بزرگتر هست یا خیر. اگر بزرگتر است، آنگاه وارد بلوک کد میشویم.

دستور if درونی، بررسی میکند که BeatComplete درست هست یا خیر.(true) یا درست بودن این پرچم به معنی اتفاق افتادن و اتمام یک سیکل تپش قلب است. اگر یک سیکل کامل شده باشد، فاصله زمانی بین نبض ها بر حسب میلی ثانیه محاسبه شده و به BPM تبدیل میشود. سپس پرچم ها مطابق با حالت جدید تنظیم شده و با استفاده از تابع tone()، یک صدا تولید میشود.

دستورif  بعدی، نادرست بودن BPMTiming را بررسی میکند. (false) بودن یا نادرستی این پرچم به معنی شروع یک سیکل جدید است. بعد از ذخیره زمان لحظه فعلی در متغیر LastTime، BPMTiming را درست یا true میکند.

  if ((value < LowerThreshold) & (BPMTiming))
    BeatComplete = true;

در این قسمت، بررسی میکنیم که متغیر value (که همان داده آنالوگ ماست) از LowerThreshold کمتر شده و BPMTiming درست شده است یا خیر. تحقق شرط بالا، به معنی اتمام یک سیکل تپش قلب است. پس در ادامه، باید BeatComplete هم درست شود.

  if ((value < LowerThreshold) & (BPMTiming))
    BeatComplete = true;

درنهایت، با استفاده از کد بالا، BPM محاسبه شده را روی سریال مانیتور چاپ میکنیم و متغیر a را یک واحد افزایش میدهیم.

متغیر BPM با اجرای حلقه به طور مداوم به روز میشود.

موارد موجود در فایل : سورس کامل

4.3 (6 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

7 نظر

  1. با سلام.
    من چجور میتونم oled رو به پروژه متصل کنم؟کد آن چرا حذف شده؟و یا بدون نمایشگر چجور میتونم نتیجه پروژه رو ببینم آیا برنامه خاصی دارد؟لطفا جواب بدهید.با تشکر

    1. سلام عزیز
      نتیجه این کد در سریال مانیتور نمایش داده میشود

    2. توی سریال مانیتور اصلا نتیجه درستی نمیده و مثلا BPM تا 5000 میره دلیلش چیه چجور میتونم درستش کنم؟

  2. سلام
    اگه میشه سورس کد مربوط به به نمایشگرOLED رو داخل سورس کدا قرار بدید چون من آشنایی با این مبحس نداشتم الان هم نمیدونم
    باید چجوری تکمیلش کنم

    1. سلام عزیز
      برای یادگیری کار با نمایشگر اولد دوره آردوینو را مشاهده کنید

    1. سلام عزیز
      ممنون از اطلاع رسانی شما، اصلاح شد.

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

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