Skip to main content
Version: ACS CC

Pulse Oximeter

Device for measuring pulse and SpO2 levels

info

Author: Gavrila Paul-Alexandru
GitHub Project Link: https://github.com/UPB-PMRust-Students/proiect-paulgavrila0310

Description

Built using Rust and the Embassy-rs framework, this project provides a simple way to measure a person's blood oxygen saturation (SpO2) and heart rate (beats/min) and to check if the values are within healthy limits. The measured values will be displayed on an LCD screen. If the MAX30100 sensor detects low levels of blood oxygen or an abnormal heart rate, the user will be alerted by flashing LEDs and buzzer noise.

Motivation

I wanted to build a device that measures and processes data that would also be useful to the average person on a day-to-day basis. Measuring your heart rate and SpO2 levels can help detect any possible heart or lung conditions, for which early diagnosis is essential in getting a positive outcome. Additionally, people who suffer from these kinds of health conditions can use a pulse oximeter to monitor any changes in the functioning of their heart or lungs.

Architecture

Local Image

Log

Week 5 - 11 May

Week 12 - 18 May

Week 19 - 25 May

Hardware

  • Raspberry Pi Pico 2W: microcontroller
  • MAX30100: pulse oximetry and heart rate monitor sensor
  • PCD8544: LCD display module
  • Li-Poly Battery 400mAh: battery for powering the device
  • TP4056: LiPo charger
  • Buzzers: for emitting sound warnings
  • LEDs: for emitting visual warnings
  • Button: for turning the device on and off
  • Breadboard 830 pct.: base on which the project is assembled

Schematics

WIP

Bill of Materials

DeviceUsagePrice
Raspberry Pi Pico 2Wmicrocontroller40 RON
MAX30100pulse oximetry sensor25 RON
PCD8544LCD display22 RON
Li-Poly Batterybattery33 RON
TP4056Li-Po Charger6 RON
Breadboard 830 pct.breadboard10 RON
Various Consumablesbuzzers, LEDs, wires, resistors35 RON

Software

LibraryDescriptionUsage
embassyAsynchronous embedded framework for RustCore async runtime; handles tasks, timers, and async hardware support
embassy-rpEmbassy HAL for Raspberry Pi RP2040 chipsProvides async support for Raspberry Pi Pico 2W
embassy-halHardware abstraction layer for EmbassyInterface layer for embedded peripherals in Embassy projects
max3010xRust driver for MAX30100 pulse oximeterInterfaces with MAX30100 over I2C to read SpO2 and heart rate data
pcd8544Rust driver for Nokia 5110 (PCD8544) LCD displayControls the PCD8544 LCD via SPI using embedded-hal traits
  1. HealthLine - Pulse Oximetry: uses, readings and how it works
  2. Lab 03 - PWM & ADC
  3. Lab 04 - Asynchronous Development
  4. Lab 05 - SPI
  5. Lab 06 - I2C