AD8232 Heart Rate Monitor Hookup Guide

Viewing a single blog post

AD8232 Heart Rate Monitor Hookup Guide

Introduction

The AD8232 is a neat little chip used to measure the electrical activity of the heart. This electrical activity can be charted as an ECG or Electrocardiogram. Electrocardiography is used to help diagnose various heart conditions. Now for the disclaimer:

 

NOTE: This device is not intended to diagnose or treat any conditions.

 

AD8232

Covered in this Tutorial

In this tutorial, we will go over the basics for getting your AD8232 Heart Rate Monitor up and running. First, an overview of the board and all its features will be presented. Then, we’ll show you how hook it up to your favorite microcontroller and how to create visual data using Processing.

 

Understanding the ECG

In general terms, lets look at what an ECG is representing and how we’re able to sense it. The ECG is separated into two basic Intervals, the PR Interval and the QT Interval, described below.

 

alt text

Credit Wikipedia.org

alt text

Diagram of the heart. Credit Wikipedia.org

PR Interval

The PR interval is the initial wave generated by an electrical impulse traveling from the right atrium to the left. The right atrium is the first chamber to see an electrical impulse. This electrical impulse causes the chambers to “depolarize”. This forces it to contract and drain deoxygenated blood from both the Superior and Inferior vena cava into the right ventricle. As the electrical impulse travels across the top of the heart it then triggers the left atrium to contract. The left atrium is responsible for receiving newly oxygenated blood from the lungs into the left ventricle via the left and right pulmonary veins. The pulmonary veins are red in the diagram because they are carrying oxygenated blood. They are still called veins because veins carry blood towards the heart. Science!

QT Interval

The QT Interval is where things get really interesting. The QRS is a complex process that generates the signature “beep” in cardiac monitors. During QRS both ventricles begin to pump. The right ventricle begins to pump deoxygenated blood into the lungs through the left and right pulmonary arteries. The pulmonary arteries are blue in the diagram because they are carrying deoxygenated blood. They are still called arteries because arteries carry blood away the heart. Science, Again! The left ventricle is also begining to pump freshly oxygenated blood through the aorta and into the rest of the body. After the initial contraction comes the ST segment. The ST segment is fairly quiet electrically as it is the time where the ventricals waiting to be “re-polarized”. Finally the T wave becomes present to actively “re-ploarize”, or relax the ventricles. This relaxation phase resets the ventricles to be filled again by the atriums.

alt text

 

In this guide, we’ll connect the AD8232 Breakout to an Arduino microcontroller. We will build a simple cardiac monitor that will allow you to measure the electrical activity of the heart in real time!

Pin Connections

The AD8232 Heart Rate Monitor breaks out nine connections from the IC. We traditionally call these connections “pins” because they come from the pins on the IC, but they are actually holes that you can solder wires or header pins to.

alt text

We’ll connect five of the nine pins on the board to your Arduino. The five pins you need are labeled GND3.3vOUTPUTLO-, and LO+.

Board Label Pin Function Arduino Connection
GND Ground GND
3.3v 3.3v Power Supply 3.3v
OUTPUT Output Signal A0
LO- Leads-off Detect - 11
LO+ Leads-off Detect + 10
SDN Shutdown Not used

Connecting Headers to the Board

You can use any method you’d like to make your connections to the board. For this example, we’ll solder on a five-pin length of male-male header strip and use a breadboard and jumpers to make our connections.

alt text

Headers installed

Follow the diagram below, to make necessary connections. The SDN pin is not used in this demo. Connecting this pin to ground or “LOW” on a digital pin will power down the chip. This is useful for low power applications.

alt text

Connection Diagram

Now that the electronics are complete, let’s look at sensor pad placement. It is recommended to snap the sensor pads on the leads before application to the body. The closer to the heart the pads are, the better the measurement. The cables are color coded to help identify proper placement.

Cable Color Signal
Black RA (Right Arm)
Blue LA (Left Arm)
Red RL (Right Leg)

 

alt text

Sensors connected to Heart Monitor

alt text

Typical Sensor Placements

Uploading the Sketch and Connecting with Processing

By this point, you should have the hardware connected and ready.

Arduino Code

 

/******************************************************************************
Heart_Rate_Display.inoDemo Program for AD8232 Heart Rate sensor.
Casey Kuhns @ SparkFun Electronics 6/27/2014
https://github.com/sparkfun/AD8232_Heart_Rate_Monitor
******************************************************************************/

void setup() {
  // initialize the serial communication:
  Serial.begin(9600);
  pinMode(10, INPUT); // Setup for leads off detection LO +
  pinMode(11, INPUT); // Setup for leads off detection LO -

}

void loop() {
  
  if((digitalRead(10) == 1)||(digitalRead(11) == 1)){
    Serial.println('!');
  }
  else{
    // send the value of analog input 0:
      Serial.println(analogRead(A0));
  }
  //Wait for a bit to keep serial data from saturating
  delay(1);
}

 

alt text

Upload sketch to Arduino Pro-Mini

Now that you have a sketch running, let’s get the processing sketch ready. The processing sketch will give you a visual output of what’s going on.  The example Processing sketch works with the Processing IDE v2.2.1. Later versions may not work with the example code so makes sure to download the stable release for v2.2.1 from the Processing IDE Download page.

Processing Code

 

import processing.serial.*;

Serial myPort;        // The serial port
int xPos = 1;         // horizontal position of the graph
float height_old = 0;
float height_new = 0;
float inByte = 0;

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()[0], 9600);
  // don't generate a serialEvent() unless you get a newline character:
  myPort.bufferUntil('\n');
  // set inital background:
  background(0xff);
}

void draw () {
  // everything happens in the serialEvent()
}

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);
     }

     //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++;
      }

  }
}

 

alt text

Run the Processing sketch

If the processing sketch does not work, you may need to modify the following line:


 

COPY CODE

myPort = new Serial(this, Serial.list()[2], 9600);

You may need to change the parameter inside Serial.list()[N]. A List of available COM ports will appear in the lower portion of the sketch window. Remember that COM port selection begins at 0. Typically your Arduino will appear as the highest COM number if it is the only device connected to your computer.

alt text

The Arduino shows up as COM38. This is found in the Serial List at array element “2”.

If everything is working correctly, you should see a nice box pop up and start displaying the output signal.

alt text

“Normal” heart rate of an SFE engineer

If your subject decides to remove the sensors, the leads off detection will kick in and display a flat blue line.

alt text

 

Tips and Tricks

ECG’s are notoriously noisy. This is because you are measuring muscle activation. The further sensor pads are from the heart, the more muscle noise you will see. These are commonly referred to as “Motion Artifacts”. So here are some simple tips to improve the signal quality.

  • Keep sensor pads as close to the heart as you can.
  • Make sure the RA and LA sensor pads are on correct sides of the heart.
  • Try not to move too much while taking a measurement.
  • Try to use fresh pads for each measurement. The pads loose the ability to pass signals with multiple applications.
  • Prep and clean the area you plan to stick pads. This will help make a good connection (hair is not a good conductor).
  • You may have to adjust sensor placement for different individuals.

Posted in Arduino, WSN on Sep 01, 2017


Comments

Please sign in to comment!