Introducing Easy Pulse: A DIY photoplethysmographic sensor for measuring heart rate

When I first built the Heart rate measurement through fingertip project, the infrared LED and photodiode used for finger photoplethysmography were actually from salvaged parts, and therefore, I could not provide specifications for them in the article. As a result of that it takes quite a bit of time to replicate that project with a different set of IR LED and photodiode as the values of the current limiting and biasing resistors may have to be changed for the new sensor to work properly. Today, I am going to talk about a revised version of the same project but with all the components specified this time. The new version uses the TCRT1000 reflective optical sensor for photoplethysmography. The use of TCRT100 simplifies the build process of the sensor part of the project as both the infrared light emitter diode and the detector are arranged side by side in a leaded package, thus blocking the surrounding ambient light, which could otherwise affect the sensor performance. I have also designed a printed circuit board for it, which carries both sensor and signal conditioning unit. I have named the board “Easy Pulse” and its output is a digital pulse which is synchronous with the heart beat. The output pulse can be fed to either an ADC channel or a digital input pin of a microcontroller for further processing and retrieving the heart rate in beats per minute (BPM).

Easy Pulse sensor


This project is based on the principle of photoplethysmography (PPG) which is a non-invasive method of measuring the variation in blood volume in tissues using a light source and a detector. Since the change in blood volume is synchronous to the heart beat, this technique can be used to calculate the heart rate. Transmittance and reflectance are two basic types of photoplethysmography. For the transmittance PPG, a light source is emitted in to the tissue and a light detector is placed in the opposite side of the tissue to measure the resultant light. Because of the limited penetration depth of the light through organ tissue, the transmittance PPG is applicable to a restricted body part, such as the finger or the ear lobe. However, in the reflectance PPG, the light source and the light detector are both placed on the same side of a body part. The light is emitted into the tissue and the reflected light is measured by the detector. As the light doesn’t have to penetrate the body, the reflectance PPG can be applied to any parts of human body. In either case, the detected light reflected from or transmitted through the body part will fluctuate according to the pulsatile blood flow caused by the beating of the heart.

The following picture shows a basic reflectance PPG probe to extract the pulse signal from the fingertip. A subject’s finger is illuminated by an infrared light-emitting diode. More or less light is absorbed, depending on the tissue blood volume. Consequently, the reflected light intensity varies with the pulsing of the blood with heart beat. A plot for this variation against time is referred to be a photoplethysmographic or PPG signal.

Finger photoplethysmography (reflectance approach)

The PPG signal has two components, frequently referred to as AC and DC. The AC component is mainly caused by pulsatile changes in arterial blood volume, which is synchronous with the heart beat. So, the AC component can be used as a source of heart rate information. This AC component is superimposed onto a large DC component that relates to the tissues and to the average blood volume. The DC component must be removed to measure the AC waveform with a high signal-to-noise ratio. Since the useful AC signal is only a very small portion of the whole signal, an effective amplification circuit is also required to extract desired information from it.

Circuit diagram

The sensor used in this project is TCRT1000, which is a reflective optical sensor with both the infrared light emitter and phototransistor placed side by side and are enclosed inside a leaded package so that there is minimum effect of surrounding visible light. The circuit diagram below shows the external biasing circuit for the TCRT1000 sensor. Pulling the Enable pin high will turn the IR emitter LED on and activate the sensor. A fingertip placed over the sensor will act as a reflector of the incident light. The amount of light reflected back from the fingertip is monitored by the phototransistor.

TCRT1000 used for sensing pulse from fingertip

The output (VSENSOR) from the sensor is a periodic physiological waveform attributed to small variations in the reflected IR light which is caused by the pulsatile tissue blood volume inside the finger. The waveform is, therefore, synchronous with the heart beat. The following circuit diagram describes the first stage of the signal conditioning which will suppress the large DC component and boost the weak pulsatile AC component, which carries the required information.

First stage of signal conditioning

In the circuit shown above, the sensor output is first passed through a RC high-pass filter (HPF) to get rid of the DC component. The cut-off frequency of the HPF is set to 0.7 Hz. Next stage is an active low-pass filter (LPF) that is made of an Op-Amp circuit. The gain and the cut-off frequency of the LPF are set to 101 and 2.34 Hz, respectively. Thus the combination of the HPF and LPF helps to remove unwanted DC signal and high frequency noise including 60 Hz (50 Hz in some countries) mains interference, while amplifying the low amplitude pulse signal (AC component) 101 times.

The output from the first signal conditioning stage goes to a similar HPF/LPF combination for further filtering and amplification (shown below). So, the total voltage gain achieved from the two cascaded stages is 101*101 = 10201. The two stages of filtering and amplification converts the input PPG signals to near TTL pulses and they are synchronous with the heart beat. The frequency (f) of these pulses is related to the heart rate (BPM) as,

Beats per minute (BPM) = 60*f

A 5K potentiometer is placed at the output of the first signal conditioning stage in case the total gain of the two stages is required to be less than 10201. An LED connected to the output of the second stage of signal conditioning will blink when a heart beat is detected. The final stage of the instrumentation constitutes a simple non-inverting buffer to lower the output impedance. This is helpful if an ADC channel of a microcontroller is used to read the amplified PPG signal.

Second stage of signal conditioning

The operational amplifiers used in the instrumentation circuit described above are from the MCP6004 IC, which has got four general purpose Op-Amps offering rail-to-rail input and output over the 1.8 to 6V operating range. The picture below shows an assembled Easy Pulse board designed using the above circuit.

Easy Pulse board with fixed TCRT1000 sensor

Instead of fixing on the board, the TCRT1000 sensor can also be wired to the board through header pins and jumpers. This way you have more flexibility in using the sensor. You can hold the sensor between two fingers or you can face it down on the skin on your palm, and so on.

Easy Pulse with sensor wire to the board through jumpers

The board operates from 3-5.5V and therefore, it can be used with both 3.3V and 5.0V microcontroller families.

Operation of the board

The operation of the board is very simple. After powering the board from a 3-5.5V supply, the Enable (EN) pin must be pulled high to activate the IR sensor. Next, place the tip of your forefinger gently over the sensor on its face. Your finger should be still and should not press too hard on the sensor. Within a couple seconds the circuit stabilizes and you will see the LED flashing synchronously with your heart beat. You can feed the output signal (Vout) to either a digital I/O or an ADC input pin of the microcontroller for measurement of the heart beat rate in BPM. The output voltage waveform can also be viewed on an oscilloscope. I connected Digilent’s Analog Discovery tool to check the input PPG and the output waveforms from the two LPF stages. The following pictures show these signal waveforms as displayed on the PC screen when .

Placing fingertip over the sensor


Using sensor over the skin on the palm

Connecting the Analog Discovery tool to measure the signal waveforms

Raw PPG signal from the phototransistor displayed on PC using Digilent's Analog Discovery tool

Output waveforms from the two LPF stages. Blue signal is from the second stage. (Click to enlarge)

The Easy Pulse output signal can be connected to a digital input pin of Arduino or ChipKIT board to find its frequency. If you multiply the frequency by 60, you will get the heart rate in BPM. I have written a demo code for chipKIT Uno32 and IO Shield to display the heart rate on the OLED. The VCC, EN, VOUT, Gnd pins on the Easy Pulse board are connected to 3.3V, 5.0V, Pin 2, and Gnd pins of the I/O shield, respectively.

Download the demo chipKIT sketch

Interfacing with Chipkit Uno32 board to measure heart rate

Demo video

Easy Pulse kit on sale

I have made 20 PCBs of Easy Pulse board using iTeadStudio’s 5cm x 5 cm double layer PCB service and I am giving out 15 of them in the form of kits including all the parts required to assemble the board. For those who are interested to try Easy Pulse, the price per kit is $18.00 including the shipping cost within the United States. I will accept payment through Paypal only. You have to email me first at admin (at) embedded-lab (dot) com and I will then send you my Paypal ID. Once I get the payment, I will mail your package through regular USPS (usually takes 3-5 business days). This kit can also be purchased from Tindie. The following picture shows all the parts that are included in the kit.

Easy Pulse kit

List of parts used in the Easy Pulse board

Assembled Easy Pulse board

If you want the sensor to be separate from the board as described earlier, you will need a wire to connect it to the board. The picture below shows a proper way of connecting the sensor to the board using a 4-pin jumper wire. Since the pins or legs of the TCRT1000 are thinner than the holes in the jumper wire, you may need to thicken them a little bit through soldering so that it is hold tight.

Connecting the TCRT1000 sensor using a jumper wire


