DIY Arduino Pulse Sensor

View your pulse and calculate your heart rate with this simple circuit and program

Similar projects worth following
I created this simple circuit for a pulse sensor (modified from a previous circuit used in an earlier lab) for an introductory engineering course at Vanderbilt University for freshmen biomedical engineers. The circuit uses a typical configuration for a pulse sensor: a light source, a detector, and a high gain circuit. You can view step-by-step build instructions on the project's page at

*****NOTE: This is NOT a medical device.

*****NOTE: This is NOT a medical device.

The circuit uses a finger cuff with an integrated IR LED and photodiode. When light shines through the finger, the amount of light that hits the photodiode varies with the pulse. The photodiode produces a current that is converted to a voltage using a transimpedance amplifier (current-to-voltage converter). The signal is then high-pass filtered to remove the DC bias from the signal and then biased at Vdd/2 so that the wave is symmetrical about 2.5 V. We have a final gain stage that amplifies the AC part of the waveform (the actual pulse). The signal is outputted to an Arduino and the accompanying software (LabVIEW and Processing) plots the waveform.

  • 1 × Arduino Any kind of Arduino will work
  • 1 × MCP6002 A general purpose, single supply op amp
  • 1 × Disposable finger cuff Integrated IR LED and photodiode
  • 1 × 5 Resistors 3 x 1 MOhm, 1 x 10 kOhm, 1 x 1 kOhm
  • 1 × 2 Capacitors 1 x 10 nF, 1 x 560 nF,

  • Simple Processing Sketch for Visualization

    Orlando Hoilett11/15/2014 at 21:56 0 comments

    Tuesday, November 11, 2014
    Because LabVIEW is proprietary, I made a simple modification to the Arduino Graph Example in Processing so that it will plot the pulse waveform. The code can be downloaded from the project's page at

  • Initial Version for Student Lab

    Orlando Hoilett11/15/2014 at 21:29 0 comments

    Monday, October 13, 2014
    Completed the basic circuit design and LabVIEW VI for the first version of the pulse sensor. You can download all the code from the page

View all 2 project logs

  • 1
    Step 1

    I posted this project on Detailed build instructions can be found on the project's site

View all instructions

Enjoy this project?



Valentin Stoykov wrote 03/18/2015 at 00:22 point

Op apms don't work correctly when the input voltage (and output voltage) is too close to 0V (when using single power supply) or Vee (when using dual power supply).

If you are powering the op amp with single power supply (+5V and 0V) you should connect the "+" input of the first op amp to the 1/2 of supply voltage (the photodiode should be connected to the same point).

  Are you sure? yes | no

Orlando Hoilett wrote 04/16/2016 at 14:46 point

Thanks for the comment. And you are definitely correct. I've started using 1/2 Vdd these days. Although, I use Vref generator with a buffer amplifier instead of just adding the two resistors. Thanks for the comment!

  Are you sure? yes | no

davedarko wrote 11/16/2014 at 15:00 point
Great project! I still have to integrate one on my wristband project. Do you have by any chance an idea how I could get the pulse from my wrist? I'm worried about noises from moving it around.

  Are you sure? yes | no

Orlando Hoilett wrote 11/16/2014 at 15:59 point
Sounds awesome. Yeah that's one of my future goals as well. With the light detection method, it is a little more difficult to get the pulse when the band is worn on the wrist because wrist is thicker than the finger. Though, smartwatches and fitness bands are able to do this ( When detecting pulse on the wrist, I think most people go with reflectance as opposed to transmittance. The light source and the detector are located on the same side and spaced about 2 mm apart. The amount of light reflected off your skin changes will pulse and you can therefore get the pulse waveform and heart rate. Then the next problem is noise, like you have mentioned. I'm not entirely sure how this is commonly dealt with. The descriptions that I have read for various products say, "sophisticated algorithm to detect pulse" without actually saying what exactly they do. I know these guys ( say they use acceleration data coupled with the light data to subtract noise.

My next step is to make a wrist worn pulse sensor that will continue monitoring pulse when the person is running, exercising, etc. So basically a DIY version of the second link I sent you. Maybe we can share notes if you would like. Otherwise, I hope this helps.

  Are you sure? yes | no

davedarko wrote 11/18/2014 at 20:38 point
Hmm, maybe by using a wristband that is based on rubber or silicon one could prevent at least some of the fuzz. I've seen some wristbands and the open pulse sensor using green leds, I guess that's good for blood vessels that might be blue or red? Would be cool to add a more professional touch to my project. I'm on vacation with only some rgb leds and some attiny45s so I am a bit limited.

  Are you sure? yes | no

Orlando Hoilett wrote 01/11/2015 at 21:19 point

For the open pulse sensor, they used a green light because the sensor they selected was most sensitive to green. I want to do some touching up with this project myself. I'll keep you updated.

  Are you sure? yes | no

Orlando Hoilett wrote 01/20/2015 at 01:00 point

So I am starting to work on making a motion-resistant pulse sensor as a part of my DIY smartwatch project. I'll post updates to this page or my DIY SmartWatch page here

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates