Close Menu
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
Facebook X (Twitter) Instagram
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us
Facebook X (Twitter) Instagram Pinterest YouTube LinkedIn
How To Electronics
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
How To Electronics
Home » Pulse Rate (BPM) Monitor using Arduino & Pulse Sensor
Arduino Projects

Pulse Rate (BPM) Monitor using Arduino & Pulse Sensor

Mamtaz AlamBy Mamtaz AlamUpdated:September 6, 202329 Comments7 Mins Read
Share Facebook Twitter LinkedIn Telegram Reddit WhatsApp
Pulse Sensor Arduino
Share
Facebook Twitter LinkedIn Pinterest Email Reddit Telegram WhatsApp

Overview

In this project, we will interface Pulse Sensor with Arduino to Measure Pulse Rate (BPM) or Heart Beat value. The Pulse rate will be displayed on 16×2 LCD Display.

A pulse sensor is a hardware device that can be used to measure heart rate in real-time. When paired with an Arduino microcontroller, you can create a simple yet effective heart rate monitor. This sensor is quite easy to use and operate. Place your finger on top of the sensor and it will sense the heartbeat by measuring the change in light from the expansion of capillary blood vessels.




Components/Hardware Required

We need following components for this project. All the components can be purchased from the given links.

S.N.ComponentsQuantityPurchase Link
1Arduino UNO Board1Amazon | AliExpress | SunFounder
2Pulse Sensor1Amazon | AliExpress | SunFounder
316X2 I2C LCD Display1Amazon | AliExpress | SunFounder
4Jumper Wires10Amazon | AliExpress | SunFounder
5Breadboard1Amazon | AliExpress | SunFounder

Pulse Sensor

The Pulse Sensor is a plug-and-play heart-rate sensor for Arduino. It can be used by students, artists, athletes, makers, and game & mobile developers who want to easily incorporate live heart-rate data into their projects.

The essence is an integrated optical amplifying circuit and noise eliminating circuit sensor. Clip the Pulse Sensor to your earlobe or fingertip. Then it into your Arduino, you are now ready to read heart rate.

The front of the sensor comes with the heart logo. This is where you place your finger. On the front side, you will see a small round hole, from where the green LED shines. Just below the LED is a small ambient light photosensor APDS9008 which adjust the brightness in different light conditions.

On the back of the module you will find MCP6001 Op-Amp IC, a few resistors, and capacitors. This makes up the R/C filter network. There is also a reverse protection diode to prevent damage if you connect the power leads reverse.


Pulse Sensor Technical Specifications

Physical Characteristics

  • Dimensions: Approximately 0.625″ (15.875mm) in diameter
  • Weight: Lightweight, usually around a few grams
  • Material: Biocompatible materials for safe skin contact

Electrical Characteristics

  • Operating Voltage: 3V – 5.5V
  • Current Consumption: Typically around 4mA
  • Output Signal: Analog (0.3V to VCC)
  • Signal Range: 0-1023 (10-bit ADC output of Arduino)

Sensing Technology

  • Sensor Type: Photoplethysmogram (PPG)
  • Wavelength: Typically around 565nm (Green LED)

Working of the Pulse Sensor

The Pulse Sensor works on the principle of Photoplethysmography (PPG), which is a non-invasive method for measuring changes in blood volume under the skin. The sensor essentially consists of two main components: a light-emitting diode (LED) that shines light into the skin and a photodetector that measures the amount of light that is reflected back. Here’s a detailed explanation of its working:

Pulse Sensor Working

  1. Light Emission: A green LED emits light into the skin.
  2. Reflection & Detection: The light interacts with blood and is partially reflected back, captured by a photodetector.
  3. Heart Rate: Changes in reflected light create a waveform that correlates with heartbeats.
  4. Oxygen Level: The amount of reflected light also indicates blood oxygen levels, as oxygenated blood absorbs more green light.
  5. Signal Filtering: A Low Pass Filter cleans up the noisy, raw signal from the photodetector.
  6. Amplification: An operational amplifier boosts the filtered signal for better accuracy.
  7. Data Reading: Finally, an Arduino reads the amplified signal and software algorithms translate it into heart rate and potentially blood oxygen levels.



Pulse Sensor PinOut

The pulse sensor has three pins: VCC, GND & Analog Pin.


Interfacing Pulse Sensor with Arduino

Let us interface the Pulse Sensor with Arduino and start measuring the Pulse Rate/Heart Beat/BPM Value.

Hardware Wiring Diagram

The connection diagram between Pulse Sensor and Arduino is so easy.

Pulse Sensor Arduino Connection

  • Connect the RED wire (Power) of the Pulse Sensor to the 5V pin on the Arduino.
  • Connect the BLACK wire (Ground) to the GND pin on the Arduino.
  • Connect the PURPLE wire (Signal) to Analog Pin 0 (A0) on the Arduino.

Pulse Sensor Arduino Interfacing

Using the Jumper Wires you can directly connect the Pulse Sensor with Arduino.


Pulse Sensor Library Installation

Before moving to the coding part, you need to add the Pulse Sensor Library on your Arduino Library Folder.

Download the PulseSensor Playground Library from the Arduino IDE (Go to Sketch -> Include Library -> Manage Libraries, then search for “PulseSensor Playground” and install it).

You visit Pulse Sensor Github repository to see the examples code with different microcontrollers.

Source Code/Program

Now let us take a look at the Pulse Sensor Arduino Code, taken from the library examples.

Open the example sketch that comes with the library (Go to File -> Examples -> PulseSensor Playground -> GettingStartedProject).

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
43
44
45
#define USE_ARDUINO_INTERRUPTS true
// Include necessary libraries
#include <PulseSensorPlayground.h>
 
// Constants
const int PULSE_SENSOR_PIN = 0;  // Analog PIN where the PulseSensor is connected
const int LED_PIN = 13;          // On-board LED PIN
const int THRESHOLD = 550;       // Threshold for detecting a heartbeat
 
// Create PulseSensorPlayground object
PulseSensorPlayground pulseSensor;
 
void setup()
{
  // Initialize Serial Monitor
  Serial.begin(9600);
 
  // Configure PulseSensor
  pulseSensor.analogInput(PULSE_SENSOR_PIN);
  pulseSensor.blinkOnPulse(LED_PIN);
  pulseSensor.setThreshold(THRESHOLD);
 
  // Check if PulseSensor is initialized
  if (pulseSensor.begin())
  {
    Serial.println("PulseSensor object created successfully!");
  }
}
 
void loop()
{
  // Get the current Beats Per Minute (BPM)
  int currentBPM = pulseSensor.getBeatsPerMinute();
 
  // Check if a heartbeat is detected
  if (pulseSensor.sawStartOfBeat())
  {
    Serial.println("♥ A HeartBeat Happened!");
    Serial.print("BPM: ");
    Serial.println(currentBPM);
  }
 
  // Add a small delay to reduce CPU usage
  delay(20);
}



Testing & Results

After uploading the Pulse Sensor Arduino Example code, you can start the testing process.

Place the finger on the Pulse sensor as shown below.

BPM Rate Arduino

Open the Serial Monitor to see the pulse sensor data.

The Serial Monitor will display the Pulse Rate value whenever it detect the heart beat.


Displaying Pulse Rate (BPM) Value on LCD Display

Instead of displaying the BPM value on Serial Monitor, we can display the value on LCD Display. We can use a 16×2 I2C LCD Display Code and interface with Arduino Board to display Pulse Sensor BPM Value.

Hardware Wiring Diagram

Since we are using an I2C LCD Display, connect it to the Arduino I2C Pins.

Pulse Sensor Aruduino LCD

  • VCC (Power): Connect the VCC pin on the I2C LCD to the 5V pin on the Arduino.
  • GND (Ground): Connect the GND pin on the I2C LCD to the GND pin on the Arduino.
  • SCL (Clock): Connect the SCL pin on the I2C LCD to the SCL pin (A5) on the Arduino.
  • SDA (Data): Connect the SDA pin on the I2C LCD to the SDA (A4) pin on the Arduino.

Arduino Pulse Sensor BPM LCD Connection

You may use breadboard or jumper wire for connection.



Source Code/Program

The code requires I2C LCD Library for compilation. Therefore download the library and add it to the Arduino library folder.

Here is a complete code.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Include necessary libraries
#define USE_ARDUINO_INTERRUPTS true
#include <PulseSensorPlayground.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
 
 
// Constants
const int PULSE_SENSOR_PIN = 0;  // Analog PIN where the PulseSensor is connected
const int LED_PIN = 13;          // On-board LED PIN
const int THRESHOLD = 550;       // Threshold for detecting a heartbeat
 
