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

ساخت گوشی پزشکی با آردوینو (استتسکوپ بی سیم)

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

گوشی پزشکی بی سیم چطور کار میکند؟

قبل از اینکه در مورد مدار و کد صحبت کنیم، بیایید نحوه کار استتسکوپ بی سیم را بدانیم.

برای به دست آوردن اطلاعات ضربان قلب، ابتدا یک گوشی پزشکی تهیه می کنیم و آن را به دو نیم می کنیم تا بتوانیم یک میکروفون خازنی را در آن قرار دهیم و بتوانیم صدای ضربان قلب را از گوشی پزشکی دریافت کنیم. بعد یک آمپلی فایر با op-amp درست می کنیم و سیگنال میکروفون را تقویت می کنیم تا بتوانیم آن را با ADC آردوینو بخوانیم. اما قبل از خواندن سیگنال، آن را از یک فیلتر پایین گذر عبور می دهیم که تمام نویزها و سیگنال های غیر ضروری را حذف می کند و سیگنال ضربان قلب خالص را در خروجی دریافت می کنیم. سپس این داده ها را با کمک ماژول بلوتوث HC-05 به پنجره ترمینال بلوتوث ارسال می کنیم.

مدار ساخت گوشی پزشکی با آردوینو

شماتیک مدار گوشی پزشکی بی سیم بسیار ساده و قابل درک است. ابتدا، ضربان قلب توسط یک میکروفون خازنی دریافت می شود و ما یک خازن مسدود کننده DC با ظرفیت 1uF داریم تا تمام اجزای DC سیگنال خروجی را مسدود کند. بعد، ما یک تقویت کننده غیر معکوس داریم که بهره آن روی 100X تنظیم شده است. با کمک مقاومت 1k و 100K بهره را روی 100X تنظیم کردیم تا سیگنال دریافتی توسط میکروفون تقویت شود. هنگامی که سیگنال تقویت شد، آن را از یک فیلتر پایین گذر عبور می دهیم، فیلتر پایین گذر تمام اجزای سیگنال بالای 300 هرتز را رد می کند و فقط محدوده سیگنال مورد نظر ما را عبور می دهد.

مدار ساخت گوشی پزشکی با آردوینو

پس از آن یک مدار تقسیم کننده ولتاژ داریم. از یک ترانسفورماتور 12-0-12 ولت برای تغذیه مدار عملی استفاده می کنیم، خروجی آپ امپ با توجه به شرایط متفاوت خواهد بود، بنابراین باید تقسیم کننده ولتاژ را بر اساس آن تنظیم کنید تا مقادیر برای R1 و R2 را خودتان بیابید. پس از انجام این کار، سیگنال را با کمک مبدل آنالوگ به دیجیتال تبدیل می کنیم و ضربان قلب را از محاسبه می کنیم و با کمک ماژول بلوتوث متصل، داده ها را ارسال می کنیم.

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

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

  • آردوینو UNO
  • ماژول بلوتوث HC-05
  • NE5532 Op-Amp
  • منبع تغذیه دو قطبی
  • 2 * مقاومت 1K
  • مقاومت 3.3K
  • 3 * مقاومت 10K
  • مقاومت 100K
  • خازن 470nF
  • خازن 2.2uF
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

کد آردوینو گوشی پزشکی بلوتوث

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

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

#include <SoftwareSerial.h>

در مرحله بعد، باید متغیرهای مورد نیاز را ایجاد کنیم. ما متغیرهایی را برای ذخیره مقدار ADC و شمارنده ای تعریف کرده ایم که تعداد پالس ها را در یک بازه زمانی مشخص نگه می دارد. همچنین یک متغیر distance داریم که مقدار میلی ثانیه را دارد، از این متغیر برای نمونه برداری از ضربان قلب استفاده می کنیم و سپس میانگین متغیرها را محاسبه می کنیم. ما همچنین یک متغیر به نام previousMillis داریم که داده های شمارنده را نگه می دارد و برای مقایسه با شمارنده millis استفاده می شود.

const int analogInPin = A0;  // پین ورودی آنالوگ
int sensorValue = 0;
unsigned long counter = 0;
int interval = 5000;
unsigned long previousMillis = 0;

در مرحله بعد، کتابخانه سریال نرم افزاری را مقداردهی اولیه کرده و نمونه ای به نام BTserial ساخته ایم. از این طریق می توانیم با ماژول سریال بلوتوث ارتباط برقرار کنیم.

SoftwareSerial BTserial(3, 4); // RX | TX

بعد، ما تابع setup خود را داریم. در تابع setup، متد start برای Serial و BTserial را با 9600 اجرا می کنیم تا بتوانیم از طریق آردوینو دیباگ کنیم و همزمان با ماژول بلوتوث ارتباط برقرار کنیم.

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

بعد، تابع loop را داریم. در تابع loop، دو متغیر currentMillis و currentMillis2 را ایجاد می کنیم. اینها دو زمان را نگه می دارند و بعداً در کد مفید خواهند بود.

unsigned long currentMillis = millis();
unsigned long currentMillis2 = millis();

