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


  • Hi,

    I’m using 2 LF353N op-amps instead of the MCP6004, and I’m using a 1 uF cap with 220k resistor to create the .7 Hz cutoff. I’ve connected everything correctly multiple times, but I still get nonsensical data resulting from Vout. What would you suggest would be the problem?



  • Hello, I am planning to build this circuit by buying all the separate materials and I just want to be able to see the LED flash. What is the use of the 2-pin enable jumper and could you also send me the wire connections?


  • Guys can i know if i can buy the sensor online an for hw much ???

  • 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

  • there is a problem with fluorescent lamp
    how filter them?

  • Sir,
    I tried it with mcp602,it isn’t working.The o/p from my tcrt1000 sensor is not like d one shown above.Any guesses what the problem might be?

  • how i can parches TCRT1000 & MCP6004 BECAUSE IT NOT PRESENT IN MY CITY

  • hello,

    you said pulling the Enable pin high will turn the IR emitter LED on and activate the sensor. If without microcontroller and “Enable” directly connect to 5V is’t still can on activate the sensor?

    Thanks in advance

  • Sir,
    can I use MCP602 for the revised version too? MCP6004 in not really available in the market here. If not would u jst suggest me an alternative.
    Thank u in advance.

  • Hello,

    Very nice project. I would like to ask you firstly how did you figure out the cut-off frequency needed for the HPF and the LPF, and also about the equation Beats per minute (BPM) = 60*f how did you derive this equation.


  • How does this compare with a standard pulse oximeter? I think this is just a bit too techie for my understanding:)

  • i want to parches TCRT1000 and MCP6004

  • Pingback: DIY a Easy Pulse sensor——measuring heart rate | A Maker's Dream Factory

  • Hi

    I made the complete circuit on a breadboard. To check he o/p i used an CRO. The CRO shows a signal of arnd 15Khz without any proper shape whenever i put my finger on the sensor, probably just some noise. I have all the parts as per your specs. What can be the reasons for this, I really need this project to work!!

  • hello..nice to meet u all.. im doin a final year project regarding pulse oximeter system. so here i need a circuit based on pulse oximeter system where consist of 2 readings which is heart beat and oxygen saturation. im too confused with this system. can anyone help me to give me a suitable and simple spo2 circuit. im very hoping for your help. tq very much.

  • hello sir ,
    can u send me the program for sending the value serially using rs232..and can i use pic16f877a microcontroller plz forward it to


  • doesn’t work…. doesn’t work…. doesn’t work…. doesn’t work….!!!!!!!!!!!!

  • hi,
    MCP6004 and TCRT1000 are not available in market. can i use lm741 at the place of MCP6004 and simple IR tx and IR rx?

  • I bought the kit, the LED flashes a few times but does not flash synchronously with the pulse of the heart, not the perceived

    • Hi Andrea,
      Can you send me the picture of your assembled board? Make sure you have a jumper placed on between VCC and EN header pins. You said it worked first time. Did you do any changes to it later?

  • doesn’t work….

  • why the sensor don’t detect pulses? first worked fine now no longer captures the pulse

  • Hi
    I thinking about plug this board as external mic to smartphon and use with some free heartbeat app. I want remove mic from headset cable and then solder there output from hear rate sensor board. Can I do this directly?

  • hello,
    i have a question please, why is the output TTL pulses? what is the explanation for that?
    thank you,

  • hello I wanted to ask if you feel the potentiometer 5k could affect the second high-pass filter … I also see the waveform on the oscilloscope and there is a negative side … where it comes from, how it is caused? the amplitudes of the signals of the sensor, first and second op amp op amp are respectively: 1.2 mv, 50 or 60 mv, 0.6V … sorry for my english I’m Italian and use google translator

  • Very nice work !

    As a marine biologist, I’d like to measure heartbeat in mussels or limpets, using an infrared device. I would appreciate your advice as it already exist, but not as an embedded (and waterproof) system ; the whole old setup, which seems to need many filters (as far as I understand the scheme), is visible in

    I would like to build an arduino based autonomous system wich could record for weeks the heartbeat of a mussel on a SD card. However, I’m not an electronician ; do you think “easy pulse” output could be similar to what they obtained in the article mentionned above ?

    Thanks in advance for your comments

  • good piece of working!!
    can u plz answer my ques
    Scenario 1
    we know that based on the changes of the blood volume, the output voltage from the sensor also changes (as u R-B said). Blood volume will be different for each and it will be also different for the individual at times, based on the function of heart. Yet, the amplification factor of the design is fixed (101*101 = 10201). we know that the micro controller is compatible with only in digital(TTL) signals (1 or 0) and normally 5V – “1″ and 0V – “0″.
    we are using TMRO (timer) module (counter mode) so that we can count the pulses recieved at RA4 (TMRO). As we know we cannot convert the analogue into digital signal while using the TMRO (Pin4).
    Suppose when measuring the heart rate we come across a situation where the fixed amplification factor(101*101 = 10201) is not enough to drive the signal to 5V, since the signal from the sensor is weaker than expeceted.
    1. Since the amplification factor is not enough to drive the voltage to 5V (logic 1), the micro controller will not function since the signal is analogue. we also cannot use A/D conversion here??? is that the reason why you are using 5k potentiometer at the end of amplification stage???

    Scenario 2
    15sec delay is created in the program using timer module (Delay 15000), so that when it is executed “Enable” also in high so the transmission takes place and the signal goes to RA4 pin(TMRO). I think that the timing delay and counting the pulse is functioning in same memory location, which will overwrite themselves and program will stop functioning.

    1. Is it possible to use both delay and counting operation at same time???At the same time TMR0 is used to count the pulse from the output of the signal conditioning as well as for delay. PLZ enlighten me on this issue….

  • Pingback: Single Wavelength Pulse Oximeter »

  • Pingback: Ding des Monats 11/2012 – Biofeedback mit Arduino | Dingfabrik Köln e.V. | Deutz-Muehlheimer Straße 129 | 51063 Koeln

  • I replace TCRT1000 with L-53P3C 5mm phototransistor and MCP6004 with LM324D, for TX led I use red 5mm high bright 15000mcd, and all works fine. All is made in smd double sided PCB fashion, and all is very small W 4,5cm x H 3,8cm. Now I making PCB for 3-digit led counter with PIC16F628. Firmware source is made in MikroC and you can adjust time for counting (number of pulses x 60). Project is located here :


  • Thank you for sharing your project.
    I asked permission to download image and upload it to Facebook
    then translate into Indonesian so my friends can make this project.
    Thanks before.

    • You can translate a part of it or write a summary in Indonesian and link to the original URL for full description of the project. You can also share some pictures on Facebook too.

  • Thanks for sharing the circuit really nice work!!!!.But i have a small problem.Sometimes when i have my finger on it does not recognize my pulses.Can you imagine why is this happening?I used the values that Alireza said and because i didn’t have to my stock resistors 47k i used 50k.Also i have it on a breadboard .Thanks again Panagiotis

  • Thanks for posting this design. Nicely done. Just got the kit today. Have a few questions:

    1) The raw PPG you showed (~1.7V) is measured at pin 4 of the the sensor TCRT100? I always got ~ 0.2V. Is that normal?

    2) Is it hard to get the signal from your finger? I tried to place my finger at different orientations from the sensor but it seems quite sensitive to the position. In fact, if placing finger to close give no signal at all. Have you experienced something similar?

  • How to get meter pulse up to 220-230 ?

  • What is maximum metering pulse for actual circuit ?

    Can I change MCP6004 with LM324 ? They looks the same both are 1MHz quad opamp with the same pins.

  • thanks very much the circuit works fine.
    I do it myself again on a bread board with TCRT5000 sensor I couldn’t find TCRT1000 in my city.
    again thanks you very much for your circuit and sharing it for free.
    after that I change some values in the circuit because of heart rate frequency it works better after that. I changed HPF values to 1 uF cap. and 330 K-ohm for cut-off freq. .48 Hz and the LPF cap. value to 78 nF for cut-off freq. 3 Hz. I change values to tune up circuit for faster response and also wider bandwidth for heart rate freq. the min and max values of possible heart rate is 40 to 170. this values works fine now.

  • Hey Raj!
    Can you tell when you have this kit for sell again?

    thank you!

  • Pingback: Problem Identifying the Light / IR detector

  • Raj! Can you help me with car voltage monitor circuit, i really want to do this for my mother? thank you so much!

  • I post a question in car voltage monitor, i have two wire from car charger, white wire and red wire, how do i connect them on pic16f1827??

  • I won’t buy from China too long waiting too bad!!!!

  • Raj? I requested the shipping cost to canada to send you the money, and you don’t answer… ??

  • Raj?
    Is Vout is Vsensor pin?

    thank you!

  • Pingback: A DIY photoplethysmographic sensor for measuring heart rate « Medical and Health Related Projects with Arduino

  • Do you have a complete schematic for this version?

    • Hi Walt,
      The complete schematic is divided into three parts as shown in the article. The O/P from the first part goes into the second, and o/p from the second goes into third stage. I think the circuit diagrams are easy to follow. Let me know if you have any further questions.

  • What was stopping you from doing the filtering digitally?

  • Pingback: DIY Photoplethysmographic sensor for measuring heart rate |

  • Hi. I plano to build this from scratch just for fun, but don’t know what the right VOLTAGE values of the capacitors are. Can you tell me what is the voltage value of the 1uF and 100 nF capacitors, please?

  • Hi!
    From this project :, do RA3 is Enable and RA4 is VSensor?

    thank you so much!

  • beautiful, never thought filters could result on a so well shaped curve of the real thing !

  • Hi, thank you very much to this sit witch is the best in micro controller field.
    could you pleas tell me what the right method to calculate the values of cut-off frequencies for the filters and why the ??or give me name of book about the filters and the practical application of it.

    thank you again

  • Pingback: Indagadores |Seguridad informatica |Seguridad en internet » La medición de un pulso de luz infrarroja

  • One thing you MAY want to consider is to modulate the intensity of the LED light (say at 10-100 kHz) and then detect the signal synchronously (i.e., similarly to the way a lock-in amplifier works). That way you can move your entire signal to a higher frequency far away from typical noise that is more prevalent at low frequencies. Just a thought… Also, if you use 2 wavelengths, can you also make a pulse oximeter (

  • Pingback: Measuring a pulse with infrared light | vis a vis | visual mind

  • Pingback: Measuring a pulse with infrared light - Hack a Day

Leave a Reply

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