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

ساخت اکسی متر با آردوینو (اندازه گیری اکسیژن خون و ضربان قلب)

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

این پروژه مبتنی بر سنسور Pulse-Oximeter همانند دستگاه های پزشکی موجود است اما این پروژه برای اهداف پزشکی نیست. لطفاً برای ارزیابی وضعیت بیمار از این موارد استفاده نکنید و همیشه از یک دستگاه مناسب پزشکی استفاده کنید. این دستگاه فقط برای سرگرمی و اهداف یادگیری در نظر گرفته شده است.

پروژه های قبلی ما در مورد ضربان قلب را مشاهده کنید:

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

این یک مدار بسیار ساده است. پایه های A5 و A4 برد آردوینو نانو به سنسور پالس اکسیمتر 30100 و نمایشگر OLED متصل می شوند. هر دو پایه از مقاومت پول آپ با ارزش 4.7 کیلو اهم استفاده می کنند.

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

ما از صفحه نمایش OLED استفاده می کنیم زیرا همه دستگاه های پالس اکسی متر موجود در بازار از صفحه نمایش OLED استفاده می کنند. برای این پروژه ، ما از صفحه نمایش OLED مبتنی بر I2C با اندازه 1.3 اینچ استفاده می کنیم. این نمایشگر دارای رزولوشن 128×64 و تراشه کنترل SSD1306 است.

قطعات مورد نیاز

  • آردوینو نانو
  • مقاومت 4.7 کیلو اهم برای پول آپ خطوط I2C
  • سنسور MAX30100
  • صفحه نمایش OLED با وضوح 128×64 مبتنی بر SSD1306
  • منبع تغذیه 5 ولت با حداقل جریان 300mA
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

سنسور MAX30100

قبل از ورود به پروژه ، بیایید مولفه اصلی یعنی سنسور MAX30100 را معرفی کنیم. این یک ماژول ساده است که با میکروکنترلر از طریق ارتباط I2C ارتباط برقرار می کند و اطلاعات SpO2 و Pulse را به  میکروکنترلر ارائه می کند. به زبان ساده ، این سنسور می تواند  اکسیژن را شناسایی کند و ضربان قلب را حس کند.

سنسور اکسی متر MAX30100

ماژول سنسور فوق با دامنه 1.8 ولت تا 5.5 ولت کار می کند. مقاومت های پول آپ برای پایه های I2C در این ماژول گنجانده شده است.

کد اوکسی متر مبتنی بر آردوینو

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

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>

از ENABLE_MAX30100 برای تنظیم بیت فعال MAX30100 به عنوان 1 استفاده می شود. بعد ، SCREEN_WIDTH و SCREEN_HEIGHT را داریم که باید مقدار دقیق وضوح صفحه نمایش OLED باشند.

#define ENABLE_MAX30100 1
#define SCREEN_WIDTH 128 // طول نمایشگر OLED
#define SCREEN_HEIGHT 64 //عرض نمایشگر OLED

وقتی پالس به عنوان عملکرد داده شده در دسترس است، عملکرد برگشتی تعریف می شود.

void onBeatDetected()
{
  Serial.println("Beat!");
  heart_beat(&xPos);
}

سنجش اکسیژن خون و ضربان قلب آردوینو

در void setup موارد زیر انجام شده است:

  1. فعال کردن درایور نمایشگر I2C
  2. پاک کردن صفحه نمایش ، تنظیم اندازه متن ، رنگ متن و تنظیم موقعیت مکان نما
  3. چاپ Pulse Oximeter
  4. تنظیم مکان انیمیشن Heartbeat
  5. راه اندازی MAX30100
  6. تنظیم موقعیت مکان نما برای اطلاعات ضربان قلب و spo2.

فعال کردن درایور نمایشگر I2C:

if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
  Serial.println(F("SSD1306 allocation failed"));
  for (;;); // Don't proceed, loop forever
}

پاک کردن صفحه نمایش ، تنظیم اندازه متن ، رنگ متن و تنظیم موقعیت مکان نما:

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(20, 18);

چاپ متن پالس اکسی متر بر روی صفحه نمایش OLED:

display.print("Pulse OxiMeter");

تنظیم مکان انیمیشن Heartbeat:

  int temp1 = 0;
  int temp2 = 40;
  int temp3 = 80;
  heart_beat(&temp1);
  heart_beat(&temp2);
  heart_beat(&temp3);
  xPos = 0;

راه اندازی MAX30100:

if (!pox.begin()) {
  Serial.println("FAILED");
  for (;;);
} else {
  Serial.println("SUCCESS");
}

تنظیم جریان MAX30100 LED و ثبت عملکرد برگشت تشخیص ضربان:

pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
  // بازخورد تشخیص ضربان قلب
  pox.setOnBeatDetectedCallback(onBeatDetected);

با فراخوانی دو عملکرد ، مقدار BPM و SPO2 را دریافت کنید:

با فراخوانی این عملکرد در قسمت void loop ، می توانیم مقدار جدید را از حسگر دریافت کنیم.

pox.getHeartRate(); and pox.getSpO2();

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

4.5 (15 نفر)

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

محمد رحیمی

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

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

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

68 نظر

    1. سلام عزیز
      با نرم افزار winrar باز کنید.

  1. سلام امکانش هست آماده این دستگاهو ازتون بخرم؟
    اگر بله لطفا یه راه ارتباط با خودتون هم بهم بگید.
    تشکر

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

  2. سلام خسته نباشید
    کتابخانه max30100 را باید چکار کرد؟!
    ارور = include
    “MAX30100_pulseOximeter.h”

  3. سلام مهندس
    این مدار بگیر نگیر داره گاهی اوقات با اینکه انگشت روی سنسور هست پارامتر ارسال نمیکنه،راهی برای بهبود عملکرد یا افزایش حساسیتش نیست؟
    تشکر

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

  4. سلام وقتتون بخیر✨
    ممنون از اطلاعات مفید و جالب و کاملی که ارائه دادین
    من کدهارو طبق چیزی که شما گفتین زدم و ارور هارو هم اوکی کردم فقط مکس سی صد روشن نمیشه و هیچ ایده ای ندارم که چرا 🥲🥲🥹
    لطفاً راهنمایی کنید🙏🏻💐

  5. سلام وقت بخیر من پروژه رو درست کردم کار کرد ، ولی تنها مشکلی که داره اینه که بعضی وقتا که روشنش میکنم خود به خود صفحه فقط می‌نویسه pulse oximeter و به مرحله بعد هم نمیره و حتی ماژول max30100 هم روشن نمیشه ، علتش چیه و چجوری باید درستش کنم ؟ در ضمن من هر از گاهی تو برنامه نویسی
    error downloading downloads .ardoino .cc/package/package_index _json

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

  6. سلام وقت بخیر ، من کتابخانه ها رو از خود نرم افزار آردوینو دانلود کردم مشکلی پیش نمیاد و کار میکنه ؟؟؟!!!!
    و این که خط ۱۴۸ تا ۲۴۸ برای چیه ؟!

  7. سلام من این ارور رو دارم ، چجوری باید درستش کنم ، لطفا راهنمایی کنید اصلا از آردوینو سر در نمیارم
    C:\Users\dell\Documents\Arduino\oximeter1\oximeter1.ino: In function ‘void heart_beat(int*)’:
    oximeter1:240:3: error: expected ‘;’ before ‘display’
    display.drawPixel(*x_pos + 26, 8, SSD1306_WHITE);
    ^~~~~~~
    exit status 1
    expected ‘;’ before ‘display’

    1. سلام عزیز
      احتمالا یک سمی کالن اشتباها پاک کردید

  8. سلام عزیز
    جسارتا،این کتابخانه کاملی که در سایت شریفتون هست و نوشته شده شامل انواع ماژول هاو…، ممکنه این ۲ قطعه ای که میخوام (آردوینو uno ch340 و max30100) داخلش فوت پرینت یا کتابخانه اش باشه؟ خیلی ممنون.

  9. سلام عزیز
    بلدم‌ کار باهاش، من فقط منظورم پیدا کردن فوت پرینتای قطعاتی بود که ذکر کردم خدمتتون و جایی پیدا نکردم، اگر که امکان داره، میتونید لطف کنید کجا میتونم کتابخانه هاشو پیدا کنم؟

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

  10. سلام عزیز، الهی شکر جواب داد، تشکر از لطفتون.
    امکان داره لطفا این مورد رو هم کمک کنید؟
    کتابخانه یا فوت پرینت قطعات آردوینو مدل Ch340 و ماژول سنسور پالس اکسی متر برای آلتیوم دیزاینر را کجا میتونم تهیه کنم؟ تو اینترنت مدل uno ch340 و پالس اکسی متر پیدا نکردم، فقط موفق شدم نمایشگر oled رو پیدا کنم. تشکر فراوان از لطفتون.

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

  11. سلام عزیز،من برد اردوینو یونو از نوع ch340 دارم و از oled با وضوح 128*64 استفاده میکنم، و هیچ جوره سنسور برام روشن نمیشه،
    باتوجه به چیزایی که دارم،باید کد رو عوض کنم؟ مثلا خط شما برای oled وضوح ۳۲ نوشتین درسته؟ من ۶۴ خریدم و جای دیگه نباید کد رو عوض کنم؟ممنون میشم راهنمایی کنید چون هرکاریش کردم واقعا سنسور پالس روشن نمیشه. تشکر

    1. سلام عزیز
      ابعاد نمایشگر ارتباطی به سنسور اکسیژن ندارد. بهتر هست ابتدا کد راه اندازی سنسور اکسیژن به تنهایی را آپلود کنید اگر دیدید سنسور شما سالم هست و مقادیر را نمایش میدهد سپس کد مربوط به این پروژه را آپلود کنید.

  12. سلام عزیز،الهی شکر برنامه ریخته شد ممنون،فقط یه سوال،اونجاهایی که نوشته شده ۳.۳ ولت،امکان داره از ۵ ولت ورودی خود اردوینو استفاده کرد و اونجاهای ۳.۳ ولت رو به ۵ ولت وصل کنم؟تشکر

    1. سلام عزیز
      چرا برعکس میخواهید متصل کنید؟
      5 ولت را به 5 ولت و 3.3 ولت را به 3.3 ولت روی برد متصل کنید.

  13. سلام مجدد وقت بخیر،
    ببخشید اینبار این ارور میده دوباره در خط 112 برنامه:
    Compilation error: ‘SSD1306_BLACK’ was not declared in this scope
    ممنون میشم راهنمایی فرمایید تشکر.

    1. سلام عزیز
      کتابخانه ها را نصب کرده اید؟

  14. سلام عزیز ، من خط 240 این ارور میده، امکان داره راهنمایی فرمایید؟ باتشکر
    Compilation error: expected ‘;’ before ‘display’

    1. سلام عزیز
      احتمالا کد را تغییر دادید یک ; حذف شده است.

  15. سلام وقتتون بخیر
    اگر بخواهیم یک بازر برای حد بالای Heart rate و حد پایین spo2برای اعلام خطر استفاده کنیم چه کدی باید بزنیم و کجای برنامه اضافه کنیم

  16. سلاavr-g++: error: C:\Users\negin\AppData\Local\Temp\arduino-sketch-B26B10050962DA729D61582454F4F8FC\sketch\?????.ino.cpp: Invalid argument
    avr-g++: warning: ‘-x c++’ after last input file has no effect
    avr-g++: fatal error: no input files
    compilation terminated.

    exit status 1

    Compilation error: exit status 1
    مشکل خطا از چیه مهندس؟

    1. سلام عزیز
      فایل را با نام فارسی ذخیره نکردید؟
      در یک جای دیگر پروژه را ذخیره کنید و اگر باز هم ارور داد متن کامل را ارسال کنید

  17. سلام وقتتون بخیر
    برای راه اندازی ماژول و استفاده از اولد برای نمایش مقادیر نمیتونیم از کدهای این سایت استفاده کنیم؟
    https://lastminuteengineers.com/max30100-pulse-oximeter-heart-rate-sensor-arduino-tutorial/

    ممنون میشم راهنماییم کنید چون کد هایی که شما گذاشتید با خطا مواجه میشه برام :))))

    1. سلام عزیز
      بله میتونید استفاده کنید، همچنین اگر خطایی که دریافت میکنید را اعلام کنید برای رفع خطا راهنماییتون میکنیم

  18. سلام مهندس ببخشید که اینقدر سوال میکنیم مشکل شناسایی حل شده موقعه انتقال ارور میده compilation error exit status 1 ممنون

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

  19. ببخشید بزرگوار موقع پرو گرام کردن آردوینو شناسایی نمیشه که برنامه رو داخل پروگرام کنیم اگر میشه راهنمایی کنید ممنون

  20. سلام وقت بخیر برای پروگرام کردن باید کتابخونه این ماژول رو داشته باشیم ولی باید از کجا دانلود کنم ممنون میشم راهنمایی کنید

    1. سلام عزیز
      به انگلیسی سرچ کنید قابل دانلود هستند

    2. سلام وقتتون بخیر من تازه کار با آرداینو رو یاد گرفتم این کد که شما گفتید رو کپی کردم و در آخر صفحه با ارور compilation terminated .exit status1 MAX30100_PAULSEOMIMETEE.H : NO such file or directory مواجه شدم ممنون میشم اگه کمکم کنید که از صفر تا صد باید چیکار کنم ؟

  21. سلام
    بسیار عالی
    می بخشید من 8 سری از قطعات برای ساخت پالس اکسی متر لازم دارم لطفا بفرمائید چگونه تهیه کنم

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

  22. سلام داداش کارت عالیه فقط یچیزی اگه میشه ی کمک بم بکن OLED من کوچیکتره میخام ضربان فقط بم نشون بده چیا رو باید حذف کنم ؟؟

    1. سلام عزیز
      دستور هایی مثل دستور زیر برای تعیین موقعیت هستند
      display.setCursor(20, 18);
      دستور هایی مثل دستور زیر هم برای تعیین متن چاپ هستند
      display.print(“Pulse OxiMeter”);
      با توجه به نیازتون این دستورات رو ویرایش یا حذف کنید

  23. با سلام
    بنده همین مدار رو بستم و مقادیر ولتاژ رو هم دادم . ولی هنگامی که پایه های sda و scl در مدار هستن نه oled و نه سنسور روشن نمیشوند ولی بعد از خارج کردن این دو پایه oled روشن میشود . میشه راهنمایی کنید ؟

    1. سلام عزیز
      ابتدا یک پروژه ساده مثل blink رو آپلود کنید اگر صحیح عمل کرد مشکل از اتصالات هست، اتصالات رو بررسی کنید

  24. سلام
    برای بهبود نتایجی که از ضربان قلب گرفتیم باید چیکار کنیم ؟

  25. سلام مهندس نمیخوام ضربان قلب رو نشون بده فقط می‌خوام spo2 رو نشون بده باید کدوم خط رو ویرایش کنم که BPM رو نشون نده؟

    1. سلام عزیز
      خط 113 تا 199 رو پاک کنید

  26. سلام مهندس من فایل سورس رو دانلود کردم ولی الان که دارم وریفای میکنم توی نرم افزار آردوینو این ارور
    (MAX30100_PulseOximeter.h:No such file or directory)
    رو برای این خط
    (“include “MAX30100_PulseOximeter.h#)
    میده مشکل از چیه؟

    1. سلام عزیز
      باید کتابخانه MAX30100_PulseOximeter.h رو نصب کنید

  27. سلام مهندس خسته نباشید اگه صفحه نمایشمون وضوحش ۱۲۸ در ۶۴ باشه مشکلی ایجاد میکنه؟

    میتونم عدد عرض نمایشگر رو به جای ۳۲ روی ۶۴ تنظیم کنم و مشکلی ایجاد نشه؟

    1. سلام عزیز
      اگر نمایشگر OLED شما با درایور SSD1306 هست مشکلی نیست فقط ابعاد و مکان متن ها رو در کد تغییر بدید

  28. سلام من از esp8266 استفاده میکنم همین کد رو میشه استفاده کرد؟

    1. سلام عزیز، تست نکردم حقیقتا خودتون بررسی کنید احتمالا باید کد رو تغییرات بدید

  29. سلام ممنون میشم کمک کنید
    آخه من کتاب خونه ی
    include <Fonts/FreeSerif9pt7b.h #
    رو پیدا نکردم
    ممنون میشم کمک کنید

    1. سلام عزیز
      این خط نشان دهنده کتابخانه جدا نیست، این یک فایل در کتابخانه Adafruit_GFX هست

  30. این برنامه رو روی برد مدل اونو هم میشه استفاده کرد؟ یا نیاز به تغییر داره؟

    1. سلام عزیز، بله میشه استفاده کرد و نیازی به تغییر نیست.

  31. سلام ممنون از اطلاعات مفیدتون
    اول اینکه آیا برای پول آپ کردن SDA-SCL با مقاومت ۴.۷ باید ۳ مقاومت روی خود ماژول رو برداریم
    و اینکه آیا در ماژول MAX30102 هم اینکار نیازه ؟

  32. سلام.ببخشید من این سنسور رو به صورت زیر به برد آردوینو uno متصل کردم اما اصلا روشن نمیشه!!مشکل کجاست؟ممنون میشم راهنمایی بفرمایید:
    vin به 3.3
    scl به a5
    sdaبهa4
    زمین به زمین

  33. سلام وقت بخیر
    من سه سنسور مختلف اکسمتر دارم اما هر کدوم رو با هر کتابخانه ای میزنم سنسور فعال نمیشه و تو سریال مانیتور دیتا نمیده از چه کتابخانه ای باید استفاده کنم.
    سنسور ها یک سنسور بنفش که فکر کنم max30102 هست یکی مشکی که هشت پایه داره و یکی هم همین سبز که فکر کنم max30100 باشه ممنون میشم راهنمایی بفرمایید.
    در ضمن باید اینا هر کدوم پول آپ بشن؟

  34. سلام فایل سورس دانلود شده خالی میباشد راهنمایی بفرمایید لطفا

    1. سلام عزیز، فایل دانلودی بررسی شد و سورس کامل در فایل قرار داره، با نرم افزار WinRAR فایل رو باز کنید.

    2. Win rar روی موبایلم نصب کردم فایل سورس با پسوند txt نشون میده و بوسیله اردینو دروید قابل شناسایی نیست
      متن فایل هم که در اردینو دروید کپی میکنم هم ارور میده 😪

    3. فایل txt رو با کامپیوتر باز کنید.

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

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