Skip to the content
4 layers85.4 × 48.3 mmProject 001, the printed circuit board in 3D

Smart Heart Rate Monitor

Size
85.4 × 48.3 mm
Copper layers
4
Thickness
1.6 mm
Parts
14
Nets
32
Pads
67
Tracks, vias
22, 4
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
14 Aug 2025
Updated
16 Aug 2025

Overview

Project 001 is an open-source printed circuit board by aleksanry, from the aleksanry/Smart_Heart_Rate_Monitor repository on GitHub. It is a 4-layer board of 85.4 × 48.3 mm with 14 parts on 32 nets, routed with 22 tracks and 4 vias.

It is built around the MAX30102. Its parts include 4 resistors and 3 capacitors. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

1

README

README.md

Smart Heart Rate Monitor 💓

A comprehensive Arduino-based heart rate monitoring system featuring real-time BPM detection, customizable alarms, and an intuitive OLED interface.

Heart Rate Monitor image

✨ Features

  • 📊 Real-time Heart Rate Monitoring - Continuous BPM detection with rolling average
  • 🖥️ OLED Display Interface - Clear, intuitive menu system
  • 🚨 Smart Alarm System - Customizable high/low BPM thresholds
  • 📈 Session Statistics - Track min/max BPM and session duration
  • 💡 Visual Indicators - LED status feedback and heartbeat animation
  • ⚙️ User-Friendly Controls - Three-button navigation system
  • 🔧 Sensor Calibration - Built-in sensor status monitoring

🛠️ Hardware Requirements

Components

  • Arduino Nano v3.x - Main microcontroller
  • MAX30102 - Heart rate and pulse oximetry sensor
  • SSD1306 OLED Display (128x64) - User interface
  • 3x Push Buttons (SW1, SW2, SW3) - User input
  • 1x LED (D1) - Status indicator
  • 3x Pull-up Resistors (1kΩ) - Button debouncing
  • 3x Capacitors (100nF) - Power filtering

Pin Connections

ComponentArduino PinNotes
MAX30102 SDAA4I2C Data
MAX30102 SCLA5I2C Clock
OLED SDAA4I2C Data
OLED SCLA5I2C Clock
SW1 (Menu)pin D2Analog input with pull-up
SW2 (Up)pin D3Analog input with pull-up
SW3 (Down)pin D4Analog input with pull-up
Status LEDPin D12Digital output
Power5V/3.3VVCC connection
GroundGNDCommon ground

📚 Software Requirements

Arduino Libraries

Install these libraries through the Arduino Library Manager:

text
Adafruit SSD1306        // OLED display driver
Adafruit GFX Library    // Graphics library
MAX30105lib             // SparkFun MAX3010x sensor library

Library Installation

  1. Open Arduino IDE
  2. Go to Sketch → Include Library → Manage Libraries
  3. Search and install each library listed above
  4. Restart Arduino IDE

🚀 Installation & Setup

1. Hardware Assembly

  • Follow the pin connection table above
  • Ensure proper power connections (3.3V or 5V)
  • Connect I2C devices to the same bus (SDA/SCL)
  • Add pull-up resistors to button connections

2. Software Upload

bash
# Clone the repository
git clone https://github.com/Aleksanry/Smart_Heart_Rate_Monitor.git

# Open the Arduino file
# HR_Monitor_Firmware/HR_Monitor_Firmware.ino

# Select your board: Arduino Nano
# Select the correct COM port
# Click Upload

3. Sensor Calibration

  1. Power on the device
  2. Navigate to Settings Menu → Sensor Config
  3. Ensure IR signal shows values > 10000 when finger is placed
  4. If values are low, check sensor connections

🎮 User Interface Guide

Button Controls

  • SW1 (Menu) - Navigate between screens, confirm selections
  • SW2 (Up) - Navigate up, increase values
  • SW3 (Down) - Navigate down, decrease values

Screen Navigation

text
Main Screen
    ↓ (SW1)
Settings Menu
    ↓ (SW1)
┌─ Alarm Settings
└─ Sensor Calibration

Main Display Elements

  • Large BPM Reading - Current heart rate
  • Status Indicator - LOW/NORMAL/HIGH
  • Alarm Status - ON/OFF indication
  • Session Timer - Minutes and seconds elapsed
  • Heartbeat Animation - Visual pulse indicator
  • Alarm Banner - Flashing when triggered

⚙️ Configuration Options

Alarm Settings

  • Minimum BPM: Default 60, Range 30-120
  • Maximum BPM: Default 100, Range 80-220
  • Alarm Enable/Disable: Toggle alarm functionality

Sensor Parameters

  • LED Brightness: 60 (adjustable in code)
  • Sample Rate: 400 Hz
  • Sample Average: 4 readings
  • Pulse Width: 411 µs

🔍 Troubleshooting

Common Issues

No Heart Rate Reading

  • Check sensor placement (fingertip on sensor)
  • Verify MAX30102 connections
  • Ensure adequate lighting conditions
  • Check I2C address (default 0x57)

Display Not Working

  • Verify OLED connections (SDA/SCL)
  • Check I2C address (default 0x3C)
  • Ensure adequate power supply

Buttons Not Responding

  • Check analog pin connections
  • Verify pull-up resistors are installed
  • Test button continuity

Inaccurate Readings

  • Keep finger steady during measurement
  • Avoid excessive pressure on sensor
  • Wait for stabilization (10-15 seconds)

Debug Mode

Enable serial monitoring at 115200 baud for diagnostic information:

cpp
Serial.begin(115200);  // Already included in code