// Create PulseSensorPlayground object
PulseSensorPlayground pulseSensor;
 
void setup()
{
  // Initialize Serial Monitor
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
 
  // Configure PulseSensor
  pulseSensor.analogInput(PULSE_SENSOR_PIN);
  pulseSensor.blinkOnPulse(LED_PIN);
  pulseSensor.setThreshold(THRESHOLD);
 
  // Check if PulseSensor is initialized
  if (pulseSensor.begin())
  {
    Serial.println("PulseSensor object created successfully!");
  }
}
 
void loop()
{
  lcd.setCursor(0, 0);
  lcd.print("Heart Rate");
  
  // Get the current Beats Per Minute (BPM)
  int currentBPM = pulseSensor.getBeatsPerMinute();
 
  // Check if a heartbeat is detected
  if (pulseSensor.sawStartOfBeat())
  {
    Serial.println("♥ A HeartBeat Happened!");
    Serial.print("BPM: ");
    Serial.println(currentBPM);
 
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("BPM: ");
    lcd.print(currentBPM);
  }
 
  // Add a small delay to reduce CPU usage
  delay(20);
}

Testing & Results

Upload the above code and you can start testing the sensor working.

BPM Display Pluse Sensor

Place your finger on Pulse Sensor and you may see the BPM Value displayed on LCD Screen.

After uploading the sketch, the readings may not be immediately accurate. To get reliable results, try to keep your finger as steady as possible while waiting.




Troubleshooting Pulse Sensor Reading

To achieve stable and accurate readings from the Pulse Sensor, consider the following points:

  1. Check Operating Voltage: Ensure that the sensor is operating within its stable voltage range, which is between 3.3V and 5.5V. Using voltages outside this range can lead to unstable readings.
  2. Secure the Sensor: If you notice fluctuations in the readings, consider taping the sensor to your finger. This helps maintain constant blood flow, leading to more stable results.
  3. Heartbeat/Pulse/BPM Rate Monitor using Arduino & Pulse Sensor

  4. Be Patient: The sensor may take some time to produce stable output. Patience is key to obtaining reliable readings.
  5. Avoid External Light: Make sure to minimize exposure to external light sources when taking measurements, as they can interfere with the sensor’s ability to accurately detect pulse.
  6. Use a Low Pass Filter: If you’re still experiencing noise in the readings, implementing a software-based low pass filter in your code can help smooth out the data.

Conclusion

In this tutorial, we’ve walked you through the step-by-step process of creating a Pulse Rate Monitor using an Arduino and a Pulse Sensor. This project is not only educational but also highly practical, offering a cost-effective solution for monitoring your heart rate in real-time. Whether you’re a healthcare professional, a fitness enthusiast, or simply curious about electronics, this project provides valuable insights into both health monitoring and Arduino programming. We hope you found this guide informative and encourage you to explore further applications of this technology for your personal or professional use.

Here are list of some of the Pulse Sensor Based Projects:

  1. IoT BPM Monitoring on ThingSpeak
  2. ECG Display using Pulse Sensor with OLED
  3. Heart Rate BPM Meter using Easy Pulse Sensor
  4. IoT Based Patient Health Monitoring System
Share. Facebook Twitter Pinterest LinkedIn Tumblr Email Reddit Telegram WhatsApp
Previous ArticleEdge Detection & Motion Sensing with OpenCV on Raspberry Pi
Next Article Shape Based Object Tracking with OpenCV on Raspberry Pi

Related Posts

DC Energy Meter using Arduino

Build a DC Energy Meter using Arduino – 32V/5A

Updated:August 26, 20252K
Interfacing ADXL375 Accelerometer with Arduino

Interfacing ADXL375 Accelerometer with Arduino (±200g)

Updated:June 28, 2025
PZEM-004T Arduino Energy Meter

DIY AC Energy Meter using PZEM-004T & Arduino

Updated:March 6, 20258K
Interfacing BMI160 Accelerometer & Gyroscope with Arduino

Interfacing BMI160 Accelerometer & Gyroscope with Arduino

Updated:February 2, 20259K
Password Based Door Lock Security System Using Arduino & Keypad

Password Based Door Lock Security System Using Arduino & Keypad

Updated:February 2, 20252436K
Earthquake Detector Alarm with with Accelerometer & Arduino

