Jack Shkifati

02 / 10 · Hardware · Embedded · Healthcare

Blood Pressure Monitor

A bare-metal blood-pressure monitor on an ATmega32U4 (Adafruit Circuit Playground). It reads a Honeywell MPRLS pressure sensor over I2C and extracts systolic, diastolic and heart rate from the cuff’s pressure waveform.

5-stage
bare-metal state machine
24-bit
raw sensor telemetry
20-sample
peak-detection buffer
Blood Pressure Monitor: project image from Jack’s site
Fig. 00 · From the project
Fig. 01

Try it

AI-generated voice and avatar
Interactive demoPump the cuff and read the pressure curve
01

Problem & approach

The problem

Measure blood pressure with a small, portable device: read the pressure in a standard cuff and turn it into heart rate, systolic and diastolic values a person can read.

The approach

A 5-stage bare-metal state machine on the ATmega32U4 drives a Honeywell MPRLS sensor over I2C. Custom driver logic checks the sensor’s status bytes and bit-shifts its 24-bit raw readings into real pressure, and a peak detector reads the cardiac cycle.

02

How it works

  1. FirmwareA 5-stage bare-metal state machine on the ATmega32U4 (Adafruit Circuit Playground) runs the whole measurement.
  2. Sensor driverCustom I2C driver logic verifies the MPRLS status bytes and bit-shifts 24-bit raw telemetry into real-time pressure.
  3. Peak detectionA continuous peak detector on a 20-sample circular buffer computes real-time pressure derivatives.
  4. The readingSystolic, diastolic and heart rate come from the waveform slopes and the largest amplitude differences across the cardiac cycle. The NeoPixel ring guides the user through it.
03

Results & stack

5-stage
bare-metal state machine
24-bit
raw sensor telemetry
20-sample
peak-detection buffer
  • ATmega32U4
  • Arduino
  • C/C++
  • I2C
  • Honeywell MPRLS