Introduction: Measuring Your Heart Rate Is at the Tip of Your Finger: Photoplethysmography Approach to Determining Heart Rate

A photoplethysmograph (PPG) is a simple and low-cost optical technique that is often used to detect changes in blood volume in a microvascular bed of tissue. It is mostly used non-invasively to make measurements at the surface of the skin, typically a finger. The waveform of the PPG has a pulsatile (AC) physiological waveform due to cardiac synchronous changes in the blood volume with each heartbeat. The AC wave is then superimposed on a slowly changing (DC) baseline with different lower frequency components that are due to respiration, sympathetic nervous system activity, and thermoregulation. A PPG signal can be used to measure oxygen saturation, blood pressure, and cardiac output, to check the cardiac output and potentially detect peripheral vascular disease [1].

The device we are creating is a finger photoplethysmograph for the heart. It is designed for the user to place their finger in the cuff over an led and phototransistor. The device will then blink for each heartbeat (on the Arduino) and calculate the heart rate and output it to the screen. It will also show what the respiratory signal looks like so that the patient can possibly compare it to their previous data.

A PPG can measure the volumetric change in blood volume by measuring the light transmission or reflection. Each time the heart pumps, the blood pressure in the left ventricle increases. The high pressure causes the arteries to bulge slightly with each beat. The increase in pressure causes a measurable difference in the amount of light that is reflected back and the amplitude of the light signal is directly proportional to the pulse pressure [2].

A similar device is the Apple Watch PPG sensor. It analyzes pulse rate data and uses it to detect possible episodes of irregular heart rhythms consistent with AFib. It uses green LED lights along with light-sensitive photodiodes to look for relative changes in the amount of blood flowing in the user’s wrist at any given moment. It uses the changes to measure the heart rate and when the user is stationary, the sensor can detect individual pulses and measure the beat-to-beat intervals [3].


First of all, for building the circuit we used a breadboard, (1) green LED, (1) phototransistor, (1) 220 Ω resistor, (1) 15 kΩ resistor, (2) 330 kΩ, (1) 2.2 kΩ, (1) 10 kΩ, (1) 1 μF capacitor, (1) 68 nF capacitor, UA 741 op-amp and wires.

Next, to test the circuit we used a function generator, power supply, oscilloscope, alligator clips. Finally, to output the signal to a user-friendly UI we used a laptop with Arduino Software and an Arduino Uno.

Step 1: Draw Out the Schematic

We began by drawing out a simple schematic to capture the PPG signal. Since PPG uses LED, we first connected a green LED in series with a 220 Ω resistor and connected it to 6V power and ground. The next step was to capture the PPG signal using a phototransistor. Similar to the LED, we put it in series with a 15 kΩ and connected it to 6V power and ground. This was followed by a bandpass filter. The normal frequency range of a PPG signal is 0.5 Hz to 5 Hz [4]. Using the equation f = 1/RC, we calculated the resistor and capacitor values for the low and high pass filters, resulting in a 1 μF capacitor with a 330 kΩ resistor for the high pass filter and 68 nF capacitor with a 10 kΩ resistor for the low pass filter. We used the UA 741 op-amp in between the filters that was powered with 6V and -6V.

Step 2: Test the Circuit on a Oscilloscope

We then built the circuit on a breadboard. After, we tested the circuit output on the oscilloscope to check that our signal was as expected. As seen in the figures above, the circuit resulted in a strong, stable signal when a finger was placed over the green LED and phototransistor. The signal strength also varies between individuals. In the later figures, the dicrotic notch is evident and it is clear that the heart rate is faster than that of the individual in the first few figures.

Once we were sure that the signal was good, we then proceeded with an Arduino Uno.

Step 3: Connect Breadboard to an Arduino Uno

We connected the output (across the second capacitor C2 in the schematic and ground) to pin A0 (sometimes A3) on the Arduino and the ground rail on the breadboard to a GND pin on the Arduino.

See the images above for the code we used. The code from Appendix A was used to show the graph of the respiratory signal. The code from Appendix B was used to have a built-in LED on the Arduino blink for each heartbeat and print out what the heart rate is.

Step 4: Tips to Keep in Mind

In the paper Body Sensor Network for Mobile Health Monitoring, A Diagnosis and Anticipating System, the researcher Johan Wannenburg et al., developed a mathematical model of a pure PPG signal [5]. In comparing the shape of a pure signal to our signal - of an individual person - (figures 3, 4, 5, 6), there are admittedly, some clear differences. First off, our signal was backward, so the dicrotic notch on the left side of each peak rather than the right side. Also, the signal was vastly different between each person, so sometimes the dicrotic notch wasn’t evident (figures 3, 4) and sometimes it was (figures 5, 6). Another notable difference was that our signal wasn’t as stable as we would’ve liked. We realized that it was very sensitive, and the smallest nudge of the table or any wire would change the way the oscilloscope output looked.