Easy Pulse provides a reflective IR sensor with necessary instrumentation circuit to illustrate the principle of photoplethysmography as a noninvasive technique for measuring heart rate. In order for this sensor to work, the fingertip should be placed gently over the sensor and be kept still. The sensor may also be wired to the board through a 4-pin jumper and header pins. This gives more flexibility of using the sensor as you can place the sensor over the skin on palm, or wrap around a fingertip using paper or duct tape. A more practical way of putting a sensor would be in the form of a finger clip, like in commercial Pulse Oximeters, so that the sensor performance would not be affected too much by a slight movement of the finger.

Update (04/20/2013)

Easy Pulse Version 1.1 has been released with improved performance and features. Click here for more info.

Easy Pulse sensor (Version 1.1)

Update (05/26/2013)

Easy Pulse version 1.1 boards are now also sold by Elecrow, a China-based company, for $18.50 and ships world-wide. Please visit the following link if you are interested on getting an assembled Easy Pulse V1.1 board.

Buy Easy Pulse online


  • i need wire connections for this project .. i have soldered the components on a normal pcb board so please provide me wire connections so that i can procee further please mail me connections on

  • Please send me wire connections for this project.. i have soldered the components on a normal pcb board so please i need wire connections for this project.. please do mail me on

  • can you please mail me wire connections for this project please.. i have soldered the components on a normal pcb board so i need wire connections for that please mail me the connections on awaiting your reply..thank you

  • can u please inform me what is the biasing voltage vcc for the sensor tcrt1000….also what is the enable voltage?

  • To: rgv You need 3 tries? :-) It did not work with these elements? Can you describe what changed? It will be useful to everyone, the device does not work.

  • To: rgv. Potrzebne ci były 3 próby ? :-) Nie działało z tymi elementami ? Może opiszesz co zmieniłeś ? Przyda się wszystkim, którym urządzenie nie działa.

  • great work dude (y) !!!
    i m a biomedical engg, so got a lot amount of interest in this topic for obvious reasons.
    i worked on the circuit exactly as given here
    and after two to three trails got the heart beating electroniically :D :) (y) !!!
    thanks dude!!!
    great work!!!
    mark of a true engineer !
    u have owned my respect dude!

  • I used t h e i d e n t i c a l elements as in the diagram. The device does not work. Do not be fooled. I lost two days of the trial.

  • Hi fellas,
    I was just wondering where the code for interfacing the board with the arduino is?
    I’ve seen the code for the ChipKit but I want the code for the arduino. Loving the style and tone of the
    device already.

  • nir sensor is also used for measuring glucose .can the same circuit be used to measure it as only the final calibration is different?

  • I did it! My project worked, but I made some changes:
    The sensor I used was the TCRT5000, the op-amp used was two LM741, and to activate the sensor used a 330R resistor instead of the transistor.

  • can anyone plz tel y gain of 101 is necessary @ amplification stage??

  • Hello,
    Do you have any easy put kit on sale?
    The total price is $18.00, but I live in Brazil,
    so may you send me a kit to Brazil? I pay all impost.
    Keven Gomes

  • can anyone tel me, how amplification and filtering coverts signal to TTL pulses??

  • hi… without givin enable it was workin.. nd the blinkin of LED was synchronous to my pulse is well…. but when i give that connection the IR LED is not turnin on…bcz the o/p @ emitter is very low… any suggestions plz…

  • wats that enable pin does…. ??

  • Instead of TCRT1000 can v use TCRT5000/TCRT5000L… plz reply

  • Could the Easy Pulse be modified to provide an arterial pressure measurement?

  • using the LM358 as suggested to others,
    my led not blinking any suggestions

  • Can anyone tell me why filtering is done twice. Once high pass and low pass is used, the other frequencies less than .7 hz and greater than 2.34hz should have been removed?

  • can i use a lf353 instead of MCP6004 opamp

  • Can I use LM324 instead of MCP6004??

  • The TCRT1000 is not detecting pulses, I have changed it 3 times and it’s still not working. I have connected EXACTLY as you have told. Please help

  • Just ordered one of these for a Raspberry Pi project!

  • hello R-B
    TNX 4 ur good information and tnx 4 sharing with every one
    i want to measure this pulse with microcontroller pic16f628a as u do it in the first project about heart beat monitoring but when i simulate this project with the program of seven segment doesnt work well i use proteus for simulation
    plz help me
    tnk u in advance :)

  • I need the complete circuit diagram of this project. Please help.

  • i have tried to make at home but signal is very noisy on CRO. how can i can remove noise from the output signal?

  • Pingback: Heart Rate Circuit | Question and Answer

Leave a Reply

Your email address will not be published. Required fields are marked *