Earthquake Detector Alarm with Accelerometer & Arduino

Updated:February 2, 2025661K
View 29 Comments

29 Comments

  1. Michael on July 18, 2018 11:14 PM

    please sir, what could be the reason why my BPM reads progressively ie something like 50, 68, 88,99,114,120,200?

    Reply
    • Alex Newton on July 28, 2018 9:55 AM

      Tightly put ur finger on sensor by wrapping it with sticky wrapper. Moving the finger will change the bpm value.

      Reply
    • Sanjeev Kumar SAH on February 27, 2019 9:23 PM

      Same problem occurs with me then how to solve please help me.

      Reply
  2. Srishti Chauhan on August 3, 2018 11:52 AM

    Its a wonderful project and is helpful for beginners to learn Arduino with such a phenomenal project.

    Reply
  3. Cielo on September 26, 2018 11:06 AM

    Why is the library PulseSensorPlayground not being recognized, not turning orange, even there are ccp, h and keyword text file? What’s the problem? Thank you.

    Reply
  4. Cielo on September 26, 2018 12:24 PM

    Why is the PulseSensorPlayground library not being recognized (not turning orange text) even there are ccp, h and keywords text files? What’s the problem? Thank you.

    Reply
    • Alex Newton on September 26, 2018 11:42 PM

      I think the latest library has been updated. So better google it look some codes in github for latest library.

      Reply
  5. James Abenir on December 14, 2018 6:13 PM

    Is it normal if my value is 229 fixed?

    Reply
    • Alex Newton on December 14, 2018 6:21 PM

      The normal value should be below 100. Actually 70-85 is termed as best value

      Reply
  6. Chris on January 8, 2019 5:37 PM

    I followed the tutorial but my sensor gives about 2-3 values and stops after.
    What can be the problem?

    Reply
    • Alex Newton on January 8, 2019 6:27 PM

      Do not move your finger. Make the finger stable. Or wrap your finger slightly with wrapper to make the finger immovable. Moving the finger canges the value.
      Also these sensors are cheap and can’t give value that we expect.

      Reply
  7. Chris on January 8, 2019 5:42 PM

    I followed the tutorial but my sensor stops after 2/3 readings. What can be the problem?

    Reply
  8. Raju Dave on May 27, 2019 12:01 PM

    can we see this display on tv connection also

    Reply
    • Alex Newton on May 27, 2019 12:26 PM

      Yes use raspberry pie and observe on monitor.

      Reply
  9. Rohith Prabu on October 1, 2019 12:30 AM

    What is the reason for showing abnormal values that is more than 100?

    Reply
  10. Vivienne on October 14, 2019 10:13 PM

    Hi, can test work on cats pulse rate??

    Reply
    • Alex Newton on October 14, 2019 10:17 PM

      Yes

      Reply
  11. HR on January 27, 2020 7:51 AM

    What should the LCD read when I do not have my finger on it? Seems to sit at 51

    Reply
  12. anita kenchannavar on May 20, 2020 11:58 AM

    Sir I am working on the remote health monitoring project using pulse sensor, temperature (LM35) sensor, Neo 6M GPS module and esp8266 – 01 wifi module with arduino uno. I am using the same above code for pulse sensor without LCD but I am getting values in the range 52 – 220. What could be the problem Sir? is there a need to calibrate it.

    Reply
    • Mr. Alam on May 20, 2020 12:02 PM

      Hi, the pulse sensor that I have used here is a highly inaccurate one with a big stability problem. The value will jump from small to very high range. In order to get fixed value do not move your fingers & keep it stable. You can use a capacitor to filter the value as well. If you want better results I highly recommend you to use MAX30100 Pulse Oximeter Sensor.

      Reply
  13. anita kenchannavar on May 20, 2020 12:05 PM

    Hello Sir,

    I using the same code as above for interfacing the pulse sensor with arduino uno but i am getting the values in the range 50 – 220. what could be the problem. pls help me. i am working on a project for engineering students
    thank u

    Reply
  14. Akash Sharma on August 21, 2020 12:52 PM

    mostly the output didn’t match to the exact one why?

    Reply
  15. Άρης Σούρλας on June 16, 2021 10:57 PM

    Can i ask why my lcd display doesn’t show the results like yours? What could the problem be?

    Reply
  16. ali on October 28, 2021 12:55 AM

    how to up load the code please ?

    Reply
  17. Rahul on September 23, 2022 12:17 PM

    can i get the report along with abstract of the project mentioned above? if it is available , please share me here or to my mail id – [email protected]

    Reply
  18. Raju on March 6, 2023 2:29 PM

    How to check its precision and accuracy?
    How it follows linearity curve

    Reply
  19. Arnar on April 14, 2023 12:49 PM

    Nothing happens for me, it prints “We created a pulseSensor Object !” But does not print heart beats at all.

    Reply
  20. Arnar on April 14, 2023 1:04 PM

    Nevermind the wiring was incorrect

    Reply
  21. Om Vikhe on April 22, 2023 9:25 AM

    It didn’t prints output on lcd despite all connections are correct.

    Reply

