آردوینو برد ESP8266 برد ویموس Wemos نمایشگر OLED

ساخت دستگاه ECG ساده با سنسور Pulse Sensor و برد آردوینو OLED

نوشته شده توسط CiferTech

شاید تابحال به دفعات در مکان های مختلف دستگاه هایی را مشاهده کرده باشید که بصورت لحظه‌ای ضربان قلب فرد مدنظر را بصورت گراف هایی نمایش می‌دهند. در این آموزش قصد داریم نمونه‌ای ساده از دستگاه را با قطعاتی همچون Pulse Sensor و نمایشگر Oled یا همان دستگاه ecg بسازیم. در این پروژه از برد wemos به عنوان هسته مرکزی پروژه استفاده خواهیم کرد تا وظیفه تحلیل مقادیر بدست آمده از سنسور پالس را به گردن داشته باشد و همچنین این مقادیر ضربان قلب فرد را به شکلی که ما انتظار داریم در نمایشگر Oled 0.96 نمایش دهد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

پروژه ساخت دستگاه ecg با سنسور ضربان قلب و آردوینو - دیجی اسپارک

 


سنسور قلب Pulse Sensor


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

Making a simple ECG device with Pulse Sensor

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

 


ECG یا الکتروکاردیوگرافی


الکتروکاردیوگرافی (Electrocardiography) به فرایند فرآورش الکتروکاردیوگرام یا نوار قلب که نمودار ثبت‌شده تغییرات پتانسیل الکتریکی ناشی از تحریک عضلهٔ قلب است، گفته می‌شود. معمولا با مخفف ECG یا EKG مشخص می‌شود. دستگاه الکتروکاردیوگراف، این نمودار را بر روی نوار کاغذی خط‌کشی‌شده‌ای که ویژه این کار است، به‌طور پیوسته ضبط می‌کند. اطلاعاتی که روی الکتروکاردیوگرام ضبط می‌شود نشان‌دهنده امواج الکتریکی محرک قلب است. این امواج نمایشگر مراحل مختلف تحریکات قلبی هستند. منحنی ای را که رسم می‌شود «الکتروکاردیوگرام» می‌نامند. پزشکان می‌توانند از روی این منحنی به نحوه عمل قلب پی ببرند. هر منحنی شامل سه موج است. موج p کمی قبل از فعالیت الکتریکی دهلیزها،کمپلکس QRS کمی قبل از فعالیت الکتریکی بطنها و موج T استراحت بطن‌ها را نمایش می‌دهد.

 


 برد Wemos ویموس


برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.

 


ماژول نمایشگر Oled SSD1306


معمولا در پروژه های اینترنت اشیا و دیگر پروژه های امبدد از برای نمایش متن و مقادیر مختلف از نمایشگر های Oled استفاده می شود، این ماژول ها بدر انواع مختلق بسته به نوع درایور اندازه یافت می شوند که یکی از پرطرفدار ترین آن ها SSD1306 می باشد، این نوع از Oled ها معمولا در اندازه های ۰٫۹۶ و ۱٫۳ اینچ ساخته می شوند همچنین پروتکل ارتباطی Oled ها I2C می باشد. صفحه نمایش دیود ساطع کننده نور (OLED) که ما در این آموزش استفاده خواهیم کرد مدل SSD1306 است، یک صفحه نمایش تک رنگ، ۰٫۹۶ اینچی با ۱۲۸ × ۶۴ پیکسل همانطور که در شکل زیر نشان داده شده است. نمایشگر OLED نیازی به نور پس زمینه ندارد، که نتیجه آن ایجاد تضاد بسیار خوب در محیط های تاریک است. همچنین پیکسل های آن فقط هنگام روشن بودن انرژی مصرف می کنند، بنابراین صفحه نمایش OLED در مقایسه با سایر نمایشگرها، مصرف برق کمتری دارد.

 


توضیح تکمیلی پروژه ECG


در این پروژه با استفاده از pulse sensor مقادیر جریان خون را بدست می‌آوریم و از آنجایی که این مقدار رابطه مسقیم با میزان ضربان قلب فرد دارد قادر خواهیم بود ضربان قلب را بصورت گرافیکی در نمایشگر Oled مانند دستگاه های ECG نمایش دهیم. البته به شکل بسیار ساده تر، تمام پروسه با کمک برد Wemos که از تراشه ESP8266 استفاده می‌کند صورت می‌گیرد. قابلیت وای‌فای این برد به ما امکان این را می‌دهد که در آینده قادر به ارتقا پروژه باشیم و برای نمونه قادر باشیم مقادیر را به سمت پنل IOT مدنظر ارسال کنیم.

Making a simple ECG device with Pulse Sensor

 


وسایل مورد نیاز


  1. ماژول صربان قلب Pulse Sensor
  2. برد Nodemcu برپایه ESP8266
  3. نمایشگر Oled 0.96
  4. برد wemos

Making a simple ECG device with Pulse Sensor

 


اتصالات و راه‌اندازی


برای ساخت دستگاه ecg از سنسور به سادگی با استفاده از پایه های Vcc و GND آن را تغذیه می کنیم، سنسور می تواند در هر دو ولتاژ ۵ ولت یا ۳٫۳ ولت کار کند. پس از روشن شدن، پین Signal را به پین ADC میکروکنترلر متصل کنید تا تغییر ولتاژ خروجی را کنترل کند. در برد Wemos از پین A0 برای خواندن مقادیر سنسور استفاده می‌کنیم. نمایشگر ما در پروژه یک Oled 0.96 با درایور SSD1306 است که از پروتکل I2C پشتیبانی میکند، پین های SDA و SCL به پین های D1 و D2  در برد Wemos متصل می‌شود. ابتدا اتصالات برد Wemos  و سنسور ضربان قلب را برقرار می‌کنیم. با استفاده از جدول و شماتیک زیر اقدام به برقراری اتصالات کنید.

 

