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

محتویات
بیشتر بیماریهای قلبی با صدایی که قلب تولید میکند مرتبط هستند و با صدا تشخیص داده میشوند. یکی از سادهترین و ارزانترین راههای تشخیص اختلال عملکرد قلب، گوش دادن به صدای قلب است. در گذشته و طب سنتی گوش داده به صدای قلب نیازمند تجربه و مهارت خوب شنیداری داشت. در این پروژه به این فکر افتادیم که یک گوشی پزشکی یا همان استتسکوپ مبتنی بر آردوینو بسازیم. با این دستگاه میتوانیم ضربان قلب را اندازه کنیم و داده ها را در پنجره سریال نمایش دهیم.
گوشی پزشکی بی سیم چطور کار میکند؟
قبل از اینکه در مورد مدار و کد صحبت کنیم، بیایید نحوه کار استتسکوپ بی سیم را بدانیم.
برای به دست آوردن اطلاعات ضربان قلب، ابتدا یک گوشی پزشکی تهیه می کنیم و آن را به دو نیم می کنیم تا بتوانیم یک میکروفون خازنی را در آن قرار دهیم و بتوانیم صدای ضربان قلب را از گوشی پزشکی دریافت کنیم. بعد یک آمپلی فایر با 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 اضافه کردیم.
موارد موجود در فایل : فایل سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام کسی موفقیت آمیز بسته و نتیجه گرفته این پروژه رو به آی دی زیر
در تلگرام پیام بده یا آی دیشو بذاره ازش کمک میخوام.لطف میکنید.
ThisisShano@
اقای رحیمی خسته نباشید بابت پروژه بسیار جالبی که ساختید این پروژه بدون پیچیدگی با همین مدار بسته میشه؟ نیاز به کتابخونه ای اضافی نداره گفتید راحت انجام میشه؟
سلام عزیز
به سادگی هست
سلام وقت بخیر ببخشید برای نرم افزار که دیتاها را از بلوتوث استفاده می کند باید از چه نرم افزاری استفاده کرد؟
سلام من همه کار هایی که گفتید انجام دادم اما توی برنامه ترمینال گوشی هیچی نمیاد
اتصالات هم قوی هست همه چی درسته
لطفا راهنمایی کنید
سلام عزیز
سریال مانیتور رو بررسی کنید
سلام جناب رحیمی من این پروژه رو برای پروژه دانشگاهم انتخاب کردم
سوال اول اینکه بجا اون میکروفون و اپ امپ میتونم از ماژول میکروفون استفاده کنم مثل ماژول Max 9814
بعد اینکه من چطور میتونم مستقیم با شما در ارتباط باشم تا زمان دفاغ پروژم چیزی نمونده اگر پشتیبانی هست ممنون میشم کمکم کنید خدا خیرتان بده
سلام و درود من هم الان به این پروژه رو دارم کار میکنم و برای اینکار ماژول max 9814 رو هم انتخاب کردم و در قسمت کدنویسی آن کمی مشکل دارم آیا شما پروژه رو تکمیل کردید؟
سلام جناب رحیمی دستور write از 0 تا 255 رو ارسال میکند آیا تغییری دارید که از 0 تا 1023 رو ارسال کنیم
سلام عزیز
هم میتونید با تابع map تناسب بگیرید و هم میتونید از آردوینو due استفاده کنید که رزولوشن pwm اون ۱۲ بیتی هست
At+role رو چه حالتی باشه برای ارسال داده
سلام جناب رحیمی
#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);
اما هیچی دریافت نمیکنم لطفا کمکم کنید میخوام داده ها را به لپتاپ ارسال کنم لطفا
سلام آیا بلوتوث باید رو salve باشد یا master جناب رحیمی
سلام من تمام کار را به انجام رساندم اما موقعی که نرم افزار با بلوتوث کانکت میشه هیچی دریافت نمیشه
سلام عزیز
اتصالات رو چک کنید سریال مانیتور رو بررسی کنید
سلام و درود جناب رحیمی لطفا کتابخانه که نامش bt گذاشتید رو ارسال کنید تا نصبش کنیم
سلام عزیز
این پروژه نیاز به نصب کتابخانه نداره
سلام وقت بخیر
من دارم روی این پروژه کار میکنم اتصالات درسته کد مربوطه هم که ازفایل همینجا استفاده کردم اما خروجی ندارم علتش چی میتونه باشه؟؟!
سلام وقت بخیر فایل کد اردینو فقط همینی هست که در انتهای مطالب است؟
من دانلود کردم فقط یه چارت و یه فایل بود ایا فایل دیگه هم هست>؟
اگر هست ممنون میشم فایلش رو قرار بدید
نکته بعدی اینکه ممکنه برای ساخت این وسیله یک فیلم با سرعت ویدیو بالا در کانال قرار بدید تا کمکی بشه برای ساخت این وسیله
ممنون
سلام عزیز
بله همون فایل ها مورد نیاز هست