CommentsCancel reply

Latest Posts
ESP32 Fingerprint Attendance System with Live Web Dashboard

ESP32 Fingerprint Attendance System with Live Web Dashboard

June 16, 2026
IoT Based PM & Air Quality Monitoring System using ESP32

IoT Based PM & Air Quality Monitoring System using ESP32

June 14, 2026
DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

May 10, 2026
IoT Activity Tracker with ESP32 & Accelerometer Gyroscope

IoT Activity Tracker with ESP32 & Accelerometer/Gyroscope

May 2, 2026
A Guide to Sourcing Obsolete ICs for Vintage Projects

Beyond AliExpress: A Guide to Sourcing Obsolete ICs for Vintage Projects

April 21, 2026

ESP32 IoT Vehicle Motion Analyzer with MPU6050 & LIS3MDL

April 27, 2026
Building a Smart Sensor Node with a BLE Microcontroller

Building a Smart Sensor Node with a BLE Microcontroller

February 26, 2026
High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

April 27, 2026
Top Posts & Pages
  • ESP32 Fingerprint Attendance System with Live Web Dashboard
    ESP32 Fingerprint Attendance System with Live Web Dashboard
  • IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
    IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
  • 12V DC to 220V AC Inverter Circuit & PCB
    12V DC to 220V AC Inverter Circuit & PCB
  • Buck Converter: Basics, Working, Design & Application
    Buck Converter: Basics, Working, Design & Application
  • How to use ADS1115 16-Bit ADC Module with Arduino
    How to use ADS1115 16-Bit ADC Module with Arduino
  • IoT Based ECG Monitoring with AD8232 ECG Sensor & ESP32
    IoT Based ECG Monitoring with AD8232 ECG Sensor & ESP32
  • Interfacing PN532 NFC RFID Module with Arduino
    Interfacing PN532 NFC RFID Module with Arduino
  • IoT Based PM & Air Quality Monitoring System using ESP32
    IoT Based PM & Air Quality Monitoring System using ESP32
Categories
  • Arduino Projects (197)
  • Articles (60)
    • Learn Electronics (19)
    • Product Review (15)
    • Tech Articles (28)
  • Electronics Circuits (46)
    • 555 Timer Projects (21)
    • Op-Amp Circuits (7)
    • Power Electronics (13)
  • IoT Projects (205)
    • ESP32 MicroPython (7)
    • ESP32 Projects (82)
    • ESP32-CAM Projects (15)
    • ESP8266 Projects (76)
    • LoRa/LoRaWAN Projects (22)
  • Microcontrollers (38)
    • AMB82-Mini IoT AI Camera (4)
    • BLE Projects (18)
    • STM32 Projects (19)
  • Raspberry Pi (93)
    • Raspberry Pi Pico Projects (57)
    • Raspberry Pi Pico W Projects (12)
    • Raspberry Pi Projects (24)
Follow Us
  • Facebook
  • Twitter
  • Pinterest
  • Instagram
  • YouTube
About Us

“‘How to Electronics’ is a vibrant community for electronics enthusiasts and professionals. We deliver latest insights in areas such as Embedded Systems, Power Electronics, AI, IoT, and Robotics. Our goal is to stimulate innovation and provide practical solutions for students, organizations, and industries. Join us to transform learning into a joyful journey of discovery and innovation.

Copyright © How To Electronics. All rights reserved.
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us

Type above and press Enter to search. Press Esc to cancel.

Ad Blocker Enabled!
Ad Blocker Enabled!
Looks like you're using an ad blocker. Please allow ads on our site. We rely on advertising to help fund our site.