اتصالات سنسور ضربان قلب به برد وای فای ویموس - دیجی اسپارک

 

  • شماتیک اتصالات سنسور ضربان با برد Wemos

 

در ادامه اتصالات برد Wemos با نمایشگر oled را برقرار می‌کنیم، همانطور که اشاره شد پین های SDA و SCL در نمایشگر به پین های D1 و D2 در برد Wemos متصل می‌شوند و از ۵v و GND نمایشگر را تغذیه خواهیم کرد.

اتصالات ماژول OLED به برد ویموس Wifi ESP8266 - دیجی اسپارک

 

  • شماتیک اتصالات کامل پروژه ساخت دستگاه ECG ساده با Pulse Sensor

Making a simple ECG device with Pulse Sensor

 


کدهای پروژه ضربان قلب ECG


پس از بارگذاری کد در Wemos، در ابتدا هیچ نمودار یا شکل موجی خاصی دیده نمی شود. اما هنگامی که انگشت شما بر روی سنسور قرار می گیرد مقدار BPM و همچنین نمودار نشان داده می شود. مقدار ممکن است در شروع چند ثانیه نامنظم یا ناپایدار باشد اما بعد از چند ثانیه مقدار به درستی نمایش داده می شود.

#include <SPI.h>                      // فراخوانی کتابخانه های مورد نیاز
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128    // مشخص کردن طول و عرض نمایشگر وابسته به سخت افزار
#define SCREEN_HEIGHT 64 

#define OLED_RESET     -1 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);         // مقدار دهی اولیه به نمایشگر Oled

/* در این بخش متغیر های مورد نیاز برای ذخیره مقادیر بدست و مقدار دهی اولیه به گراف برای نمایش گرافیکی صورت گرفته است */

unsigned long previousMillisGetHR = 0; 
unsigned long previousMillisResultHR = 0; 

const long intervalGetHR = 20; 
const long intervalResultHR = 10000; 

int PulseSensorSignal; 
const int PulseSensorHRWire = 0; 

int UpperThreshold = 550; 
int LowerThreshold = 500; 

int cntHB = 0; 
boolean ThresholdStat = true; 
int BPMval = 0; 

int x=0; 
int y=0; 
int lastx=0; 
int lasty=0; 

void setup() {

  Serial.begin(9600); 
  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //آدرس دهی نمایشگر به پروتکل i2c


                                         //پاک کردن بافر نمایشگر
  display.display();
  delay(1000);

  display.clearDisplay();

  display.display(); 
  delay(300);


                                                // متن ثابت نمایش
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(30, 48); 
  display.print("0 BPM");
  display.display(); 

}

void loop() {
  
  GetHeartRate();               // فراخوانی تابع نوشته شده
}

void GetHeartRate() {
 
  unsigned long currentMillisGetHR = millis();

  if (currentMillisGetHR - previousMillisGetHR >= intervalGetHR) {
    previousMillisGetHR = currentMillisGetHR;

    PulseSensorSignal = analogRead(PulseSensorHRWire); 

    if (PulseSensorSignal > UpperThreshold && ThresholdStat == true) {
      cntHB++;
      ThresholdStat = false;

    }

    if (PulseSensorSignal < LowerThreshold) {
      ThresholdStat = true;

    }
    
    DrawGraph(); 
  }

  unsigned long currentMillisResultHR = millis();

  if (currentMillisResultHR - previousMillisResultHR >= intervalResultHR) {
    previousMillisResultHR = currentMillisResultHR;

    BPMval = cntHB * 6; 
    Serial.print("BPM : ");
    Serial.println(BPMval);
    
    display.fillRect(20, 48, 108, 18, BLACK);
    
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(30, 48); 
    display.print(BPMval);
    display.print(" BPM");
    display.display(); 
    
    cntHB = 0;
  }

}

void DrawGraph() {

  // رسم گراف و نمایش مقادیر بدست آمده بصورت گرافیکی
  
  if (x > 127) {
    display.fillRect(0, 0, 128, 42, BLACK);
    x = 0;
    lastx = 0;
  }

  int ySignal = PulseSensorSignal; 
  
  if (ySignal > 850) ySignal = 850;
  if (ySignal < 350) ySignal = 350;

  int ySignalMap = map(ySignal, 350, 850, 0, 40); 
  
  y = 45 - ySignalMap;

  display.writeLine(lastx,lasty,x,y,WHITE);
  display.display(); 
  
  lastx = x;
  lasty = y;
  
  x++;
}

 


جمع بندی


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

Making a simple ECG device with Pulse Sensor

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۶ دیدگاه

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

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

  • سلام وقت بخیر
    وقتی انگشتم رو روی سنسور قرار میدم
    خط روی مانیتور مستقیم طی میشه ولی وقتی ضربه میزنم پالس میندازه
    میخواستم چرا؟
    اخه من میخوام وقتی انگشتم قرار میشه مرتب پالس ایجاد بشه.

    • با سلام
      کاربر گرامی در این کد به این طرق نوشته شده است. بایستی از نمونه برنامه های دیگر استفاده کنید.

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

        • سلام
          بله امکان پذیر است اما تمامی مراحل کدنویسی تغییر خواهد کرد و از این کد دیگر نمیتوانید استفاده کنید.