Pulse Oximeter
Device for measuring pulse and SpO2 levels
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
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
Device | Usage | Price |
---|---|---|
Raspberry Pi Pico 2W | microcontroller | 40 RON |
MAX30100 | pulse oximetry sensor | 25 RON |
PCD8544 | LCD display | 22 RON |
Li-Poly Battery | battery | 33 RON |
TP4056 | Li-Po Charger | 6 RON |
Breadboard 830 pct. | breadboard | 10 RON |
Various Consumables | buzzers, LEDs, wires, resistors | 35 RON |
Software
Library | Description | Usage |
---|---|---|
embassy | Asynchronous embedded framework for Rust | Core async runtime; handles tasks, timers, and async hardware support |
embassy-rp | Embassy HAL for Raspberry Pi RP2040 chips | Provides async support for Raspberry Pi Pico 2W |
embassy-hal | Hardware abstraction layer for Embassy | Interface layer for embedded peripherals in Embassy projects |
max3010x | Rust driver for MAX30100 pulse oximeter | Interfaces with MAX30100 over I2C to read SpO2 and heart rate data |
pcd8544 | Rust driver for Nokia 5110 (PCD8544) LCD display | Controls the PCD8544 LCD via SPI using embedded-hal traits |