Homebrew Arduino Pulse Monitor (Visualize Your Heartbeat)

by ASCAS in Circuits > Sensors

160976 Views, 621 Favorites, 0 Comments

Homebrew Arduino Pulse Monitor (Visualize Your Heartbeat)

IMG_4984.JPG
wmplayer 2014-04-21 11-10-44-97.png
Movies look cool with those EKG (electrocardiogram), the one that beeps and detects heart activities. A few months ago, we had to shoot a hospital scene for our school project. We needed an EKG instrument. To keep the movie authentic, we didn't want to fake the readings so we made the next best thing, a pulse monitor. Since my dad is a doctor he gave me some advice to design the pulse monitor. 



Let me clarify this to you. This project works and can actually monitor your pulse. Due to the lack of research and experimentation, the homebrew pulse monitor cannot be used for medical purposes. 

What Can You Do With It?
You can make a lie detector/ polygraph and tell who's lying or not. When a person lies, you'll notice a sudden change on the graph.

What Does This Guide Include? 
- Arduino Codes & Processing 2 Codes
- Steps on making a pulse sensor
- The Virtual Graphing Software
- Schematic Diagrams

What Do I Need To Make This Project?
- A Grippy Clothes Hanger
- Clear/ Bright Red LED
- LDR (Light Dependent Resistor)

Future Questions:
Why isn't mine working? For some reason LDRs (light dependent resistors) are not standard in resistance ratings. You'll need a some tweaking to pull off the project, it may require experience with Arduinos and electronics.

This project is inspired by Make Magazine's pulse monitor although my version didn't use a LM324 Op-Amp chip. Their tutorial will work on my setup. 

Make: Full Tutorial
Programming Stage:

Find the Perfect Colthes Hanger

IMG_4908.JPG
IMG_4909.JPG
This project works best with rubber padded hangers. Luckily "Marks & Spencer" gives away these hangers for free.

Cut the Clips

IMG_4914.JPG
IMG_4945.JPG
Cut the clips off the hanger with a pair of heavy duty shears. 

Disassemble the Clip

IMG_4923.JPG
IMG_4930.JPG
Get your multitool and disassemble the clip.

Drill Holes

IMG_4932.JPG
IMG_4939.JPG
IMG_4950.JPG
Drill a hole on the exact center of the clip's rubber pads.

Install the LDR

IMG_4964.JPG
IMG_4957.JPG
IMG_4965.JPG
Bend the LDR's leads then mount them in place. Finally use hot glue to keep the LDR from moving. 

Install the LED

IMG_4972.JPG
Get your led and use superglue to keep it intact with the clip. Also, you might want to add a resistor to protect the LED from getting busted. 

It Doesn't Work

Automatic-light-using-2-transistorw1-1024x901.jpg
You'll barely get a reading. If yours doesn't work, use this circuit to amplify the readings. D1 is just an indicator and not the red LED that's used to light up your thumb. It's best If you use a 10k trimmer resistor for R3 rather than a fixed value resistor. 

Wire Them Up!

IMG_4973.JPG
IMG_4980.JPG
IMG_4982.JPG
Follow the diagram above. PCB/ perfboards are not necessary. Wires would do just fine!

Download the Softwares

processing-graph2.png
Processing 2 is the graph/ monitor software that will visualize your data while the Arduino IDE is for uploading the arduino sketch. You'll need both to run the project. Click on the links below to download them. 

Arduino 1.0.5 IDE: click here!
Processing 2 IDE: click here!

The Codes

javaw 2014-04-21 09-51-02-85.png
javaw 2014-04-21 09-43-26-01.png
Run these codes on the proper IDE. If the processing 2 codes shows an error, change tho port number (found in the codes).

//Arduino Codes:

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println(analogRead(0));
  delay(50);
}


//Processing 2 Codes:

import processing.serial.*;
    Serial myPort;
    int xPos = 1;
    float oldHeartrateHeight = 0;

    void setup () {
    // set the window size:
    size(1000, 400);
    frameRate(30);

    // List available serial ports.
    println(Serial.list());

    // Setup which serial port to use.
    // This line might change for different computers.
    myPort = new Serial(this, Serial.list()[0], 9600);

    // set inital background:
    background(0);
    }

    void draw () {
    }

    void serialEvent (Serial myPort) {
    // read the string from the serial port.
    String inString = myPort.readStringUntil('\n');

    if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);
    // convert to an int
    println(inString);
    int currentHeartrate = int(inString);

    // draw the Heartrate BPM Graph.
    float heartrateHeight = map(currentHeartrate, 0, 1023, 0, height);
    stroke(0,255,0);
    line(xPos - 1, height - oldHeartrateHeight, xPos, height - heartrateHeight);
    oldHeartrateHeight = heartrateHeight;
    // at the edge of the screen, go back to the beginning:
    if (xPos >= width) {
    xPos = 0;
    background(0);
    } else {
    // increment the horizontal position:
    xPos++;
    }
    }
    }

Learn to Use It!

Make Magazine has a similar project that works exactly the same. I got the codes from them so video should explain the programming procedure. 

Make Magazine's Full Version:


Programming Stage:
This video will explain on how to use both IDEs.