سپس، یک شرط if داریم. در دستور if، بررسی می کنیم که آیا 30 ثانیه سپری شده است یا خیر، اگر سپری شده باشد به حلقه while بعدی می رویم. در داخل حلقه while، داده‌های ADC را می‌گیریم و بررسی می‌کنیم که آیا مقدار دریافتی در محدوده خاصی است یا خیر، اگر چنین است، شمارنده را افزایش می‌دهیم، افزایش شمارنده به معنای این است که ما ضربان قلب را تشخیص داده ایم. حالا همه متغیرها را ریست می کنیم و نتیجه ضربان قلب را روی پنجره سریال مانیتور چاپ می کنیم و همچنین داده ها را از طریق بلوتوث ارسال می کنیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
 if ((unsigned long)(currentMillis2 - previousMillis2) >= interval2)
  {
    while ((currentMillis - previousMillis ) < interval)
    {
      sensorValue = analogRead(analogInPin);
      if (sensorValue > 130 && sensorValue < 250)
      {
        counter++;
      }
    }
    previousMillis = currentMillis;
    previousMillis2 = currentMillis2;
    Serial.println(counter);
    BTserial.write(counter);
  }
}

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

تست مدار استتوسکوپ بی سیم

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

گوشی پزشکی دیجیتال بی سیم

بعد، گوشی پزشکی را روی سینه ام گذاشتم و شکل موج را مشاهده کردم:

گوشی پزشکی بی سیم با بلوتوث

همانطور که در تصویر بالا مشاهده می کنید، ولتاژ پیک آپ امپ حدود 14.6 ولت است. سپس، پنجره سریال مانیتور را باز می کنیم و بررسی می کنیم که آیا داده های سریال دقیق هستند یا نه. داده ها به طور دقیق روی پنجره مانیتور سریال چاپ می شوند.

کد گوشی پزشکی بی سیم با آردوینو

سپس ماژول بلوتوث را با گوشی خود جفت کردیم و برنامه اندروید Bluetooth serial terminal را دانلود کردیم و ماژول بلوتوث را به نرم افزار وصل کردیم. هنگامی که همه چیز انجام شد، می توانید ببینید که ما توانستیم داده ها را در پنجره سریال دریافت کنیم.

گوشی پزشکی بلوتوث بی سیم

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

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

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

3.7 (6 نفر)

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

محمد رحیمی

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

20 نظر

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

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

  3. سلام وقت بخیر ببخشید برای نرم افزار که دیتاها را از بلوتوث استفاده می کند باید از چه نرم افزاری استفاده کرد؟

  4. سلام من همه کار هایی که گفتید انجام دادم اما توی برنامه ترمینال گوشی هیچی نمیاد

    اتصالات هم قوی هست همه چی درسته
    لطفا راهنمایی کنید

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

  5. سلام جناب رحیمی من این پروژه رو برای پروژه دانشگاهم انتخاب کردم
    سوال اول اینکه بجا اون میکروفون و اپ امپ میتونم از ماژول میکروفون استفاده کنم مثل ماژول Max 9814

    بعد اینکه من چطور میتونم مستقیم با شما در ارتباط باشم تا زمان دفاغ پروژم چیزی نمونده اگر پشتیبانی هست ممنون میشم کمکم کنید خدا خیرتان بده

    1. سلام و درود من هم الان به این پروژه رو دارم کار میکنم و برای اینکار ماژول max 9814 رو هم انتخاب کردم و در قسمت کدنویسی آن کمی مشکل دارم آیا شما پروژه رو تکمیل کردید؟

  6. سلام جناب رحیمی دستور write از 0 تا 255 رو ارسال میکند آیا تغییری دارید که از 0 تا 1023 رو ارسال کنیم

    1. سلام عزیز
      هم میتونید با تابع map تناسب بگیرید و هم میتونید از آردوینو due استفاده کنید که رزولوشن pwm اون ۱۲ بیتی هست

  7. سلام جناب رحیمی
    #include
    #define RX 3
    #define TX 4
    SoftwareSerial MyBlue(3, 4); // RX | TX
    void setup()
    {
    Serial.begin(9600);
    MyBlue.begin(9600);
    pinMode(4 , OUTPUT);
    Void loop()
    {
    int sens=analogRead(A0);
    Serial.println(sens);
    MyBlue.write(sens);
    اما هیچی دریافت نمیکنم لطفا کمکم کنید میخوام داده ها را به لپتاپ ارسال کنم لطفا

  8. سلام من تمام کار را به انجام رساندم اما موقعی که نرم افزار با بلوتوث کانکت میشه هیچی دریافت نمیشه

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

  9. سلام و درود جناب رحیمی لطفا کتابخانه که نامش bt گذاشتید رو ارسال کنید تا نصبش کنیم

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

    2. سلام وقت بخیر
      من دارم روی این پروژه کار میکنم اتصالات درسته کد مربوطه هم که ازفایل همینجا استفاده کردم اما خروجی ندارم علتش چی میتونه باشه؟؟!

  10. سلام وقت بخیر فایل کد اردینو فقط همینی هست که در انتهای مطالب است؟
    من دانلود کردم فقط یه چارت و یه فایل بود ایا فایل دیگه هم هست>؟
    اگر هست ممنون میشم فایلش رو قرار بدید
    نکته بعدی اینکه ممکنه برای ساخت این وسیله یک فیلم با سرعت ویدیو بالا در کانال قرار بدید تا کمکی بشه برای ساخت این وسیله
    ممنون

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

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

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