A PulseSensor library with popular sensor manufactured by PulseSensor.com
(or it’s cheaper China clone) exists for Arduino that can detect pulse. Optical heart rate sensors use a methodology called photoplethysmography (PPG) to measure heart rate. A photoplethysmogram (PPG) can detect blood volume changes in the microvascular bed of tissue. A photoplethysmography is obtained by using a pulse oximeter which illuminates the skin and measures changes in light absorption. A conventional pulse oximeter monitors the perfusion of blood to the dermis and subcutaneous tissue of the skin. PPG is based on the fact that light entering the body will scatter in a predictable manner as the blood flow dynamics change, such as with changes in blood pulse rates (heart rate) or with changes in blood volume (cardiac output). Two important components of these sensors are optical emitter – generally made up of at least 2 LED’s that send light waves into the skin. Because of the wide differences in skin tone, thickness, and morphology associated with a diversity of people wearing the devices and second part is Digital Signal Processor (DSP). Our human body emits biophotons, also known as ultraweak photon emissions (UPE), with a visibility 1,000 times lower than the sensitivity of our naked eye. While not visible to us, these particles of light or waves are part of the visible electromagnetic spectrum (380-780 nm) and are detectable through some equipment. These photodiodes collects the light reflected from the blood in the arteries, veins and the skin tissue from various depths. The blood flowing in the arteries and veins is pulsatile in nature enabling changes in the reflected light. Thus this photodiode signal can read the instantaneous heartbeat of a person.
Instead of buying the sensor, we also can create our own infrared pulse sensor. That is separate topic.
Code for ESP32 Arduino Pulse Sensor Amped
Wiring is easy! +ve of the sensor will go to ESP32’s 3V, -ve of the sensor will go to ESP32’s GND and S (or data) of the sensor will go to ESP32’s 34 number pin. ESP32 has two analog input pins including pin 34.
---
Use the newest library :
1 | https://github.com/WorldFamousElectronics/PulseSensorPlayground |
I used this somewhat modified code from the modified to blink the ESP32’s LED on each heart beat :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // Modified by Dr. Abhishek Ghosh, 2019 // see https://thecustomizewindows.com // GNU GPL 3.0 // Variables int PulseSensorPurplePin = 34; // Pulse Sensor WIRE connected to Pin 34 int LED13 = 2; // The on-board ESP32 LED int Signal; // holds the incoming raw data. Signal value can range from 0-1024 int Threshold = 2400; // Determine which Signal to "count as a beat", and which to ingore. // The SetUp Function: void setup() { pinMode(LED13,OUTPUT); // pin that will blink to your heartbeat Serial.begin(9600); // Set's up Serial Communication at certain speed. } // The Main Loop Function void loop() { Signal = analogRead(PulseSensorPurplePin); // Read the PulseSensor's value. // Assign this value to the "Signal" variable. Serial.println(Signal); // Send the Signal value to Serial Plotter. if(Signal > Threshold){ // If the signal is above "2400", then "turn-on" ESP32's on-Board LED. digitalWrite(LED13,HIGH); } else { digitalWrite(LED13,LOW); // Else, the sigal must be below "2400", so "turn-off" this LED. } delay(10); // too higher delay will } |
I made a GIF of the working thing (which will also give idea how I used the male to female jumpers with ESP32). I used the bare sensor (it is China clone, no extra things to fix with finger) kept on the table and pressed my thumb against it :

You can open the serial plotter of Arduino IDE, you will get a jittery curve. Probably it needs some filter (we talked about Kalman Filter to stabilize sensor readings) or need the below kind of fix :
1 | https://esp32.com/viewtopic.php?t=2590 |
AD8232 probably a better option than this sensor.
Our work was to make it somewhat working for the sake of next projects.
Tagged With https://thecustomizewindows com/2019/04/esp32-arduino-pulse-sensor-amped/ , esp32 and pulse sensor , esp32 arduino ide pulse counter example , esp32 ir slotted optical sensors , esp32 using ir slot sensors , heartbeat pulse sensor esp32 , pulse capture in esp32 arduino , pulse rate using esp32 , speed pulse wire on android 8 navigation