📊 Technical Specifications

Performance

  • Update Rate: 20ms sensor reading, 500ms display refresh
  • Accuracy: ±2 BPM (typical)
  • Range: 20-220 BPM
  • Response Time: 3-5 seconds for stable reading

Power Consumption

  • Active Mode: ~50mA @ 5V
  • Display On: ~30mA additional
  • Sensor Active: ~15mA additional

Memory Usage

  • Program Memory: ~75% of Arduino Nano
  • Dynamic Memory: ~60% of available RAM

🔧 Customization

Modifying Thresholds

cpp
// Default alarm thresholds (in setup())
int minHeartRate = 60;    // Lower limit
int maxHeartRate = 100;   // Upper limit

Display Update Rate

cpp
// Update intervals (in milliseconds)
const unsigned long DISPLAY_UPDATE_INTERVAL = 500;  // 500ms
const unsigned long SENSOR_READ_INTERVAL = 20;      // 20ms

LED Behavior

cpp
// Alarm LED patterns
digitalWrite(LED_PIN, (millis() / 250) % 2);  // Fast blink (250ms)
digitalWrite(LED_PIN, (millis() / 1000) % 2); // Slow blink (1000ms)

Code Style Guidelines

  • Use descriptive variable names
  • Comment complex algorithms
  • Follow Arduino naming conventions
  • Test on actual hardware before submitting

🙏 Acknowledgments

  • SparkFun for the excellent MAX30105 library
  • Adafruit for the comprehensive display libraries
  • Arduino Community for continuous support and inspiration

🔮 Future Enhancements

  • Bluetooth connectivity for data logging
  • SD card storage for long-term monitoring
  • Mobile app integration
  • Multiple user profiles
  • Advanced analytics and trends
  • Voice alerts
  • Battery level monitoring

⚠️ Medical Disclaimer: This device is for educational and recreational purposes only. It is not intended for medical diagnosis or treatment. Always consult healthcare professionals for medical advice.


Made with ❤️ by Nermin | Arduino Heart Rate Monitor v1.0

Parts

14
QtyValueFootprintReferences
41kResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR1, R2, R3, R4
3100nCapacitor_THT:C_Disc_D4.7mm_W2.5mm_P5.00mmC1, C2, C3
3SW_PushButton_Switch_THT:SW_PUSH_6mmDOWN, MENU, UP
1Arduino_Nano_v3.xModule:Arduino_NanoArduino_Nano_v3.x
1LEDLED_THT:LED_D5.0mmALARM
1MAX30102SPO2_Stuff:MAX30102MAX30102
1SSD1306SPO2_Stuff:SSD1306OLED SSD1306

Similar boards

  • 4 layers82.8 × 33 mmE ink watch, the printed circuit board in 3D

    E ink watch

    sandgum/Triangulate-ES_01-Watch

    A 5mm thick smartwatch which uses an E-ink display and two OLEDs to display information while consuming very little power

    162 parts22
  • 4 layers28 × 34.7 mmWearable, the printed circuit board in 3D

    Wearable

    theheraldproject/herald-hardware

    Permissively licensed opensource hardware designs for Herald powered wearables and beacons. Supports digital contact tracing and other eHealth approaches.

    82 parts6
  • 4 layers124.7 × 64.3 mmRP2040 SOS band, the printed circuit board in 3D

    RP2040 SOS band

    abhinav937/RP2040_SOS_band

    PCB design files for RP2040 based SmartWatch. It features an accelerometer, a GPS module and a cellular module.

    107 parts3
  • 2 layers44 × 88.2 mmModulo 7, the printed circuit board in 3D

    Modulo 7

    Epivaral/CursoIoT

    Material complementario del curso: INTRODUCCIÓN A IOT, ALMACENAMIENTO EN LA NUBE Y ANÁLISIS DE DATA

    11 parts3
  • 4 layers77 × 48.6 mmNX ISD, the printed circuit board in 3D

    NX ISD

    Ghost3379/NX-ISD

    A more sophisticated version of the Artemis Watch by Circuitmess.

    116 parts2GPL-3.0
  • 2 layers75.1 × 50.1 mmPcb tutorial, the printed circuit board in 3D

    Pcb tutorial

    ODARI-CHARLES1/Pcb_Project

    A tutorial on creating a custom symbol and Footprint

    14 parts2
  • 4 layers75 × 50 mmDIY SPO2-KiCAD Project, the printed circuit board in 3D

    DIY SPO2-KiCAD Project

    Soham3126/DIY-SPO2-KiCAD-Project

    A low-cost, non-invasive Pulse Oximeter (SpO2) and Heart Rate monitor based on the MAX30102 sensor and Arduino. This project features real-time PPG signal processing, I2C communication, and a custom PCB design for…

    19 parts2
  • 10 layers100 × 200 mmTdse tf 2-01, the printed circuit board in 3D

    Tdse tf 2-01

    Taller-de-sistemas-embebidos-tps/tdse-tf_2-01

    Trabajo Final - Taller de Sistemas Embebidos - FIUBA

    17 parts2

Questions

How big is the Project 001 PCB?

It measures 85.4 × 48.3 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Project 001 use?

14 parts, built around the MAX30102. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Project 001 KiCad files?

From the aleksanry/Smart_Heart_Rate_Monitor repository on GitHub, at the commit this page was made from: the board is PCB_KICAD/project_001.kicad_pcb and its schematic PCB_KICAD/project_001.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Project 001 design in my own project?

Its repository states no licence, so its author keeps all rights: ask aleksanry before reusing the design.