For adults (over 18 years old) the average resting heart rate should be between 60 and 100 beats per minute [6]. In Figure 8, the heart rates of the individual being testing were all between these two values, indicating that it seems to be accurate. We did not get a chance to calculate heart rate with a different device and compare it with our PPG sensor, but it is likely that it would be close to accurate. There were also many factors that we could not control, thus leading to the variation in results. The amount of ambient lighting was different each time we tested it because we were either in a different location, there was a shadow over the device, we used a cuff sometimes. Having less ambient lightning made the signal clearer, but changing that was out of our control and thus affected our results. Another issue is temperature. The study Investing the Effects of Temperature on Photoplethysmography by Mussabir Khan et al., the researchers found that warmer hand temperatures improved the PPG quality and accuracy [7]. We actually noticed that if one of us had cold fingers, the signal would be poor and we couldn’t make out the dicrotic notch in comparison to a person who had warmer fingers. Also, because of the sensitivity of the device, it was difficult to judge whether or not the device set-up was at an optimum to give us the best signal. Because of this, we had to fiddle around with the board every time we set-up and check the connections on the board before we could connect it to the Arduino and look at the output we wanted. Since there are so many factors that come into play for a breadboard set-up, a PCB would greatly reduce them and give us a more accurate output. We built our schematic in Autodesk Eagle to create a PCB design and then pushed it to AutoDesk Fusion 360 for visual rendering of what the board would look like.

Step 5: PCB Design

We reproduced the schematic in AutoDesk Eagle and used its board generator to create the PCB design. We also pushed the design to AutoDesk Fusion 360 for visual rendering of what the board would look like.

Step 6: Conclusion

In conclusion, we learned how to develop a design for a PPG signal circuit, built it and test it. We were successful in building a relatively simple circuit to reduce the amount of possible noise in the output and still have a strong signal. We tested the circuit on ourselves and found that it was a little sensitive but with some tweaking of the circuit (physically, not the design), we were able to get a strong signal. We used the signal output to calculate the heart rate of the user and outputted it and the respiration signal to the nice UI of Arduino. We also used the built-in LED on Arduino to blink for every heartbeat, making it evident to the user when exactly their heart was beating.

PPG has many potential applications, and its simplicity and cost-effectiveness make it useful to integrate into smart devices. As personal healthcare has become more popular in recent years, it is imperative that this technology is designed to be simple and cheap so that it may be accessible all around the world to anyone who needs it [9]. A recent article looked into using PPG to check for hypertension - and they found that it could be used in conjunction with other BP measurement devices [10]. Perhaps there is more that can be discovered and innovated in this direction, and thus PPG should be regarded as an important tool in healthcare now and in the future.

Step 7: References

[1] A. M. García and P. R. Horche, “Light source optimizing in a biphotonic vein finder device: Experimental and theoretical analysis,” Results in Physics, vol. 11, pp. 975–983, 2018.
[2] J. Allen, “Photoplethysmography and its application in clinical physiological measurement,” Physiological Measurement, vol. 28, no. 3, 2007.

[3] “Measuring the Heart - How do ECG and PPG Work?,” imotions. [Online]. Available: [Accessed: 10-Dec-2019].


[5] S. Bagha and L. Shaw, “A Real Time Analysis of PPG Signal for Measurement of SpO2 and Pulse Rate,” International Journal of Computer Applications, vol. 36, no. 11, Dec. 2011.

[6] Wannenburg, Johan & Malekian, Reza. (2015). Body Sensor Network for Mobile Health Monitoring, a Diagnosis and Anticipating System. Sensors Journal, IEEE. 15. 6839-6852. 10.1109/JSEN.2015.2464773.

[7] “What Is a Normal Heart Rate?,” LiveScience. [Online]. Available: [Accessed: 10-Dec-2019].

[8] M. Khan, C. G. Pretty, A. C. Amies, R. Elliott, G. M. Shaw, and J. G. Chase, “Investigating the Effects of Temperature on Photoplethysmography,” IFAC-PapersOnLine, vol. 48, no. 20, pp. 360–365, 2015.

[9] M. Ghamari, “A review on wearable photoplethysmography sensors and their potential future applications in health care,” International Journal of Biosensors & Bioelectronics, vol. 4, no. 4, 2018.

[10] M. Elgendi, R. Fletcher, Y. Liang, N. Howard, N. H. Lovell, D. Abbott, K. Lim, and R. Ward, “The use of photoplethysmography for assessing hypertension,” npj Digital Medicine, vol. 2, no. 1, 2019.