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

در تصویر زیر پین های ماژول AD8232 نشان داده شده است :

3.3V و GND پین های تغذیه ماژول می باشند .

OUTPUT سیگنال آنالوگ خروجی مازول می باشد .

پین های LO جهت تشخیص اتصال درست الکترود های می باشد .

SDN جهت خاموش کردن ماژول است .

 

 

راه اندازی ماژول AD8232 با آردوینو :

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

Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph
float height_old = 0;
float height_new = 0;
float inByte = 0;
int BPM = 0;
int beat_old = 0;
float[] beats = new float[500];  // Used to calculate average BPM
int beatIndex;
float threshold = 620.0;  //Threshold at which BPM calculation occurs
boolean belowThreshold = true;
PFont font;
 
 
void setup () {
  // set the window size:
  size(1000, 400);        
 
  // List all the available serial ports
  println(Serial.list());
  // Open whatever port is the one you're using.
  myPort = new Serial(this, Serial.list()[2], 9600);
  // don't generate a serialEvent() unless you get a newline character:
  myPort.bufferUntil('\n');
  // set inital background:
  background(0xff);
  font = createFont("Ariel", 12, true);
}
 
 
void draw () {
     //Map and draw the line for new data point
     inByte = map(inByte, 0, 1023, 0, height);
     height_new = height - inByte; 
     line(xPos - 1, height_old, xPos, height_new);
     height_old = height_new;
    
      // at the edge of the screen, go back to the beginning:
      if (xPos >= width) {
        xPos = 0;
        background(0xff);
      } 
      else {
        // increment the horizontal position:
        xPos++;
      }
      
      // draw text for BPM periodically
      if (millis() % 128 == 0){
        fill(0xFF);
        rect(0, 0, 200, 20);
        fill(0x00);
        text("BPM: " + inByte, 15, 10);
      }
}
 
 
void serialEvent (Serial myPort) 
{
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');
 
  if (inString != null) 
  {
    // trim off any whitespace:
    inString = trim(inString);
 
    // If leads off detection is true notify with blue line
    if (inString.equals("!")) 
    { 
      stroke(0, 0, 0xff); //Set stroke to blue ( R, G, B)
      inByte = 512;  // middle of the ADC range (Flat Line)
    }
    // If the data is good let it through
    else 
    {
      stroke(0xff, 0, 0); //Set stroke to red ( R, G, B)
      inByte = float(inString); 
      
      // BPM calculation check
      if (inByte > threshold && belowThreshold == true)
      {
        calculateBPM();
        belowThreshold = false;
      }
      else if(inByte < threshold)
      {
        belowThreshold = true;
      }
    }
  }
}
  
void calculateBPM () 
{  
  int beat_new = millis();    // get the current millisecond
  int diff = beat_new - beat_old;    // find the time between the last two beats
  float currentBPM = 60000 / diff;    // convert to beats per minute
  beats[beatIndex] = currentBPM;  // store to array to convert the average
  float total = 0.0;
  for (int i = 0; i < 500; i++){
    total += beats[i];
  }
  BPM = int(total / 500);
  beat_old = beat_new;
  beatIndex = (beatIndex + 1) % 500;  // cycle through the array instead of using FIFO queue
  }

نحوه اتصال پد ها بر روی بدن :

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

Red: RA (Right Arm)
Yellow: LA (Left Arm)
Green: RL (Right Leg)

Tags:
About Author: USER_4